diff --git a/server/src/run/engine.rs b/server/src/run/engine.rs index b83c695..42b3808 100644 --- a/server/src/run/engine.rs +++ b/server/src/run/engine.rs @@ -703,6 +703,20 @@ impl RunEngine { emit(client, RunEvent::AutoCompactionStarted) .await .map_err(|_| client_failure())?; + emit( + client, + RunEvent::Usage(Usage { + input_tokens: Some(0), + context_input_tokens: Some(0), + output_tokens: Some(0), + total_tokens: Some(0), + cache_read_tokens: Some(0), + cache_write_tokens: Some(0), + reasoning_tokens: Some(0), + }), + ) + .await + .map_err(|_| client_failure())?; let provider_call_index = self .store .begin_provider_call(&prepared.run_id) diff --git a/server/tests/compaction.rs b/server/tests/compaction.rs index 0476772..2781544 100644 --- a/server/tests/compaction.rs +++ b/server/tests/compaction.rs @@ -267,6 +267,11 @@ async fn automatic_compaction_preflights_provider_input_and_records_rebuilt_toke .await; assert_eq!(second.summary_started, 1); assert_eq!(second.summary_completed, 1); + assert_eq!( + &second.interaction_events[..2], + &["summary_started", "token_delta:0"], + "automatic compaction must immediately reset Cursor usage" + ); let compacted_tokens = second .checkpoints .iter() @@ -469,6 +474,7 @@ struct Output { summary_completed: usize, turn_ended: usize, token_delta: usize, + interaction_events: Vec, } async fn run( @@ -517,7 +523,8 @@ async fn run( Some(pb::agent_server_message::Message::InteractionUpdate(update)) => { match update.message { Some(pb::interaction_update::Message::SummaryStarted(_)) => { - output.summary_started += 1 + output.summary_started += 1; + output.interaction_events.push("summary_started".into()); } Some(pb::interaction_update::Message::Summary(delta)) => { output.summary.push_str(&delta.summary) @@ -526,7 +533,12 @@ async fn run( output.summary_completed += 1 } Some(pb::interaction_update::Message::TurnEnded(_)) => output.turn_ended += 1, - Some(pb::interaction_update::Message::TokenDelta(_)) => output.token_delta += 1, + Some(pb::interaction_update::Message::TokenDelta(delta)) => { + output.token_delta += 1; + output + .interaction_events + .push(format!("token_delta:{}", delta.tokens)); + } _ => {} } }