use ai_agent::{
Agent, CommandRegistry, PluginMcpServerManager, load_plugin, load_plugins_from_dir,
};
#[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 agent = Agent::new(&model).max_turns(10);
println!("Using model: {}\n", model);
let result = agent
.query("Say 'hello from plugin example' in one sentence.")
.await?;
println!("Agent response: {}", result.text);
println!("\n--- done ---");
Ok(())
}