use serde::{Deserialize, Serialize};
fn default_config_table() -> toml::Value {
toml::Value::Table(toml::map::Map::new())
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PluginManifest {
pub plugin: PluginMeta,
#[serde(default)]
pub skills: Vec<SkillEntry>,
#[serde(default)]
pub mcp: McpSection,
#[serde(default = "default_config_table")]
pub config: toml::Value,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PluginMeta {
pub name: String,
pub version: String,
#[serde(default)]
pub description: String,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct SkillEntry {
pub path: String,
}
#[derive(Debug, Clone, Default, Deserialize, Serialize)]
pub struct McpSection {
#[serde(default)]
pub servers: Vec<PluginMcpServer>,
}
#[derive(Debug, Clone, Deserialize, Serialize)]
pub struct PluginMcpServer {
pub id: String,
#[serde(default)]
pub command: Option<String>,
#[serde(default)]
pub args: Vec<String>,
}