fix: replace panics with user-friendly errors in CLI session builder (#7901)

This commit is contained in:
jeffa-block
2026-03-27 08:23:07 +11:00
committed by GitHub
parent 143a269b18
commit 907c661f3e
+31 -8
View File
@@ -359,7 +359,10 @@ fn resolve_provider_and_model(
.or(saved_provider) .or(saved_provider)
.or_else(|| recipe_settings.and_then(|s| s.goose_provider.clone())) .or_else(|| recipe_settings.and_then(|s| s.goose_provider.clone()))
.or_else(|| config.get_goose_provider().ok()) .or_else(|| config.get_goose_provider().ok())
.expect("No provider configured. Run 'goose configure' first"); .unwrap_or_else(|| {
output::render_error("No provider configured. Run 'goose configure' first.");
process::exit(1);
});
let model_name = session_config let model_name = session_config
.model .model
@@ -367,7 +370,10 @@ fn resolve_provider_and_model(
.or_else(|| saved_model_config.as_ref().map(|mc| mc.model_name.clone())) .or_else(|| saved_model_config.as_ref().map(|mc| mc.model_name.clone()))
.or_else(|| recipe_settings.and_then(|s| s.goose_model.clone())) .or_else(|| recipe_settings.and_then(|s| s.goose_model.clone()))
.or_else(|| config.get_goose_model().ok()) .or_else(|| config.get_goose_model().ok())
.expect("No model configured. Run 'goose configure' first"); .unwrap_or_else(|| {
output::render_error("No model configured. Run 'goose configure' first.");
process::exit(1);
});
let model_config = if session_config.resume let model_config = if session_config.resume
&& saved_model_config && saved_model_config
@@ -403,7 +409,10 @@ async fn resolve_session_id(
goose_mode: GooseMode, goose_mode: GooseMode,
) -> String { ) -> String {
if session_config.no_session { if session_config.no_session {
let working_dir = std::env::current_dir().expect("Could not get working directory"); let working_dir = std::env::current_dir().unwrap_or_else(|e| {
output::render_error(&format!("Could not get working directory: {}", e));
process::exit(1);
});
let session = session_manager let session = session_manager
.create_session( .create_session(
working_dir, working_dir,
@@ -412,7 +421,10 @@ async fn resolve_session_id(
goose_mode, goose_mode,
) )
.await .await
.expect("Could not create session"); .unwrap_or_else(|e| {
output::render_error(&format!("Could not create session: {}", e));
process::exit(1);
});
session.id session.id
} else if session_config.resume { } else if session_config.resume {
if let Some(ref session_id) = session_config.session_id { if let Some(ref session_id) = session_config.session_id {
@@ -451,7 +463,10 @@ async fn handle_resumed_session_workdir(agent: &Agent, session_id: &str, interac
process::exit(1); process::exit(1);
}); });
let current_workdir = std::env::current_dir().expect("Failed to get current working directory"); let current_workdir = std::env::current_dir().unwrap_or_else(|e| {
output::render_error(&format!("Failed to get current working directory: {}", e));
process::exit(1);
});
if current_workdir == session.working_dir { if current_workdir == session.working_dir {
return; return;
} }
@@ -467,7 +482,10 @@ async fn handle_resumed_session_workdir(agent: &Agent, session_id: &str, interac
)) ))
.initial_value(true) .initial_value(true)
.interact() .interact()
.expect("Failed to get user input"); .unwrap_or_else(|e| {
output::render_error(&format!("Failed to get user input: {}", e));
process::exit(1);
});
if change_workdir { if change_workdir {
if !session.working_dir.exists() { if !session.working_dir.exists() {
@@ -572,8 +590,13 @@ async fn configure_session_prompts(
let system_prompt_file: Option<String> = config.get_param("GOOSE_SYSTEM_PROMPT_FILE_PATH").ok(); let system_prompt_file: Option<String> = config.get_param("GOOSE_SYSTEM_PROMPT_FILE_PATH").ok();
if let Some(ref path) = system_prompt_file { if let Some(ref path) = system_prompt_file {
let override_prompt = let override_prompt = std::fs::read_to_string(path).unwrap_or_else(|e| {
std::fs::read_to_string(path).expect("Failed to read system prompt file"); output::render_error(&format!(
"Failed to read system prompt file '{}': {}",
path, e
));
process::exit(1);
});
session.agent.override_system_prompt(override_prompt).await; session.agent.override_system_prompt(override_prompt).await;
} }
} }