mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
Parse user content / tool result blocks before making API request
This commit is contained in:
@@ -421,9 +421,6 @@ export class ClaudeDev {
|
|||||||
if (this.lastMessageTs !== askTs) {
|
if (this.lastMessageTs !== askTs) {
|
||||||
throw new Error("Current ask promise was ignored") // could happen if we send multiple asks in a row i.e. with command_output. It's important that when we know an ask could fail, it is handled gracefully
|
throw new Error("Current ask promise was ignored") // could happen if we send multiple asks in a row i.e. with command_output. It's important that when we know an ask could fail, it is handled gracefully
|
||||||
}
|
}
|
||||||
if (this.askResponse === "messageResponse" && this.askResponseText) {
|
|
||||||
this.askResponseText = await parseMentions(this.askResponseText, cwd, this.providerRef.deref()?.urlScraper)
|
|
||||||
}
|
|
||||||
const result = { response: this.askResponse!, text: this.askResponseText, images: this.askResponseImages }
|
const result = { response: this.askResponse!, text: this.askResponseText, images: this.askResponseImages }
|
||||||
this.askResponse = undefined
|
this.askResponse = undefined
|
||||||
this.askResponseText = undefined
|
this.askResponseText = undefined
|
||||||
@@ -1630,12 +1627,59 @@ ${this.customInstructions.trim()}
|
|||||||
request:
|
request:
|
||||||
userContent
|
userContent
|
||||||
.map((block) => formatContentBlockToMarkdown(block, this.apiConversationHistory))
|
.map((block) => formatContentBlockToMarkdown(block, this.apiConversationHistory))
|
||||||
.join("\n\n") + "\n\n<environment_details>\nLoading...\n</environment_details>",
|
.join("\n\n") + "\n\nLoading...",
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
|
|
||||||
// potentially expensive operation
|
// potentially expensive operations
|
||||||
const environmentDetails = await this.getEnvironmentDetails(includeFileDetails)
|
const [parsedUserContent, environmentDetails] = await Promise.all([
|
||||||
|
// Process userContent array, which contains various block types:
|
||||||
|
// TextBlockParam, ImageBlockParam, ToolUseBlockParam, and ToolResultBlockParam.
|
||||||
|
// We need to apply parseMentions() to:
|
||||||
|
// 1. All TextBlockParam's text (first user message with task)
|
||||||
|
// 2. ToolResultBlockParam's content/context text arrays if it contains "<feedback>" (see formatToolDeniedFeedback and consecutiveMistakeCount >= 3 above, we place all user generated tool results in <feedback> tags)
|
||||||
|
Promise.all(
|
||||||
|
userContent.map(async (block) => {
|
||||||
|
if (block.type === "text") {
|
||||||
|
return {
|
||||||
|
...block,
|
||||||
|
text: await parseMentions(block.text, cwd, this.providerRef.deref()?.urlScraper),
|
||||||
|
}
|
||||||
|
} else if (block.type === "tool_result") {
|
||||||
|
if (typeof block.content === "string" && block.content.includes("<feedback>")) {
|
||||||
|
return {
|
||||||
|
...block,
|
||||||
|
content: await parseMentions(block.content, cwd, this.providerRef.deref()?.urlScraper),
|
||||||
|
}
|
||||||
|
} else if (Array.isArray(block.content)) {
|
||||||
|
const parsedContent = await Promise.all(
|
||||||
|
block.content.map(async (contentBlock) => {
|
||||||
|
if (contentBlock.type === "text" && contentBlock.text.includes("<feedback>")) {
|
||||||
|
return {
|
||||||
|
...contentBlock,
|
||||||
|
text: await parseMentions(
|
||||||
|
contentBlock.text,
|
||||||
|
cwd,
|
||||||
|
this.providerRef.deref()?.urlScraper
|
||||||
|
),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return contentBlock
|
||||||
|
})
|
||||||
|
)
|
||||||
|
return {
|
||||||
|
...block,
|
||||||
|
content: parsedContent,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return block
|
||||||
|
})
|
||||||
|
),
|
||||||
|
this.getEnvironmentDetails(includeFileDetails),
|
||||||
|
])
|
||||||
|
|
||||||
|
userContent = parsedUserContent
|
||||||
|
|
||||||
// add environment details as its own text block, separate from tool results
|
// add environment details as its own text block, separate from tool results
|
||||||
userContent.push({ type: "text", text: environmentDetails })
|
userContent.push({ type: "text", text: environmentDetails })
|
||||||
|
|||||||
Reference in New Issue
Block a user