37 lines
1.1 KiB
TypeScript
37 lines
1.1 KiB
TypeScript
|
|
import type { createOpencodeClient } from "@opencode-ai/sdk"
|
||
|
|
import type { MessageData } from "./types"
|
||
|
|
import { extractMessageIndex } from "./detect-error-type"
|
||
|
|
import { findMessageByIndexNeedingThinking, findMessagesWithOrphanThinking, prependThinkingPart } from "./storage"
|
||
|
|
|
||
|
|
type Client = ReturnType<typeof createOpencodeClient>
|
||
|
|
|
||
|
|
export async function recoverThinkingBlockOrder(
|
||
|
|
_client: Client,
|
||
|
|
sessionID: string,
|
||
|
|
_failedAssistantMsg: MessageData,
|
||
|
|
_directory: string,
|
||
|
|
error: unknown
|
||
|
|
): Promise<boolean> {
|
||
|
|
const targetIndex = extractMessageIndex(error)
|
||
|
|
if (targetIndex !== null) {
|
||
|
|
const targetMessageID = findMessageByIndexNeedingThinking(sessionID, targetIndex)
|
||
|
|
if (targetMessageID) {
|
||
|
|
return prependThinkingPart(sessionID, targetMessageID)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const orphanMessages = findMessagesWithOrphanThinking(sessionID)
|
||
|
|
if (orphanMessages.length === 0) {
|
||
|
|
return false
|
||
|
|
}
|
||
|
|
|
||
|
|
let anySuccess = false
|
||
|
|
for (const messageID of orphanMessages) {
|
||
|
|
if (prependThinkingPart(sessionID, messageID)) {
|
||
|
|
anySuccess = true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return anySuccess
|
||
|
|
}
|