fix: replace panics with user-friendly errors in CLI session builder (#7901)
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user