fix(clear): reset session telemetry (#1047)

This commit is contained in:
axobase001
2026-05-07 19:26:43 +08:00
committed by GitHub
parent 628fb3c4a8
commit 2644be9b52
+37 -1
View File
@@ -52,7 +52,10 @@ pub fn clear(app: &mut App) -> CommandResult {
app.viewport.transcript_selection.clear();
app.queued_messages.clear();
app.queued_draft = None;
app.session.total_tokens = 0;
app.session.total_conversation_tokens = 0;
app.session.session_cost = 0.0;
app.session.session_cost_cny = 0.0;
let todos_cleared = app.clear_todos();
app.tool_log.clear();
app.tool_cells.clear();
@@ -63,6 +66,9 @@ pub fn clear(app: &mut App) -> CommandResult {
app.last_exec_wait_command = None;
app.session.last_prompt_tokens = None;
app.session.last_completion_tokens = None;
app.session.last_prompt_cache_hit_tokens = None;
app.session.last_prompt_cache_miss_tokens = None;
app.session.turn_cache_history.clear();
app.current_session_id = None;
let locale = app.ui_locale;
let message = if todos_cleared {
@@ -295,9 +301,10 @@ mod tests {
use super::*;
use crate::config::Config;
use crate::models::Message;
use crate::tui::app::{App, AppMode, TuiOptions};
use crate::tui::app::{App, AppMode, TuiOptions, TurnCacheRecord};
use crate::tui::history::HistoryCell;
use std::path::PathBuf;
use std::time::Instant;
fn create_test_app() -> App {
let options = TuiOptions {
@@ -424,6 +431,35 @@ mod tests {
assert!(matches!(result.action, Some(AppAction::SyncSession { .. })));
}
#[test]
fn clear_resets_session_telemetry() {
let mut app = create_test_app();
app.session.total_tokens = 234;
app.session.total_conversation_tokens = 123;
app.session.session_cost = 0.42;
app.session.session_cost_cny = 3.05;
app.session.last_prompt_cache_hit_tokens = Some(70);
app.session.last_prompt_cache_miss_tokens = Some(30);
app.push_turn_cache_record(TurnCacheRecord {
input_tokens: 100,
output_tokens: 25,
cache_hit_tokens: Some(70),
cache_miss_tokens: Some(30),
reasoning_replay_tokens: Some(12),
recorded_at: Instant::now(),
});
clear(&mut app);
assert_eq!(app.session.total_tokens, 0);
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.last_prompt_cache_hit_tokens, None);
assert_eq!(app.session.last_prompt_cache_miss_tokens, None);
assert!(app.session.turn_cache_history.is_empty());
}
#[test]
fn test_exit_returns_quit_action() {
let result = exit();