Skip to content

Commit 1b7f011

Browse files
committed
feat: show notification for pruning, shows tokens saved when finished
1 parent 73a76c1 commit 1b7f011

File tree

1 file changed

+17
-0
lines changed

1 file changed

+17
-0
lines changed

packages/opencode/src/session/compaction.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { BusEvent } from "@/bus/bus-event"
22
import { Bus } from "@/bus"
3+
import { TuiEvent } from "@/cli/cmd/tui/event"
34
import { Session } from "."
45
import { Identifier } from "../id/id"
56
import { 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

Comments
 (0)