@ -83,7 +83,7 @@ fn content_preview(entry: &crate::models::session::RawEntry, max_len: usize) ->
/// Render a single entry to stdout in human-readable text format.
///
/// Thinking blocks are shown only when `opts.include.thinking` is set.
/// Tool result blocks are shown only when `opts.include.output` is set .
/// Tool result blocks are always shown, truncated to 200 chars unless `opts.verbose` .
fn render_entry_text ( entry : & crate ::models ::session ::RawEntry , opts : & crate ::cli ::GlobalOpts ) {
let Some ( msg ) = & entry . message else { return } ;
let role = msg . role . as_deref ( ) . unwrap_or ( "?" ) ;
@ -113,18 +113,20 @@ fn render_entry_text(entry: &crate::models::session::RawEntry, opts: &crate::cli
crate ::models ::session ::ContentBlock ::ToolResult {
content , is_error , ..
} = > {
if opts . include . output {
let err_flag = if is_error . unwrap_or ( false ) {
" (error)"
} else {
""
} ;
let preview = content
. as_ref ( )
. and_then ( | c | c . as_str ( ) . map ( | s | s . to_string ( ) ) )
. unwrap_or_else ( | | {
content . as_ref ( ) . map ( | c | c . to_string ( ) ) . unwrap_or_default ( )
} ) ;
let err_flag = if is_error . unwrap_or ( false ) {
" (error)"
} else {
""
} ;
let preview = content
. as_ref ( )
. and_then ( | c | c . as_str ( ) . map ( | s | s . to_string ( ) ) )
. unwrap_or_else ( | | {
content . as_ref ( ) . map ( | c | c . to_string ( ) ) . unwrap_or_default ( )
} ) ;
if opts . verbose {
println! ( "[tool_result{err_flag}]: {preview}" ) ;
} else {
let boundary = preview . floor_char_boundary ( 200 ) ;
let short = & preview [ .. boundary ] ;
println! ( "[tool_result{err_flag}]: {short}" ) ;
@ -917,9 +919,9 @@ mod tests {
assert_eq! ( result [ 2 ] [ 0 ] , "5-6" ) ;
}
/// `render_entry_text` does not print tool results when `include.output` is false .
/// `render_entry_text` always shows tool results (truncated by default) without panicking .
#[ test ]
fn render_entry_text_tool_result_ gated ( ) {
fn render_entry_text_tool_result_ always_shown ( ) {
let entry = make_raw_entry (
"user" ,
"user" ,
@ -929,7 +931,7 @@ mod tests {
is_error : Some ( false ) ,
} ] ) ,
) ;
let opts = default_opts ( ) ; // include.output = false
let opts = default_opts ( ) ; // verbose = false → truncated at 200 chars
render_entry_text ( & entry , & opts ) ; // must not panic
}
}