Skip to content
This repository was archived by the owner on May 15, 2026. It is now read-only.
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 21 additions & 1 deletion src/core/task/Task.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1017,7 +1017,27 @@ export class Task extends EventEmitter<TaskEvents> implements TaskLike {
const effectiveHistoryForValidation = getEffectiveApiHistory(this.apiConversationHistory)
const lastEffective = effectiveHistoryForValidation[effectiveHistoryForValidation.length - 1]
const historyForValidation = lastEffective?.role === "assistant" ? effectiveHistoryForValidation : []
const validatedMessage = validateAndFixToolResultIds(message, historyForValidation)

// If the previous effective message is NOT an assistant, convert tool_result blocks to text blocks.
// This prevents orphaned tool_results from being filtered out by getEffectiveApiHistory.
// This can happen when condensing occurs after the assistant sends tool_uses but before
// the user responds - the tool_use blocks get condensed away, leaving orphaned tool_results.
let messageToAdd = message
if (lastEffective?.role !== "assistant" && Array.isArray(message.content)) {
messageToAdd = {
...message,
content: message.content.map((block) =>
block.type === "tool_result"
? {
type: "text" as const,
text: `Tool result:\n${typeof block.content === "string" ? block.content : JSON.stringify(block.content)}`,
}
: block,
),
}
}

const validatedMessage = validateAndFixToolResultIds(messageToAdd, historyForValidation)
const messageWithTs = { ...validatedMessage, ts: Date.now() }
this.apiConversationHistory.push(messageWithTs)
}
Expand Down
Loading