File tree Expand file tree Collapse file tree 2 files changed +23
-12
lines changed
crates/code_assistant/src/session Expand file tree Collapse file tree 2 files changed +23
-12
lines changed Original file line number Diff line number Diff line change @@ -429,19 +429,22 @@ impl UserInterface for ProxyUI {
429429 // Update activity state to waiting for response
430430 self . update_activity_state ( SessionActivityState :: WaitingForResponse ) ;
431431 }
432- UiEvent :: StreamingStopped { .. } => {
432+ UiEvent :: StreamingStopped { cancelled , .. } => {
433433 // Clear fragment buffer when LLM request ends - fragments are now part of message history
434434 if let Ok ( mut buffer) = self . fragment_buffer . lock ( ) {
435435 buffer. clear ( ) ;
436436 }
437- // Update activity state back to agent running (it will be set to idle when agent completes)
438- let current_state = self . session_activity_state . lock ( ) . unwrap ( ) . clone ( ) ;
439- if matches ! (
440- current_state,
441- SessionActivityState :: WaitingForResponse
442- | SessionActivityState :: RateLimited { .. }
443- ) {
444- self . update_activity_state ( SessionActivityState :: AgentRunning ) ;
437+ // Only update activity state back to agent running if streaming was not cancelled
438+ // If cancelled, the agent task will end soon and set state to Idle
439+ if !cancelled {
440+ let current_state = self . session_activity_state . lock ( ) . unwrap ( ) . clone ( ) ;
441+ if matches ! (
442+ current_state,
443+ SessionActivityState :: WaitingForResponse
444+ | SessionActivityState :: RateLimited { .. }
445+ ) {
446+ self . update_activity_state ( SessionActivityState :: AgentRunning ) ;
447+ }
445448 }
446449 }
447450 _ => { }
Original file line number Diff line number Diff line change @@ -280,19 +280,27 @@ impl SessionManager {
280280 debug ! ( "Starting agent for session {}" , session_id_clone) ;
281281 let result = agent. run_single_iteration ( ) . await ;
282282
283- // Set session state back to Idle when agent completes and broadcast
283+ // Always set session state back to Idle when agent task ends (regardless of success/failure/cancellation)
284+ debug ! ( "Agent task ending for session {}, setting state to Idle" , session_id_clone) ;
284285 if let Ok ( mut state) = activity_state_ref. lock ( ) {
285286 * state = crate :: session:: instance:: SessionActivityState :: Idle ;
286287 }
287288
288- let _ = ui_clone
289+ // Always broadcast the state change to UI
290+ let send_result = ui_clone
289291 . send_event ( crate :: ui:: UiEvent :: UpdateSessionActivityState {
290292 session_id : session_id_clone. clone ( ) ,
291293 activity_state : crate :: session:: instance:: SessionActivityState :: Idle ,
292294 } )
293295 . await ;
294296
295- debug ! ( "Agent completed for session {}" , session_id_clone) ;
297+ if let Err ( e) = send_result {
298+ debug ! ( "Failed to send UpdateSessionActivityState event for session {}: {}" , session_id_clone, e) ;
299+ } else {
300+ debug ! ( "Successfully sent UpdateSessionActivityState(Idle) event for session {}" , session_id_clone) ;
301+ }
302+
303+ debug ! ( "Agent completed for session {} with result: {:?}" , session_id_clone, result. is_ok( ) ) ;
296304 result
297305 } ) ;
298306
You can’t perform that action at this time.
0 commit comments