11import { BusEvent } from "@/bus/bus-event"
22import { Bus } from "@/bus"
3+ import { TuiEvent } from "@/cli/cmd/tui/event"
34import { Session } from "."
45import { Identifier } from "../id/id"
56import { Instance } from "../project/instance"
@@ -327,6 +328,12 @@ ${p.output.slice(0, 8000)}${p.output.length > 8000 ? "\n... (truncated)" : ""}
327328 return
328329 }
329330
331+ Bus . publish ( TuiEvent . ToastShow , {
332+ message : "Smart pruning started..." ,
333+ variant : "info" ,
334+ duration : 2000 ,
335+ } )
336+
330337 // Generate summaries for content tools being pruned (if enabled)
331338 let summaries = new Map < string , string > ( )
332339 if ( pruningConfig . summarizationEnabled ) {
@@ -342,12 +349,15 @@ ${p.output.slice(0, 8000)}${p.output.length > 8000 ? "\n... (truncated)" : ""}
342349 summaries = await summarizeToolOutputs ( partsToSummarize , providerID , pruningConfig . summarizationModel )
343350 }
344351
352+ let savedTokens = totalToPrune
353+
345354 // Apply pruning - content tools get summaries
346355 for ( const { part } of contentToPrune . parts ) {
347356 if ( part . state . status === "completed" ) {
348357 const summary = summaries . get ( part . id )
349358 if ( summary ) {
350359 part . state . summary = summary
360+ savedTokens -= Token . estimate ( summary )
351361 }
352362 part . state . time . compacted = Date . now ( )
353363 await Session . updatePart ( part )
@@ -359,11 +369,18 @@ ${p.output.slice(0, 8000)}${p.output.length > 8000 ? "\n... (truncated)" : ""}
359369 if ( part . state . status === "completed" ) {
360370 const compressed = compressNavigationOutput ( part . tool , part . state . output )
361371 part . state . summary = compressed
372+ savedTokens -= Token . estimate ( compressed )
362373 part . state . time . compacted = Date . now ( )
363374 await Session . updatePart ( part )
364375 }
365376 }
366377
378+ Bus . publish ( TuiEvent . ToastShow , {
379+ title : "Smart Pruning" ,
380+ message : `Saved ${ Math . round ( savedTokens ) } tokens` ,
381+ variant : "success" ,
382+ } )
383+
367384 log . info ( "pruned" , {
368385 contentCount : contentToPrune . parts . length ,
369386 navigationCount : navigationToPrune . parts . length ,
0 commit comments