From 6a2a5ad67f76a7ef1995ec83bfb8040e7966c4dd Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Wed, 27 Aug 2025 22:48:57 -0300 Subject: [PATCH] feat: use actual default options and outputs from meta plugins Co-authored-by: aider (openai/andrew/openrouter/deepseek/deepseek-chat-v3.1) --- src/modes/generate_config.rs | 52 ++++++++++++++++++++++++++++-------- 1 file changed, 41 insertions(+), 11 deletions(-) diff --git a/src/modes/generate_config.rs b/src/modes/generate_config.rs index faf2274..f06e0f5 100644 --- a/src/modes/generate_config.rs +++ b/src/modes/generate_config.rs @@ -59,7 +59,21 @@ struct MetaPluginConfig { } pub fn mode_generate_config(_cmd: &mut Command, _settings: &crate::config::Settings) -> Result<()> { - // Create a default configuration with empty options and outputs for meta plugins + // Create instances of each meta plugin to get their default options and outputs + let mut text_plugin = crate::meta_plugin::text::TextMetaPlugin::new(None, None); + let mut cwd_plugin = crate::meta_plugin::cwd::CwdMetaPlugin::new(None, None); + let mut digest_plugin = crate::meta_plugin::digest::DigestMetaPlugin::new(None, None); + let mut hostname_plugin = crate::meta_plugin::hostname::HostnameMetaPlugin::new(None, None); + let mut magic_file_plugin = crate::meta_plugin::magic::MagicFileMetaPlugin::new(None, None); + + // Initialize plugins to set up their default options and outputs + text_plugin.initialize(); + cwd_plugin.initialize(); + digest_plugin.initialize(); + hostname_plugin.initialize(); + magic_file_plugin.initialize(); + + // Create a default configuration let default_config = DefaultConfig { dir: Some("~/.local/share/keep".to_string()), list_format: vec![ @@ -115,28 +129,28 @@ pub fn mode_generate_config(_cmd: &mut Command, _settings: &crate::config::Setti meta_plugins: Some(vec![ MetaPluginConfig { name: "text".to_string(), - options: std::collections::HashMap::new(), - outputs: std::collections::HashMap::new(), + options: text_plugin.options().clone(), + outputs: convert_outputs_to_string_map(text_plugin.outputs()), }, MetaPluginConfig { name: "cwd".to_string(), - options: std::collections::HashMap::new(), - outputs: std::collections::HashMap::new(), + options: cwd_plugin.options().clone(), + outputs: convert_outputs_to_string_map(cwd_plugin.outputs()), }, MetaPluginConfig { name: "digest".to_string(), - options: std::collections::HashMap::new(), - outputs: std::collections::HashMap::new(), + options: digest_plugin.options().clone(), + outputs: convert_outputs_to_string_map(digest_plugin.outputs()), }, MetaPluginConfig { name: "hostname".to_string(), - options: std::collections::HashMap::new(), - outputs: std::collections::HashMap::new(), + options: hostname_plugin.options().clone(), + outputs: convert_outputs_to_string_map(hostname_plugin.outputs()), }, MetaPluginConfig { name: "magic_file".to_string(), - options: std::collections::HashMap::new(), - outputs: std::collections::HashMap::new(), + options: magic_file_plugin.options().clone(), + outputs: convert_outputs_to_string_map(magic_file_plugin.outputs()), }, ]), }; @@ -147,3 +161,19 @@ pub fn mode_generate_config(_cmd: &mut Command, _settings: &crate::config::Setti Ok(()) } + +// Helper function to convert outputs from serde_yaml::Value to String +fn convert_outputs_to_string_map( + outputs: &std::collections::HashMap, +) -> std::collections::HashMap { + let mut result = std::collections::HashMap::new(); + for (key, value) in outputs { + if let Some(str_value) = value.as_str() { + result.insert(key.clone(), str_value.to_string()); + } else { + // Convert non-string values to their YAML string representation + result.insert(key.clone(), serde_yaml::to_string(value).unwrap_or_default()); + } + } + result +}