feat(skills): add baoyu-skills preset repo and auto-supplement missing defaults

- Add JimLiu/baoyu-skills to default skill repositories
- Change init_default_skill_repos() from "first-run only" to "supplement missing"
- New preset repos will now auto-appear for existing users on upgrade
This commit is contained in:
Jason
2026-01-21 16:20:28 +08:00
parent dc865fbbbf
commit 2d17bde790
2 changed files with 22 additions and 8 deletions

View File

@@ -203,24 +203,32 @@ impl Database {
Ok(()) Ok(())
} }
/// 初始化默认的 Skill 仓库(首次启动时调用) /// 初始化默认的 Skill 仓库(启动时调用,补充缺失的默认仓库
pub fn init_default_skill_repos(&self) -> Result<usize, AppError> { pub fn init_default_skill_repos(&self) -> Result<usize, AppError> {
// 检查是否已有仓库 // 获取已有仓库列表
let existing = self.get_skill_repos()?; let existing = self.get_skill_repos()?;
if !existing.is_empty() { let existing_keys: std::collections::HashSet<(String, String)> = existing
return Ok(0); .iter()
} .map(|r| (r.owner.clone(), r.name.clone()))
.collect();
// 获取默认仓库列表 // 获取默认仓库列表
let default_store = crate::services::skill::SkillStore::default(); let default_store = crate::services::skill::SkillStore::default();
let mut count = 0; let mut count = 0;
// 仅插入缺失的默认仓库
for repo in &default_store.repos { for repo in &default_store.repos {
self.save_skill_repo(repo)?; let key = (repo.owner.clone(), repo.name.clone());
count += 1; if !existing_keys.contains(&key) {
self.save_skill_repo(repo)?;
count += 1;
log::info!("补充默认 Skill 仓库: {}/{}", repo.owner, repo.name);
}
} }
log::info!("初始化默认 Skill 仓库完成,共 {count} 个"); if count > 0 {
log::info!("补充默认 Skill 仓库完成,新增 {count} 个");
}
Ok(count) Ok(count)
} }
} }

View File

@@ -128,6 +128,12 @@ impl Default for SkillStore {
branch: "master".to_string(), branch: "master".to_string(),
enabled: true, enabled: true,
}, },
SkillRepo {
owner: "JimLiu".to_string(),
name: "baoyu-skills".to_string(),
branch: "main".to_string(),
enabled: true,
},
], ],
} }
} }