@@ -309,6 +309,66 @@ describe("subscribeEmbeddedPiSession", () => {
309309 expect ( payload ?. mediaUrls ) . toBeUndefined ( ) ;
310310 } ) ;
311311
312+ it ( "delivers generated image media once in markdown verbose output" , async ( ) => {
313+ const onToolResult = vi . fn ( ) ;
314+ const onBlockReply = vi . fn ( ) ;
315+ const { emit } = createSubscribedHarness ( {
316+ runId : "run" ,
317+ onToolResult,
318+ onBlockReply,
319+ verboseLevel : "full" ,
320+ blockReplyBreak : "message_end" ,
321+ builtinToolNames : new Set ( [ "image_generate" ] ) ,
322+ } ) ;
323+
324+ emitToolRun ( {
325+ emit,
326+ toolName : "image_generate" ,
327+ toolCallId : "tool-1" ,
328+ isError : false ,
329+ result : {
330+ content : [
331+ {
332+ type : "text" ,
333+ text : "Generated 1 image with google/gemini-3.1-flash-image-preview.\nMEDIA:/tmp/generated.png" ,
334+ } ,
335+ ] ,
336+ details : {
337+ media : {
338+ mediaUrls : [ "/tmp/generated.png" ] ,
339+ } ,
340+ } ,
341+ } ,
342+ } ) ;
343+
344+ await vi . waitFor ( ( ) => {
345+ expect ( onToolResult ) . toHaveBeenCalled ( ) ;
346+ } ) ;
347+ const toolPayload = onToolResult . mock . calls . at ( - 1 ) ?. [ 0 ] as
348+ | { text ?: string ; mediaUrls ?: string [ ] }
349+ | undefined ;
350+ expect ( toolPayload ?. text ?? "" ) . toContain ( "Generated 1 image" ) ;
351+ expect ( toolPayload ?. mediaUrls ) . toBeUndefined ( ) ;
352+
353+ emit ( { type : "message_start" , message : { role : "assistant" } } ) ;
354+ emitAssistantTextDelta ( emit , "Here is the image." ) ;
355+ emit ( {
356+ type : "message_end" ,
357+ message : {
358+ role : "assistant" ,
359+ content : [ { type : "text" , text : "Here is the image." } ] ,
360+ } ,
361+ } ) ;
362+ await flushBlockReplyCallbacks ( ) ;
363+
364+ expect ( onBlockReply ) . toHaveBeenCalledWith (
365+ expect . objectContaining ( {
366+ text : "Here is the image." ,
367+ mediaUrls : [ "/tmp/generated.png" ] ,
368+ } ) ,
369+ ) ;
370+ } ) ;
371+
312372 it ( "attaches media from internal completion events even when assistant omits MEDIA lines" , async ( ) => {
313373 const onBlockReply = vi . fn ( ) ;
314374 const { emit } = createSubscribedHarness ( {
0 commit comments