Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 31 additions & 8 deletions crates/goose-cli/src/session/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -359,15 +359,21 @@ fn resolve_provider_and_model(
.or(saved_provider)
.or_else(|| recipe_settings.and_then(|s| s.goose_provider.clone()))
.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
.model
.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(|| 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
&& saved_model_config
Expand Down Expand Up @@ -402,11 +408,17 @@ async fn resolve_session_id(
session_manager: &goose::session::session_manager::SessionManager,
) -> String {
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
.create_session(working_dir, "CLI Session".to_string(), SessionType::Hidden)
.await
.expect("Could not create session");
.unwrap_or_else(|e| {
output::render_error(&format!("Could not create session: {}", e));
process::exit(1);
});
session.id
} else if session_config.resume {
if let Some(ref session_id) = session_config.session_id {
Expand Down Expand Up @@ -445,7 +457,10 @@ async fn handle_resumed_session_workdir(agent: &Agent, session_id: &str, interac
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 {
return;
}
Expand All @@ -461,7 +476,10 @@ async fn handle_resumed_session_workdir(agent: &Agent, session_id: &str, interac
))
.initial_value(true)
.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 !session.working_dir.exists() {
Expand Down Expand Up @@ -566,8 +584,13 @@ async fn configure_session_prompts(

let system_prompt_file: Option<String> = config.get_param("GOOSE_SYSTEM_PROMPT_FILE_PATH").ok();
if let Some(ref path) = system_prompt_file {
let override_prompt =
std::fs::read_to_string(path).expect("Failed to read system prompt file");
let override_prompt = std::fs::read_to_string(path).unwrap_or_else(|e| {
output::render_error(&format!(
"Failed to read system prompt file '{}': {}",
path, e
));
process::exit(1);
});
session.agent.override_system_prompt(override_prompt).await;
}
}
Expand Down
Loading