(&mut self, selected: &SkillItem, enabled: bool)
| 1813 | } |
| 1814 | |
| 1815 | fn set_skill_enabled(&mut self, selected: &SkillItem, enabled: bool) { |
| 1816 | let workspace = self.workspace_path_buf(); |
| 1817 | let mode_id = self.agent_type.clone(); |
| 1818 | let skill = selected.clone(); |
| 1819 | |
| 1820 | let result: Result<(), String> = tokio::task::block_in_place(|| { |
| 1821 | tokio::runtime::Handle::current().block_on(async { |
| 1822 | match skill.level.as_str() { |
| 1823 | "user" => { |
| 1824 | set_user_mode_skill_state( |
| 1825 | &mode_id, |
| 1826 | &skill.key, |
| 1827 | enabled, |
| 1828 | skill.default_enabled, |
| 1829 | ) |
| 1830 | .await |
| 1831 | .map_err(|error| error.to_string())?; |
| 1832 | } |
| 1833 | "project" => { |
| 1834 | let mut document = load_project_mode_skills_document_local(&workspace) |
| 1835 | .await |
| 1836 | .map_err(|error| error.to_string())?; |
| 1837 | set_mode_skill_disabled_in_document( |
| 1838 | &mut document, |
| 1839 | &mode_id, |
| 1840 | &skill.key, |
| 1841 | !enabled, |
| 1842 | ) |
| 1843 | .map_err(|error| error.to_string())?; |
| 1844 | save_project_mode_skills_document_local(&workspace, &document) |
| 1845 | .await |
| 1846 | .map_err(|error| error.to_string())?; |
| 1847 | } |
| 1848 | other => { |
| 1849 | return Err(format!("Unsupported skill level '{}'", other)); |
| 1850 | } |
| 1851 | } |
| 1852 | |
| 1853 | Ok(()) |
| 1854 | }) |
| 1855 | }); |
| 1856 | |
| 1857 | self.status = Some(match result { |
| 1858 | Ok(()) => format!( |
| 1859 | "Skill '{}' {} for mode '{}'.", |
| 1860 | selected.name, |
| 1861 | if enabled { "enabled" } else { "disabled" }, |
| 1862 | self.agent_type |
| 1863 | ), |
| 1864 | Err(error) => format!("Failed to update skill '{}': {}", selected.name, error), |
| 1865 | }); |
| 1866 | } |
| 1867 | |
| 1868 | fn skill_item_from_info(info: SkillInfo) -> SkillItem { |
| 1869 | SkillItem { |
no test coverage detected