From afb3d789ba689ddd6679ec13c9be7131bd60101f Mon Sep 17 00:00:00 2001 From: Andrew Phillips Date: Tue, 19 Aug 2025 13:23:51 -0300 Subject: [PATCH] feat: add default outputs display for meta plugins Co-authored-by: aider (openai/andrew/openrouter/anthropic/claude-sonnet-4) --- src/common/status.rs | 14 +++++++++++++- src/meta_plugin.rs | 6 ++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/common/status.rs b/src/common/status.rs index 391a3a4..834e355 100644 --- a/src/common/status.rs +++ b/src/common/status.rs @@ -105,6 +105,12 @@ pub fn generate_status_info( let is_supported = meta_plugin.is_supported(); let is_enabled = enabled_meta_plugins.contains(&meta_plugin_type); + // Initialize the plugin to populate any default outputs + // We use a dummy item_id since we're just showing the plugin structure + if let Ok(_) = meta_plugin.initialize(&rusqlite::Connection::open_in_memory().unwrap(), 0) { + // Plugin initialized successfully + } + let (binary_display, args_display) = if !is_supported { ("".to_string(), "".to_string()) } else { @@ -119,13 +125,19 @@ pub fn generate_status_info( } }; + // Create a display of default outputs for status + let mut default_outputs = std::collections::HashMap::new(); + for output_name in meta_plugin.default_outputs() { + default_outputs.insert(output_name, serde_yaml::Value::String("default".to_string())); + } + meta_plugin_info.push(MetaPluginInfo { meta_name: meta_plugin.meta_name(), found: is_supported, enabled: is_enabled, binary: binary_display, args: args_display, - outputs: meta_plugin.outputs().clone(), + outputs: if default_outputs.is_empty() { meta_plugin.outputs().clone() } else { default_outputs }, }); } diff --git a/src/meta_plugin.rs b/src/meta_plugin.rs index 8b2e2fb..9119b1c 100644 --- a/src/meta_plugin.rs +++ b/src/meta_plugin.rs @@ -104,6 +104,12 @@ pub trait MetaPlugin { fn outputs(&self) -> &std::collections::HashMap; fn outputs_mut(&mut self) -> &mut std::collections::HashMap; + // Get the default output names this plugin can produce + fn default_outputs(&self) -> Vec { + // Default implementation returns empty - plugins should override this + Vec::new() + } + // Save metadata to database using central output handler fn save_meta(&mut self, conn: &Connection, item_id: i64, internal_name: &str, value: String) -> Result<()> { output_metadata(conn, item_id, internal_name, value, self.outputs())