diff --git a/assets/settings/default.json b/assets/settings/default.json index b30eee9621176469a99cfea32875551a61febde8..ad331dbb79a6c1c4caabf41659b4599f4d0aa7ce 100644 --- a/assets/settings/default.json +++ b/assets/settings/default.json @@ -1112,6 +1112,11 @@ // // Default: true "expand_terminal_card": true, + // Whether clicking the stop button on a running terminal tool should also cancel the agent's generation. + // Note that this only applies to the stop button, not to ctrl+c inside the terminal. + // + // Default: true + "cancel_generation_on_terminal_stop": true, // Whether to always use cmd-enter (or ctrl-enter on Linux or Windows) to send messages in the agent panel. // // Default: false diff --git a/crates/agent_settings/src/agent_settings.rs b/crates/agent_settings/src/agent_settings.rs index 7d466a2be69b4e6841a81edb8ab0bdae3ad8f2b2..9b5960eed27c07528d8dd04ef605064fb1695c2f 100644 --- a/crates/agent_settings/src/agent_settings.rs +++ b/crates/agent_settings/src/agent_settings.rs @@ -46,6 +46,7 @@ pub struct AgentSettings { pub enable_feedback: bool, pub expand_edit_card: bool, pub expand_terminal_card: bool, + pub cancel_generation_on_terminal_stop: bool, pub use_modifier_to_send: bool, pub message_editor_min_lines: usize, pub show_turn_stats: bool, @@ -256,6 +257,7 @@ impl Settings for AgentSettings { enable_feedback: agent.enable_feedback.unwrap(), expand_edit_card: agent.expand_edit_card.unwrap(), expand_terminal_card: agent.expand_terminal_card.unwrap(), + cancel_generation_on_terminal_stop: agent.cancel_generation_on_terminal_stop.unwrap(), use_modifier_to_send: agent.use_modifier_to_send.unwrap(), message_editor_min_lines: agent.message_editor_min_lines.unwrap(), show_turn_stats: agent.show_turn_stats.unwrap(), diff --git a/crates/agent_ui/src/acp/thread_view.rs b/crates/agent_ui/src/acp/thread_view.rs index 75bb3716d8abfd6f1399a7011e04f86f97060313..b38348ed3f29722687039199cc7ea669c548d266 100644 --- a/crates/agent_ui/src/acp/thread_view.rs +++ b/crates/agent_ui/src/acp/thread_view.rs @@ -4633,7 +4633,9 @@ impl AcpThreadView { terminal.update(cx, |terminal, cx| { terminal.stop_by_user(cx); }); - this.cancel_generation(cx); + if AgentSettings::get_global(cx).cancel_generation_on_terminal_stop { + this.cancel_generation(cx); + } }) }), ) diff --git a/crates/agent_ui/src/agent_ui.rs b/crates/agent_ui/src/agent_ui.rs index 5da5bababb69ceaece575ba0bcb771fb528a076f..6ed8f73f22332324aaa47a310502ca6940904b46 100644 --- a/crates/agent_ui/src/agent_ui.rs +++ b/crates/agent_ui/src/agent_ui.rs @@ -538,6 +538,7 @@ mod tests { enable_feedback: false, expand_edit_card: true, expand_terminal_card: true, + cancel_generation_on_terminal_stop: true, use_modifier_to_send: true, message_editor_min_lines: 1, tool_permissions: Default::default(), diff --git a/crates/settings_content/src/agent.rs b/crates/settings_content/src/agent.rs index 8d8331ec262b0f738e64f7e64f7affa6f684ff25..56a7efaa6ebfc52446673010a0f8d882e22782cb 100644 --- a/crates/settings_content/src/agent.rs +++ b/crates/settings_content/src/agent.rs @@ -109,6 +109,11 @@ pub struct AgentSettingsContent { /// /// Default: true pub expand_terminal_card: Option, + /// Whether clicking the stop button on a running terminal tool should also cancel the agent's generation. + /// Note that this only applies to the stop button, not to ctrl+c inside the terminal. + /// + /// Default: true + pub cancel_generation_on_terminal_stop: Option, /// Whether to always use cmd-enter (or ctrl-enter on Linux or Windows) to send messages in the agent panel. /// /// Default: false diff --git a/crates/settings_ui/src/page_data.rs b/crates/settings_ui/src/page_data.rs index dc9d1d81aed51da52e15cc030630d9d73991bac3..d82fdf338a9e0f8b139a5ccfcb0eb40114b7d41f 100644 --- a/crates/settings_ui/src/page_data.rs +++ b/crates/settings_ui/src/page_data.rs @@ -6830,7 +6830,7 @@ fn ai_page() -> SettingsPage { ] } - fn agent_configuration_section() -> [SettingsPageItem; 11] { + fn agent_configuration_section() -> [SettingsPageItem; 12] { [ SettingsPageItem::SectionHeader("Agent Configuration"), SettingsPageItem::SettingItem(SettingItem { @@ -6975,6 +6975,28 @@ fn ai_page() -> SettingsPage { metadata: None, files: USER, }), + SettingsPageItem::SettingItem(SettingItem { + title: "Cancel Generation On Terminal Stop", + description: "Whether clicking the stop button on a running terminal tool should also cancel the agent's generation. Note that this only applies to the stop button, not to ctrl+c inside the terminal.", + field: Box::new(SettingField { + json_path: Some("agent.cancel_generation_on_terminal_stop"), + pick: |settings_content| { + settings_content + .agent + .as_ref()? + .cancel_generation_on_terminal_stop + .as_ref() + }, + write: |settings_content, value| { + settings_content + .agent + .get_or_insert_default() + .cancel_generation_on_terminal_stop = value; + }, + }), + metadata: None, + files: USER, + }), SettingsPageItem::SettingItem(SettingItem { title: "Use Modifier To Send", description: "Whether to always use cmd-enter (or ctrl-enter on Linux or Windows) to send messages.",