use ai_agent_sdk::{Agent, load_plugin, load_plugins_from_dir, CommandRegistry, PluginMcpServerManager};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("--- Example 18: Plugin System ---\n");
let plugin_path = std::path::Path::new("examples/plugins/hello-plugin");
match load_plugin(plugin_path).await {
Ok(plugin) => {
println!("Loaded plugin: {} v{}",
plugin.manifest.name,
plugin.manifest.version.unwrap_or_else(|| "unknown".to_string()));
println!(" Commands: {:?}", plugin.manifest.commands);
println!(" Skills: {:?}", plugin.manifest.skills);
}
Err(e) => {
println!("No plugin found at {}, skipping...", plugin_path.display());
println!(" Error: {:?}", e);
}
}
println!("\n--- Loading plugins from directory ---");
let plugins_dir = std::path::Path::new("examples/plugins");
let plugins = load_plugins_from_dir(plugins_dir).await;
println!("Loaded {} plugin(s)", plugins.len());
for plugin in &plugins {
let cmd_count = plugin.manifest.commands
.as_ref()
.and_then(|c| c.as_array())
.map(|a| a.len())
.unwrap_or(0);
let skill_count = plugin.manifest.skills
.as_ref()
.and_then(|s| s.as_array())
.map(|a| a.len())
.unwrap_or(0);
println!(" - {}: {} commands, {} skills",
plugin.manifest.name,
cmd_count,
skill_count);
}
println!("\n--- Command Registry ---");
let registry = CommandRegistry::new();
println!("Created command registry");
let all_commands = registry.all_commands();
println!("Total commands registered: {}", all_commands.len());
println!("\n--- MCP Server Manager ---");
let mcp_manager = PluginMcpServerManager::new();
println!("Created MCP server manager");
let servers = mcp_manager.list_servers().await;
println!("Total MCP servers: {}", servers.len());
println!("\n--- Creating Agent ---");
let model = std::env::var("AI_MODEL").unwrap_or_else(|_| "MiniMaxAI/MiniMax-M2.5".to_string());
let mut agent = Agent::new(&model, 10);
println!("Using model: {}\n", model);
let result = agent.prompt("Say 'hello from plugin example' in one sentence.").await?;
println!("Agent response: {}", result.text);
println!("\n--- done ---");
Ok(())
}