Kaynağa Gözat

Add proper error handling for API conversation history issues (#4312)

Co-authored-by: Eric Wheeler <[email protected]>
KJ7LNW 6 ay önce
ebeveyn
işleme
9b605c997c
1 değiştirilmiş dosya ile 36 ekleme ve 4 silme
  1. 36 4
      src/core/task-persistence/apiMessages.ts

+ 36 - 4
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 []
 }