Browse Source

Fix parsing all user generated messages in tool results

Saoud Rizwan 1 year ago
parent
commit
17c70003e8
1 changed files with 4 additions and 3 deletions
  1. 4 3
      src/ClaudeDev.ts

+ 4 - 3
src/ClaudeDev.ts

@@ -1637,7 +1637,7 @@ ${this.customInstructions.trim()}
 			// 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)
+			// 2. ToolResultBlockParam's content/context text arrays if it contains "<feedback>" (see formatToolDeniedFeedback, attemptCompletion, executeCommand, and consecutiveMistakeCount >= 3) or "<answer>" (see askFollowupQuestion), we place all user generated content in these tags so they can effectively be used as markers for when we should parse mentions)
 			Promise.all(
 				userContent.map(async (block) => {
 					if (block.type === "text") {
@@ -1646,7 +1646,8 @@ ${this.customInstructions.trim()}
 							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>")) {
+						const isUserMessage = (text: string) => text.includes("<feedback>") || text.includes("<answer>")
+						if (typeof block.content === "string" && isUserMessage(block.content)) {
 							return {
 								...block,
 								content: await parseMentions(block.content, cwd, this.providerRef.deref()?.urlScraper),
@@ -1654,7 +1655,7 @@ ${this.customInstructions.trim()}
 						} else if (Array.isArray(block.content)) {
 							const parsedContent = await Promise.all(
 								block.content.map(async (contentBlock) => {
-									if (contentBlock.type === "text" && contentBlock.text.includes("<feedback>")) {
+									if (contentBlock.type === "text" && isUserMessage(contentBlock.text)) {
 										return {
 											...contentBlock,
 											text: await parseMentions(