(
state: State<'_, AppState>,
mode_id: String,
skill_key: String,
disabled: bool,
workspace_path: Option<String>,
)
| 502 | |
| 503 | #[tauri::command] |
| 504 | pub async fn set_mode_skill_disabled( |
| 505 | state: State<'_, AppState>, |
| 506 | mode_id: String, |
| 507 | skill_key: String, |
| 508 | disabled: bool, |
| 509 | workspace_path: Option<String>, |
| 510 | ) -> Result<String, String> { |
| 511 | if skill_key.starts_with("user::") { |
| 512 | let registry = SkillRegistry::global(); |
| 513 | let skill_info = if let Some((remote_root, entry)) = |
| 514 | resolve_remote_workspace(&state, workspace_path.as_deref()).await? |
| 515 | { |
| 516 | let remote_fs = state |
| 517 | .get_remote_file_service_async() |
| 518 | .await |
| 519 | .map_err(|e| format!("Remote file service not available: {}", e))?; |
| 520 | let remote_workspace_fs = RemoteWorkspaceFs::new(entry.connection_id, remote_fs); |
| 521 | registry |
| 522 | .find_skill_by_key_for_remote_workspace( |
| 523 | &remote_workspace_fs, |
| 524 | &remote_root, |
| 525 | &skill_key, |
| 526 | ) |
| 527 | .await |
| 528 | } else { |
| 529 | registry |
| 530 | .find_skill_by_key_for_workspace( |
| 531 | &skill_key, |
| 532 | workspace_root_from_input(workspace_path.as_deref()).as_deref(), |
| 533 | ) |
| 534 | .await |
| 535 | } |
| 536 | .ok_or_else(|| format!("Skill '{}' not found", skill_key))?; |
| 537 | |
| 538 | let default_enabled = resolve_skill_default_enabled_for_mode(&skill_info, &mode_id); |
| 539 | set_user_mode_skill_state(&mode_id, &skill_key, !disabled, default_enabled) |
| 540 | .await |
| 541 | .map_err(|e| format!("Failed to update user skill override: {}", e))?; |
| 542 | if let Err(e) = bitfun_core::service::config::reload_global_config().await { |
| 543 | log::warn!( |
| 544 | "Failed to reload global config after user skill override change: mode_id={}, skill_key={}, error={}", |
| 545 | mode_id, |
| 546 | skill_key, |
| 547 | e |
| 548 | ); |
| 549 | } |
| 550 | return Ok(format!( |
| 551 | "Mode '{}' skill '{}' updated successfully", |
| 552 | mode_id, skill_key |
| 553 | )); |
| 554 | } |
| 555 | |
| 556 | if !skill_key.starts_with("project::") { |
| 557 | return Err(format!("Unsupported skill key '{}'", skill_key)); |
| 558 | } |
| 559 | |
| 560 | if let Some((remote_root, entry)) = |
| 561 | resolve_remote_workspace(&state, workspace_path.as_deref()).await? |
nothing calls this directly
no test coverage detected