commands to acp+ migration: extensions management (#8733)
This commit is contained in:
@@ -2870,7 +2870,17 @@ impl GooseAcpAgent {
|
||||
let warnings = crate::config::extensions::get_warnings();
|
||||
let extensions_json = extensions
|
||||
.into_iter()
|
||||
.map(|e| serde_json::to_value(&e))
|
||||
.map(|e| {
|
||||
let config_key = e.config.key();
|
||||
let mut value = serde_json::to_value(&e)?;
|
||||
if let Some(obj) = value.as_object_mut() {
|
||||
obj.insert(
|
||||
"config_key".to_string(),
|
||||
serde_json::Value::String(config_key),
|
||||
);
|
||||
}
|
||||
Ok::<_, serde_json::Error>(value)
|
||||
})
|
||||
.collect::<Result<Vec<_>, _>>()
|
||||
.map_err(|e| sacp::Error::internal_error().data(e.to_string()))?;
|
||||
Ok(GetExtensionsResponse {
|
||||
@@ -2879,6 +2889,63 @@ impl GooseAcpAgent {
|
||||
})
|
||||
}
|
||||
|
||||
#[custom_method(AddConfigExtensionRequest)]
|
||||
async fn on_add_config_extension(
|
||||
&self,
|
||||
req: AddConfigExtensionRequest,
|
||||
) -> Result<EmptyResponse, sacp::Error> {
|
||||
let mut obj = match req.extension_config {
|
||||
serde_json::Value::Object(obj) => obj,
|
||||
_ => {
|
||||
return Err(
|
||||
sacp::Error::invalid_params().data("extensionConfig must be a JSON object")
|
||||
);
|
||||
}
|
||||
};
|
||||
obj.insert(
|
||||
"name".to_string(),
|
||||
serde_json::Value::String(req.name.clone()),
|
||||
);
|
||||
|
||||
let config: crate::agents::ExtensionConfig =
|
||||
serde_json::from_value(serde_json::Value::Object(obj))
|
||||
.map_err(|e| sacp::Error::invalid_params().data(format!("bad config: {e}")))?;
|
||||
|
||||
crate::config::extensions::set_extension(crate::config::extensions::ExtensionEntry {
|
||||
enabled: req.enabled,
|
||||
config,
|
||||
});
|
||||
Ok(EmptyResponse {})
|
||||
}
|
||||
|
||||
#[custom_method(RemoveConfigExtensionRequest)]
|
||||
async fn on_remove_config_extension(
|
||||
&self,
|
||||
req: RemoveConfigExtensionRequest,
|
||||
) -> Result<EmptyResponse, sacp::Error> {
|
||||
let keys = crate::config::extensions::get_all_extension_names();
|
||||
if !keys.iter().any(|k| k == &req.config_key) {
|
||||
return Err(sacp::Error::invalid_params()
|
||||
.data(format!("Extension '{}' not found", req.config_key)));
|
||||
}
|
||||
crate::config::extensions::remove_extension(&req.config_key);
|
||||
Ok(EmptyResponse {})
|
||||
}
|
||||
|
||||
#[custom_method(ToggleConfigExtensionRequest)]
|
||||
async fn on_toggle_config_extension(
|
||||
&self,
|
||||
req: ToggleConfigExtensionRequest,
|
||||
) -> Result<EmptyResponse, sacp::Error> {
|
||||
let keys = crate::config::extensions::get_all_extension_names();
|
||||
if !keys.iter().any(|k| k == &req.config_key) {
|
||||
return Err(sacp::Error::invalid_params()
|
||||
.data(format!("Extension '{}' not found", req.config_key)));
|
||||
}
|
||||
crate::config::extensions::set_extension_enabled(&req.config_key, req.enabled);
|
||||
Ok(EmptyResponse {})
|
||||
}
|
||||
|
||||
#[custom_method(GetSessionExtensionsRequest)]
|
||||
async fn on_get_session_extensions(
|
||||
&self,
|
||||
|
||||
Reference in New Issue
Block a user