mirror of
https://github.com/aljazceru/goose.git
synced 2026-01-31 12:14:32 +01:00
fix: Ctrl+C or ESC during CLI menu selection continues the current session gracefully (#2664)
Co-authored-by: Angie Jones <jones.angie@gmail.com>
This commit is contained in:
@@ -555,7 +555,16 @@ impl Session {
|
||||
|
||||
let prompt = "Are you sure you want to summarize this conversation? This will condense the message history.";
|
||||
let should_summarize =
|
||||
cliclack::confirm(prompt).initial_value(true).interact()?;
|
||||
match cliclack::confirm(prompt).initial_value(true).interact() {
|
||||
Ok(choice) => choice,
|
||||
Err(e) => {
|
||||
if e.kind() == std::io::ErrorKind::Interrupted {
|
||||
false // If interrupted, set should_summarize to false
|
||||
} else {
|
||||
return Err(e.into());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if should_summarize {
|
||||
println!("{}", console::style("Summarizing conversation...").yellow());
|
||||
@@ -624,10 +633,21 @@ impl Session {
|
||||
match planner_response_type {
|
||||
PlannerResponseType::Plan => {
|
||||
println!();
|
||||
let should_act =
|
||||
cliclack::confirm("Do you want to clear message history & act on this plan?")
|
||||
.initial_value(true)
|
||||
.interact()?;
|
||||
let should_act = match cliclack::confirm(
|
||||
"Do you want to clear message history & act on this plan?",
|
||||
)
|
||||
.initial_value(true)
|
||||
.interact()
|
||||
{
|
||||
Ok(choice) => choice,
|
||||
Err(e) => {
|
||||
if e.kind() == std::io::ErrorKind::Interrupted {
|
||||
false // If interrupted, set should_act to false
|
||||
} else {
|
||||
return Err(e.into());
|
||||
}
|
||||
}
|
||||
};
|
||||
if should_act {
|
||||
output::render_act_on_plan();
|
||||
self.run_mode = RunMode::Normal;
|
||||
@@ -751,11 +771,23 @@ impl Session {
|
||||
if interactive {
|
||||
// In interactive mode, ask the user what to do
|
||||
let prompt = "The model's context length is maxed out. You will need to reduce the # msgs. Do you want to?".to_string();
|
||||
let selected = cliclack::select(prompt)
|
||||
let selected_result = cliclack::select(prompt)
|
||||
.item("clear", "Clear Session", "Removes all messages from Goose's memory")
|
||||
.item("truncate", "Truncate Messages", "Removes old messages till context is within limits")
|
||||
.item("summarize", "Summarize Session", "Summarize the session to reduce context length")
|
||||
.interact()?;
|
||||
.item("cancel", "Cancel", "Cancel and return to chat")
|
||||
.interact();
|
||||
|
||||
let selected = match selected_result {
|
||||
Ok(s) => s,
|
||||
Err(e) => {
|
||||
if e.kind() == std::io::ErrorKind::Interrupted {
|
||||
"cancel" // If interrupted, set selected to cancel
|
||||
} else {
|
||||
return Err(e.into());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
match selected {
|
||||
"clear" => {
|
||||
@@ -776,6 +808,9 @@ impl Session {
|
||||
// Use the helper function to summarize context
|
||||
Self::summarize_context_messages(&mut self.messages, &self.agent, "Goose summarized messages for you.").await?;
|
||||
}
|
||||
"cancel" => {
|
||||
break; // Return to main prompt
|
||||
}
|
||||
_ => {
|
||||
unreachable!()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user