Parcourir la source

fix: validate tool_result IDs in delegation resume flow (#10135)

Daniel il y a 2 semaines
Parent
commit
c7cdf8398e
1 fichiers modifiés avec 10 ajouts et 0 suppressions
  1. 10 0
      src/core/webview/ClineProvider.ts

+ 10 - 0
src/core/webview/ClineProvider.ts

@@ -98,6 +98,7 @@ import { readTaskMessages } from "../task-persistence/taskMessages"
 import { getNonce } from "./getNonce"
 import { getUri } from "./getUri"
 import { REQUESTY_BASE_URL } from "../../shared/utils/requesty"
+import { validateAndFixToolResultIds } from "../task/validateToolResultIds"
 
 /**
  * https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts
@@ -3167,6 +3168,15 @@ export class ClineProvider
 			})
 		}
 
+		// Validate the newly injected tool_result against the preceding assistant message.
+		// This ensures the tool_result's tool_use_id matches a tool_use in the immediately
+		// preceding assistant message (Anthropic API requirement).
+		const lastMessage = parentApiMessages[parentApiMessages.length - 1]
+		if (lastMessage?.role === "user") {
+			const validatedMessage = validateAndFixToolResultIds(lastMessage, parentApiMessages.slice(0, -1))
+			parentApiMessages[parentApiMessages.length - 1] = validatedMessage
+		}
+
 		await saveApiMessages({ messages: parentApiMessages as any, taskId: parentTaskId, globalStoragePath })
 
 		// 3) Update child metadata to "completed" status