From 2cc36b39508ae9e13b77575b644d400f9f179eb1 Mon Sep 17 00:00:00 2001 From: Jason Date: Fri, 16 Jan 2026 21:23:54 +0800 Subject: [PATCH] fix(opencode): add OpenCode support to skills functionality Add missing OpenCode branch in parse_app_type() and include OpenCode in all app iteration loops for skills operations (uninstall, scan, import, migrate). --- src-tauri/src/commands/skill.rs | 1 + src-tauri/src/services/skill.rs | 9 +++++---- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src-tauri/src/commands/skill.rs b/src-tauri/src/commands/skill.rs index 9e3eb6076..ca6bcc38f 100644 --- a/src-tauri/src/commands/skill.rs +++ b/src-tauri/src/commands/skill.rs @@ -20,6 +20,7 @@ fn parse_app_type(app: &str) -> Result { "claude" => Ok(AppType::Claude), "codex" => Ok(AppType::Codex), "gemini" => Ok(AppType::Gemini), + "opencode" => Ok(AppType::OpenCode), _ => Err(format!("不支持的 app 类型: {app}")), } } diff --git a/src-tauri/src/services/skill.rs b/src-tauri/src/services/skill.rs index 8ea844db2..bb215183a 100644 --- a/src-tauri/src/services/skill.rs +++ b/src-tauri/src/services/skill.rs @@ -323,7 +323,7 @@ impl SkillService { .ok_or_else(|| anyhow!("Skill not found: {id}"))?; // 从所有应用目录删除 - for app in [AppType::Claude, AppType::Codex, AppType::Gemini] { + for app in [AppType::Claude, AppType::Codex, AppType::Gemini, AppType::OpenCode] { let _ = Self::remove_from_app(&skill.directory, &app); } @@ -382,7 +382,7 @@ impl SkillService { let mut unmanaged: HashMap = HashMap::new(); - for app in [AppType::Claude, AppType::Codex, AppType::Gemini] { + for app in [AppType::Claude, AppType::Codex, AppType::Gemini, AppType::OpenCode] { let app_dir = match Self::get_app_skills_dir(&app) { Ok(d) => d, Err(_) => continue, @@ -464,7 +464,7 @@ impl SkillService { let mut source_path: Option = None; let mut found_in: Vec = Vec::new(); - for app in [AppType::Claude, AppType::Codex, AppType::Gemini] { + for app in [AppType::Claude, AppType::Codex, AppType::Gemini, AppType::OpenCode] { if let Ok(app_dir) = Self::get_app_skills_dir(&app) { let skill_path = app_dir.join(&dir_name); if skill_path.exists() { @@ -514,6 +514,7 @@ impl SkillService { "claude" => apps.claude = true, "codex" => apps.codex = true, "gemini" => apps.gemini = true, + "opencode" => apps.opencode = true, _ => {} } } @@ -984,7 +985,7 @@ pub fn migrate_skills_to_ssot(db: &Arc) -> Result { let mut discovered: HashMap = HashMap::new(); // 扫描各应用目录 - for app in [AppType::Claude, AppType::Codex, AppType::Gemini] { + for app in [AppType::Claude, AppType::Codex, AppType::Gemini, AppType::OpenCode] { let app_dir = match SkillService::get_app_skills_dir(&app) { Ok(d) => d, Err(_) => continue,