(id: &str, enabled: bool)
| 386 | // --------------------------------------------------------------------------- |
| 387 | |
| 388 | pub async fn toggle_plugin(id: &str, enabled: bool) -> Result<InstalledPlugin, String> { |
| 389 | let mut plugins = get_plugins().await; |
| 390 | let plugin = plugins.iter_mut().find(|p| p.id == id) |
| 391 | .ok_or_else(|| format!("Plugin '{}' not found", id))?; |
| 392 | plugin.enabled = enabled; |
| 393 | |
| 394 | // Toggle skills |
| 395 | let source_tag = format!("plugin:{}", id); |
| 396 | let mut skills = get_skills().await; |
| 397 | for skill in &mut skills { |
| 398 | if skill.source == source_tag { |
| 399 | skill.enabled = enabled; |
| 400 | } |
| 401 | } |
| 402 | save_skills(&skills).await; |
| 403 | |
| 404 | // Toggle MCP tools |
| 405 | let mut settings = get_settings().await; |
| 406 | for mcp_name in &plugin.mcp_names { |
| 407 | if let Some(mcp) = settings.mcp_tools.iter_mut().find(|m| m.name == *mcp_name) { |
| 408 | mcp.enabled = enabled; |
| 409 | } |
| 410 | } |
| 411 | save_settings(&settings).await; |
| 412 | |
| 413 | let result = plugin.clone(); |
| 414 | save_plugins(&plugins).await; |
| 415 | Ok(result) |
| 416 | } |
| 417 | |
| 418 | // --------------------------------------------------------------------------- |
| 419 | // Query |
no test coverage detected