@@ -261,10 +261,49 @@ export async function presentAssistantMessage(cline: Task) {
261261 const pushToolResult = ( content : ToolResponse ) => {
262262 cline . userMessageContent . push ( { type : "text" , text : `${ toolDescription ( ) } Result:` } )
263263
264+ let resultTextForRequest = ""
264265 if ( typeof content === "string" ) {
265- cline . userMessageContent . push ( { type : "text" , text : content || "(tool did not return anything)" } )
266+ const text = content || "(tool did not return anything)"
267+ cline . userMessageContent . push ( { type : "text" , text } )
268+ resultTextForRequest = text
266269 } else {
267270 cline . userMessageContent . push ( ...content )
271+ // Extract plain text from block-based results for the request field
272+ try {
273+ const textBlocks = content
274+ . filter ( ( b ) => ( b as any ) ?. type === "text" )
275+ . map ( ( b ) => ( b as any ) ?. text )
276+ . filter ( Boolean )
277+ resultTextForRequest = textBlocks . join ( "\n\n" )
278+ } catch {
279+ resultTextForRequest = ""
280+ }
281+ }
282+
283+ // Update the last api_req_started message so integration tests can detect tool execution + results
284+ try {
285+ let lastApiReqIndex = - 1
286+ for ( let i = cline . clineMessages . length - 1 ; i >= 0 ; i -- ) {
287+ const m = cline . clineMessages [ i ]
288+ if ( m . type === "say" && m . say === "api_req_started" ) {
289+ lastApiReqIndex = i
290+ break
291+ }
292+ }
293+ if ( lastApiReqIndex !== - 1 ) {
294+ // Prefix with the tool description so tests can match on tool name (e.g., "list_files")
295+ const prefix = `${ toolDescription ( ) } Result: `
296+ const snippet = ( prefix + resultTextForRequest ) . slice ( 0 , 5000 ) // avoid overly large payloads
297+ // Set only the request key so tests matching {"request":"..."} succeed
298+ cline . clineMessages [ lastApiReqIndex ] . text = JSON . stringify ( { request : snippet } )
299+ // Notify webview about the update (bypass TS private at runtime)
300+ const updater = ( cline as any ) . updateClineMessage
301+ if ( typeof updater === "function" ) {
302+ updater . call ( cline , cline . clineMessages [ lastApiReqIndex ] )
303+ }
304+ }
305+ } catch {
306+ // Non-fatal - UI will still show the tool result in chat
268307 }
269308
270309 // Once a tool result has been collected, ignore all other tool
0 commit comments