From bf1fa62d148712ad5d6e0ebe8b4376bb7b46be6a Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Wed, 8 Apr 2026 21:30:57 -0400 Subject: [PATCH] Restore format_budget: window-based %, free%, colon format, .max(1) Matched the old format_budget behavior: uses context_window as denominator (not budget), shows free%, uses colon separators, .max(1) for non-zero sections. Added mem% split. Co-Authored-By: Proof of Concept --- src/user/chat.rs | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/src/user/chat.rs b/src/user/chat.rs index 5d6c965..930b64c 100644 --- a/src/user/chat.rs +++ b/src/user/chat.rs @@ -879,11 +879,11 @@ impl ScreenView for InteractScreen { .unwrap_or_default(); } if let Ok(ctx) = self.agent.context.try_lock() { - let budget = crate::agent::context::context_budget_tokens(); - let sys = ctx.system().iter().map(|n| n.tokens()).sum::(); - let id = ctx.identity().iter().map(|n| n.tokens()).sum::(); - let jnl = ctx.journal().iter().map(|n| n.tokens()).sum::(); - let (mem, conv) = { + let window = crate::agent::context::context_window(); + if window > 0 { + let sys = ctx.system().iter().map(|n| n.tokens()).sum::(); + let id = ctx.identity().iter().map(|n| n.tokens()).sum::(); + let jnl = ctx.journal().iter().map(|n| n.tokens()).sum::(); let mut mem = 0usize; let mut conv = 0usize; for n in ctx.conversation() { @@ -894,15 +894,14 @@ impl ScreenView for InteractScreen { conv += t; } } - (mem, conv) - }; - let total = sys + id + jnl + mem + conv; - let pct = |n: usize| if budget > 0 { n * 100 / budget } else { 0 }; - app.status.context_budget = format!( - "sys {}% id {}% jnl {}% mem {}% conv {}% = {}K/{}K", - pct(sys), pct(id), pct(jnl), pct(mem), pct(conv), - total / 1000, budget / 1000, - ); + let used = sys + id + jnl + mem + conv; + let free = window.saturating_sub(used); + let pct = |n: usize| if n == 0 { 0 } else { ((n * 100) / window).max(1) }; + app.status.context_budget = format!( + "sys:{}% id:{}% jnl:{}% mem:{}% conv:{}% free:{}%", + pct(sys), pct(id), pct(jnl), pct(mem), pct(conv), pct(free), + ); + } } { let mind = self.shared_mind.lock().unwrap();