(
state: State<'_, AppState>,
request: ReplaceModeSkillSelectionRequest,
)
| 633 | |
| 634 | #[tauri::command] |
| 635 | pub 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, |
nothing calls this directly
no test coverage detected