Skip to content
Merged
Show file tree
Hide file tree
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
17 changes: 14 additions & 3 deletions crates/goose-cli/src/commands/configure.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use cliclack::spinner;
use console::style;
use goose::agents::{extension::Envs, ExtensionConfig};
use goose::config::extensions::name_to_key;
use goose::config::{Config, ConfigError, ExperimentManager, ExtensionEntry, ExtensionManager};
use goose::message::Message;
use goose::providers::{create, providers};
Expand Down Expand Up @@ -379,7 +380,10 @@ pub fn toggle_extensions_dialog() -> Result<(), Box<dyn Error>> {

// Update enabled status for each extension
for name in extension_status.iter().map(|(name, _)| name) {
ExtensionManager::set_enabled(name, selected.iter().any(|s| s.as_str() == name))?;
ExtensionManager::set_enabled(
&name_to_key(name),
selected.iter().any(|s| s.as_str() == name),
)?;
}

cliclack::outro("Extension settings updated successfully")?;
Expand Down Expand Up @@ -630,10 +634,17 @@ pub fn remove_extension_dialog() -> Result<(), Box<dyn Error>> {
return Ok(());
}

// Filter out only disabled extensions
let disabled_extensions: Vec<_> = extensions
.iter()
.filter(|entry| !entry.enabled)
.map(|entry| (entry.config.name().to_string(), entry.enabled))
.collect();

let selected = cliclack::multiselect("Select extensions to remove (note: you can only remove disabled extensions - use \"space\" to toggle and \"enter\" to submit)")
.required(false)
.items(
&extension_status
&disabled_extensions
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it looks like we are applying a similar filter twice below, should the existing iter/filter/map be removed or consolidated ?

.iter()
.filter(|(_, enabled)| !enabled)
.map(|(name, _)| (name, name.as_str(), ""))
Expand All @@ -642,7 +653,7 @@ pub fn remove_extension_dialog() -> Result<(), Box<dyn Error>> {
.interact()?;

for name in selected {
ExtensionManager::remove(name)?;
ExtensionManager::remove(&name_to_key(name))?;
cliclack::outro(format!("Removed {} extension", style(name).green()))?;
}

Expand Down
13 changes: 11 additions & 2 deletions crates/goose-server/src/openapi.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
use utoipa::OpenApi;

use goose::agents::extension::Envs;
use goose::agents::ExtensionConfig;
use goose::config::ExtensionEntry;
use goose::providers::base::ConfigKey;
use goose::providers::base::ProviderMetadata;

Expand All @@ -12,20 +15,26 @@ use goose::providers::base::ProviderMetadata;
super::routes::config_management::read_config,
super::routes::config_management::add_extension,
super::routes::config_management::remove_extension,
super::routes::config_management::toggle_extension,
super::routes::config_management::get_extensions,
super::routes::config_management::update_extension,
super::routes::config_management::read_all_config,
super::routes::config_management::providers
),
components(schemas(
super::routes::config_management::UpsertConfigQuery,
super::routes::config_management::ConfigKeyQuery,
super::routes::config_management::ExtensionQuery,
super::routes::config_management::ConfigResponse,
super::routes::config_management::ProvidersResponse,
super::routes::config_management::ProvidersResponse,
super::routes::config_management::ProviderDetails,
super::routes::config_management::ExtensionResponse,
super::routes::config_management::ExtensionQuery,
ProviderMetadata,
ConfigKey
ExtensionEntry,
ExtensionConfig,
ConfigKey,
Envs,
))
)]
pub struct ApiDoc;
Expand Down
Loading
Loading