fix: update meta service to use new plugin configuration approach

Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) <aider@aider.chat>
This commit is contained in:
Andrew Phillips
2025-08-27 10:48:48 -03:00
parent 5c2b56c06a
commit 7bc6dd89a1

View File

@@ -26,44 +26,68 @@ impl MetaService {
debug!("META_SERVICE: Meta plugin types: {:?}", meta_plugin_types);
let mut meta_plugins: Vec<Box<dyn MetaPlugin>> = meta_plugin_types
// Create plugins with their configuration
let meta_plugins: Vec<Box<dyn MetaPlugin>> = meta_plugin_types
.iter()
.map(|meta_plugin_type| {
debug!("META_SERVICE: Creating plugin: {:?}", meta_plugin_type);
get_meta_plugin(meta_plugin_type.clone())
// Get the plugin name to find its configuration
let plugin_name = match meta_plugin_type {
MetaPluginType::FileMagic => "file_magic",
MetaPluginType::FileMime => "file_mime",
MetaPluginType::FileEncoding => "file_encoding",
MetaPluginType::MagicFile => "magic_file",
MetaPluginType::LineCount => "line_count",
MetaPluginType::WordCount => "word_count",
MetaPluginType::Cwd => "cwd",
MetaPluginType::Binary => "binary",
MetaPluginType::Text => "text",
MetaPluginType::User => "user",
MetaPluginType::Shell => "shell",
MetaPluginType::ShellPid => "shell_pid",
MetaPluginType::KeepPid => "keep_pid",
MetaPluginType::Digest => "digest",
MetaPluginType::ReadTime => "read_time",
MetaPluginType::ReadRate => "read_rate",
MetaPluginType::Hostname => "hostname",
};
// Get options and outputs from settings
let (options, outputs) = if let Some(meta_plugin_configs) = &settings.meta_plugins {
if let Some(config) = meta_plugin_configs.iter().find(|c| c.name == plugin_name) {
// Convert options and outputs to the appropriate types
let options: std::collections::HashMap<String, serde_yaml::Value> = config
.options
.iter()
.map(|(k, v)| (k.clone(), serde_yaml::Value::String(v.clone())))
.collect();
let outputs: std::collections::HashMap<String, serde_yaml::Value> = config
.outputs
.iter()
.map(|(k, v)| (k.clone(), serde_yaml::Value::String(v.clone())))
.collect();
(Some(options), Some(outputs))
} else {
(None, None)
}
} else {
(None, None)
};
get_meta_plugin_with_config(meta_plugin_type.clone(), options, outputs)
})
.collect();
if let Some(meta_plugin_configs) = &settings.meta_plugins {
for meta_plugin in meta_plugins.iter_mut() {
let plugin_name = meta_plugin.meta_name();
if let Some(config) = meta_plugin_configs.iter().find(|c| c.name == plugin_name) {
let mut configured_outputs = meta_plugin.outputs().clone();
for (key, value) in &config.outputs {
configured_outputs.insert(key.clone(), serde_yaml::Value::String(value.clone()));
}
let mut configured_options = meta_plugin.default_options();
for (key, value) in &config.options {
configured_options.insert(key.clone(), value.clone());
}
if let Err(e) = meta_plugin.configure_outputs(&configured_outputs) {
log::warn!("META_SERVICE: Failed to configure outputs for meta plugin '{}': {}", plugin_name, e);
}
if let Err(e) = meta_plugin.configure_options(&configured_options) {
log::warn!(
"META_SERVICE: Failed to configure options for meta plugin '{}': {}",
plugin_name, e
);
}
}
}
}
// Filter out unsupported plugins
let original_len = meta_plugins.len();
meta_plugins.retain(|meta_plugin| meta_plugin.is_supported());
let meta_plugins: Vec<Box<dyn MetaPlugin>> = meta_plugins
.into_iter()
.filter(|meta_plugin| meta_plugin.is_supported())
.collect();
if meta_plugins.len() < original_len {
log::warn!("META_SERVICE: Some meta plugins are enabled but not supported on this system");
}