From d065241c9372d03e9752e987ab8e7ef84d5b2841 Mon Sep 17 00:00:00 2001 From: Hunter Bown Date: Thu, 21 May 2026 00:13:02 +0800 Subject: [PATCH] fix(tui): clear all displayed cost state --- crates/tui/src/commands/core.rs | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/crates/tui/src/commands/core.rs b/crates/tui/src/commands/core.rs index fe64fec0..4820b1bd 100644 --- a/crates/tui/src/commands/core.rs +++ b/crates/tui/src/commands/core.rs @@ -57,6 +57,11 @@ pub fn clear(app: &mut App) -> CommandResult { app.session.total_conversation_tokens = 0; app.session.session_cost = 0.0; app.session.session_cost_cny = 0.0; + app.session.subagent_cost = 0.0; + app.session.subagent_cost_cny = 0.0; + app.session.subagent_cost_event_seqs.clear(); + app.session.displayed_cost_high_water = 0.0; + app.session.displayed_cost_high_water_cny = 0.0; let todos_cleared = app.clear_todos(); app.tool_log.clear(); app.tool_cells.clear(); @@ -69,7 +74,9 @@ pub fn clear(app: &mut App) -> CommandResult { app.session.last_completion_tokens = None; app.session.last_prompt_cache_hit_tokens = None; app.session.last_prompt_cache_miss_tokens = None; + app.session.last_reasoning_replay_tokens = None; app.session.turn_cache_history.clear(); + app.session.last_cache_inspection = None; app.current_session_id = None; let locale = app.ui_locale; let message = if todos_cleared { @@ -370,6 +377,7 @@ pub fn translate(app: &mut App) -> CommandResult { #[cfg(test)] mod tests { use super::*; + use crate::client::PromptInspection; use crate::config::Config; use crate::models::Message; use crate::tui::app::{App, AppMode, TuiOptions, TurnCacheRecord}; @@ -523,8 +531,19 @@ mod tests { app.session.total_conversation_tokens = 123; app.session.session_cost = 0.42; app.session.session_cost_cny = 3.05; + app.session.subagent_cost = 0.11; + app.session.subagent_cost_cny = 0.80; + app.session.subagent_cost_event_seqs.insert(7); + app.session.displayed_cost_high_water = 0.53; + app.session.displayed_cost_high_water_cny = 3.85; app.session.last_prompt_cache_hit_tokens = Some(70); app.session.last_prompt_cache_miss_tokens = Some(30); + app.session.last_reasoning_replay_tokens = Some(12); + app.session.last_cache_inspection = Some(PromptInspection { + base_static_prefix_hash: "base".to_string(), + full_request_prefix_hash: "full".to_string(), + layers: Vec::new(), + }); app.push_turn_cache_record(TurnCacheRecord { input_tokens: 100, output_tokens: 25, @@ -540,9 +559,16 @@ mod tests { assert_eq!(app.session.total_conversation_tokens, 0); assert_eq!(app.session.session_cost, 0.0); assert_eq!(app.session.session_cost_cny, 0.0); + assert_eq!(app.session.subagent_cost, 0.0); + assert_eq!(app.session.subagent_cost_cny, 0.0); + assert!(app.session.subagent_cost_event_seqs.is_empty()); + assert_eq!(app.session.displayed_cost_high_water, 0.0); + assert_eq!(app.session.displayed_cost_high_water_cny, 0.0); assert_eq!(app.session.last_prompt_cache_hit_tokens, None); assert_eq!(app.session.last_prompt_cache_miss_tokens, None); + assert_eq!(app.session.last_reasoning_replay_tokens, None); assert!(app.session.turn_cache_history.is_empty()); + assert_eq!(app.session.last_cache_inspection, None); } #[test]