feat: CLI flag to skip loading profile extensions (#6780)
This commit is contained in:
@@ -174,6 +174,12 @@ pub struct ExtensionOptions {
|
|||||||
value_delimiter = ','
|
value_delimiter = ','
|
||||||
)]
|
)]
|
||||||
pub builtins: Vec<String>,
|
pub builtins: Vec<String>,
|
||||||
|
|
||||||
|
#[arg(
|
||||||
|
long = "no-profile",
|
||||||
|
help = "Don't load your default extensions, only use CLI-specified extensions"
|
||||||
|
)]
|
||||||
|
pub no_profile: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Input source and recipe options for the run command
|
/// Input source and recipe options for the run command
|
||||||
@@ -1156,6 +1162,7 @@ async fn handle_interactive_session(
|
|||||||
extensions: extension_opts.extensions,
|
extensions: extension_opts.extensions,
|
||||||
streamable_http_extensions: extension_opts.streamable_http_extensions,
|
streamable_http_extensions: extension_opts.streamable_http_extensions,
|
||||||
builtins: extension_opts.builtins,
|
builtins: extension_opts.builtins,
|
||||||
|
no_profile: extension_opts.no_profile,
|
||||||
recipe: None,
|
recipe: None,
|
||||||
additional_system_prompt: None,
|
additional_system_prompt: None,
|
||||||
provider: None,
|
provider: None,
|
||||||
@@ -1360,6 +1367,7 @@ async fn handle_run_command(
|
|||||||
extensions: extension_opts.extensions,
|
extensions: extension_opts.extensions,
|
||||||
streamable_http_extensions: extension_opts.streamable_http_extensions,
|
streamable_http_extensions: extension_opts.streamable_http_extensions,
|
||||||
builtins: extension_opts.builtins,
|
builtins: extension_opts.builtins,
|
||||||
|
no_profile: extension_opts.no_profile,
|
||||||
recipe: recipe.clone(),
|
recipe: recipe.clone(),
|
||||||
additional_system_prompt: input_config.additional_system_prompt,
|
additional_system_prompt: input_config.additional_system_prompt,
|
||||||
provider: model_opts.provider,
|
provider: model_opts.provider,
|
||||||
@@ -1486,6 +1494,7 @@ async fn handle_default_session() -> Result<()> {
|
|||||||
extensions: Vec::new(),
|
extensions: Vec::new(),
|
||||||
streamable_http_extensions: Vec::new(),
|
streamable_http_extensions: Vec::new(),
|
||||||
builtins: Vec::new(),
|
builtins: Vec::new(),
|
||||||
|
no_profile: false,
|
||||||
recipe: None,
|
recipe: None,
|
||||||
additional_system_prompt: None,
|
additional_system_prompt: None,
|
||||||
provider: None,
|
provider: None,
|
||||||
|
|||||||
@@ -51,6 +51,7 @@ pub async fn agent_generator(
|
|||||||
extensions: requirements.external,
|
extensions: requirements.external,
|
||||||
streamable_http_extensions,
|
streamable_http_extensions,
|
||||||
builtins: requirements.builtin,
|
builtins: requirements.builtin,
|
||||||
|
no_profile: true,
|
||||||
recipe: None,
|
recipe: None,
|
||||||
additional_system_prompt: None,
|
additional_system_prompt: None,
|
||||||
provider: None,
|
provider: None,
|
||||||
|
|||||||
@@ -92,6 +92,7 @@ pub struct SessionBuilderConfig {
|
|||||||
pub streamable_http_extensions: Vec<StreamableHttpOptions>,
|
pub streamable_http_extensions: Vec<StreamableHttpOptions>,
|
||||||
/// List of builtin extension commands to add
|
/// List of builtin extension commands to add
|
||||||
pub builtins: Vec<String>,
|
pub builtins: Vec<String>,
|
||||||
|
pub no_profile: bool,
|
||||||
/// Recipe for the session
|
/// Recipe for the session
|
||||||
pub recipe: Option<Recipe>,
|
pub recipe: Option<Recipe>,
|
||||||
/// Any additional system prompt to append to the default
|
/// Any additional system prompt to append to the default
|
||||||
@@ -130,6 +131,7 @@ impl Default for SessionBuilderConfig {
|
|||||||
extensions: Vec::new(),
|
extensions: Vec::new(),
|
||||||
streamable_http_extensions: Vec::new(),
|
streamable_http_extensions: Vec::new(),
|
||||||
builtins: Vec::new(),
|
builtins: Vec::new(),
|
||||||
|
no_profile: false,
|
||||||
recipe: None,
|
recipe: None,
|
||||||
additional_system_prompt: None,
|
additional_system_prompt: None,
|
||||||
provider: None,
|
provider: None,
|
||||||
@@ -529,6 +531,8 @@ pub async fn build_session(session_config: SessionBuilderConfig) -> CliSession {
|
|||||||
.and_then(|s| EnabledExtensionsState::from_extension_data(&s.extension_data))
|
.and_then(|s| EnabledExtensionsState::from_extension_data(&s.extension_data))
|
||||||
.map(|state| state.extensions)
|
.map(|state| state.extensions)
|
||||||
.unwrap_or_else(get_enabled_extensions)
|
.unwrap_or_else(get_enabled_extensions)
|
||||||
|
} else if session_config.no_profile {
|
||||||
|
Vec::new()
|
||||||
} else {
|
} else {
|
||||||
resolve_extensions_for_new_session(recipe.and_then(|r| r.extensions.as_deref()), None)
|
resolve_extensions_for_new_session(recipe.and_then(|r| r.extensions.as_deref()), None)
|
||||||
};
|
};
|
||||||
@@ -636,6 +640,7 @@ mod tests {
|
|||||||
timeout: goose::config::DEFAULT_EXTENSION_TIMEOUT,
|
timeout: goose::config::DEFAULT_EXTENSION_TIMEOUT,
|
||||||
}],
|
}],
|
||||||
builtins: vec!["developer".to_string()],
|
builtins: vec!["developer".to_string()],
|
||||||
|
no_profile: false,
|
||||||
recipe: None,
|
recipe: None,
|
||||||
additional_system_prompt: Some("Test prompt".to_string()),
|
additional_system_prompt: Some("Test prompt".to_string()),
|
||||||
provider: None,
|
provider: None,
|
||||||
@@ -671,6 +676,7 @@ mod tests {
|
|||||||
assert!(config.extensions.is_empty());
|
assert!(config.extensions.is_empty());
|
||||||
assert!(config.streamable_http_extensions.is_empty());
|
assert!(config.streamable_http_extensions.is_empty());
|
||||||
assert!(config.builtins.is_empty());
|
assert!(config.builtins.is_empty());
|
||||||
|
assert!(!config.no_profile);
|
||||||
assert!(config.recipe.is_none());
|
assert!(config.recipe.is_none());
|
||||||
assert!(config.additional_system_prompt.is_none());
|
assert!(config.additional_system_prompt.is_none());
|
||||||
assert!(!config.debug);
|
assert!(!config.debug);
|
||||||
|
|||||||
Reference in New Issue
Block a user