MCPcopy Create free account
hub / github.com/GCWing/BitFun / replace_mode_skill_selection

Function replace_mode_skill_selection

src/apps/desktop/src/api/skill_api.rs:635–701  ·  view source on GitHub ↗
(
    state: State<'_, AppState>,
    request: ReplaceModeSkillSelectionRequest,
)

Source from the content-addressed store, hash-verified

633
634#[tauri::command]
635pub async fn replace_mode_skill_selection(
636 state: State<'_, AppState>,
637 request: ReplaceModeSkillSelectionRequest,
638) -> Result<String, String> {
639 let registry = SkillRegistry::global();
640 let all_skills =
641 get_all_skills_for_workspace_input(&state, registry, request.workspace_path.as_deref())
642 .await?;
643
644 let enabled_skill_keys = normalize_skill_key_list(request.enabled_skill_keys);
645 let enabled_keys: HashSet<String> = enabled_skill_keys.iter().cloned().collect();
646 let known_keys: HashSet<String> = all_skills.iter().map(|skill| skill.key.clone()).collect();
647 let unknown_keys: Vec<String> = enabled_skill_keys
648 .iter()
649 .filter(|key| !known_keys.contains(*key))
650 .cloned()
651 .collect();
652 if !unknown_keys.is_empty() {
653 return Err(format!(
654 "Unknown skill keys for mode '{}': {}",
655 request.mode_id,
656 unknown_keys.join(", ")
657 ));
658 }
659
660 persist_user_mode_skill_selection(&request.mode_id, &all_skills, &enabled_keys).await?;
661
662 let disabled_project_skills = normalize_skill_key_list(build_disabled_project_skill_keys(
663 &all_skills,
664 &enabled_keys,
665 ));
666
667 if let Some((remote_root, entry)) =
668 resolve_remote_workspace(&state, request.workspace_path.as_deref()).await?
669 {
670 persist_project_mode_skill_selection_remote(
671 &state,
672 &remote_root,
673 &entry,
674 &request.mode_id,
675 disabled_project_skills,
676 )
677 .await?;
678 } else if let Some(workspace_root) =
679 workspace_root_from_input(request.workspace_path.as_deref())
680 {
681 persist_project_mode_skill_selection_local(
682 &request.mode_id,
683 &workspace_root,
684 disabled_project_skills,
685 )
686 .await?;
687 }
688
689 if let Err(e) = bitfun_core::service::config::reload_global_config().await {
690 log::warn!(
691 "Failed to reload global config after batch skill update: mode_id={}, error={}",
692 request.mode_id,

Callers

nothing calls this directly

Tested by

no test coverage detected