Coverage for merco/skills/registry.py: 93%

27 statements  

« prev     ^ index     » next       coverage.py v7.15.0, created at 2026-07-07 14:04 +0800

1"""技能注册与管理""" 

2 

3from typing import Optional 

4 

5 

6class SkillRegistry: 

7 """技能注册表""" 

8 

9 def __init__(self): 

10 self._skills: dict[str, dict] = {} 

11 

12 def register(self, skill: dict): 

13 """注册技能""" 

14 self._skills[skill["name"]] = skill 

15 

16 def unregister(self, name: str): 

17 """注销技能""" 

18 self._skills.pop(name, None) 

19 

20 def get(self, name: str) -> Optional[dict]: 

21 """获取技能""" 

22 return self._skills.get(name) 

23 

24 def list_skills(self) -> list[dict]: 

25 """列出所有技能""" 

26 return list(self._skills.values()) 

27 

28 def get_relevant(self, query: str) -> list[dict]: 

29 """根据查询获取相关技能(简单关键词匹配)""" 

30 query_lower = query.lower() 

31 relevant = [] 

32 

33 for skill in self._skills.values(): 

34 desc = skill.get("description", "").lower() 

35 name = skill.get("name", "").lower() 

36 if query_lower in desc or query_lower in name: 

37 relevant.append(skill) 

38 

39 return relevant 

40 

41 def load_from_paths(self, paths: list[str]): 

42 """从多个路径加载技能""" 

43 from .loader import SkillLoader 

44 

45 for path in paths: 

46 skills = SkillLoader.load_from_directory(path) 

47 for skill in skills: 

48 self.register(skill)