diff --git a/crates/goose-cli/src/session/builder.rs b/crates/goose-cli/src/session/builder.rs index 75f6651a4f1d..7c0d6aebcbd5 100644 --- a/crates/goose-cli/src/session/builder.rs +++ b/crates/goose-cli/src/session/builder.rs @@ -202,10 +202,16 @@ async fn offer_extension_debugging_help( Ok(()) } -fn check_missing_extensions_or_exit(saved_extensions: &[ExtensionConfig], interactive: bool) { +fn check_missing_extensions_or_exit( + saved_extensions: &[ExtensionConfig], + cli_builtin_names: &HashSet, + interactive: bool, +) { let missing: Vec<_> = saved_extensions .iter() - .filter(|ext| get_extension_by_name(&ext.name()).is_none()) + .filter(|ext| { + !cli_builtin_names.contains(&ext.name()) && get_extension_by_name(&ext.name()).is_none() + }) .cloned() .collect(); @@ -447,6 +453,9 @@ pub async fn build_session(session_config: SessionBuilderConfig) -> CliSession { eprintln!("{}", style(format!("Warning: {}", warning)).yellow()); } + // Collect CLI-provided builtin names to avoid false "missing" warnings on resume + let cli_builtin_names: HashSet = session_config.builtins.iter().cloned().collect(); + // If we get extensions_override, only run those extensions and none other let extensions_to_run: Vec<_> = if let Some(extensions) = session_config.extensions_override { extensions.into_iter().collect() @@ -458,6 +467,7 @@ pub async fn build_session(session_config: SessionBuilderConfig) -> CliSession { { check_missing_extensions_or_exit( &saved_state.extensions, + &cli_builtin_names, session_config.interactive, ); saved_state.extensions