From 032443611418337842760cef5270489e6ecc1159 Mon Sep 17 00:00:00 2001 From: Alex Clarke Date: Thu, 30 Jul 2026 10:21:19 -0600 Subject: [PATCH] feat: ctrl-c interrupts ongoing prompt in a session, but lets the user inject more instructions mid-stream --- src/client/common.rs | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/src/client/common.rs b/src/client/common.rs index c74e3ce..2b0aec2 100644 --- a/src/client/common.rs +++ b/src/client/common.rs @@ -493,13 +493,30 @@ pub async fn call_chat_completions_streaming( render_stream(rx, client.app_config(), abort_signal.clone(), silent), ); - if handler.abort().aborted() { + let aborted_ctrlc = handler.abort().aborted_ctrlc(); + let aborted_ctrld = handler.abort().aborted_ctrld(); + + if aborted_ctrld { bail!("Aborted."); } render_ret?; let (text, tool_calls, thinking) = handler.take(); + + if aborted_ctrlc { + if text.is_empty() || !ctx.working_mode.is_repl() || ctx.session.is_none() { + bail!("Aborted."); + } + + if !silent && *IS_STDOUT_TERMINAL { + println!(); + eprintln!("{}", error_text("Response interrupted")); + } + + return Ok((text, vec![])); + } + match send_ret { Ok(_) => { if !silent && !text.is_empty() && !text.ends_with('\n') {