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
« prev ^ index » next coverage.py v7.15.0, created at 2026-07-07 14:04 +0800
1"""技能注册与管理"""
3from typing import Optional
6class SkillRegistry:
7 """技能注册表"""
9 def __init__(self):
10 self._skills: dict[str, dict] = {}
12 def register(self, skill: dict):
13 """注册技能"""
14 self._skills[skill["name"]] = skill
16 def unregister(self, name: str):
17 """注销技能"""
18 self._skills.pop(name, None)
20 def get(self, name: str) -> Optional[dict]:
21 """获取技能"""
22 return self._skills.get(name)
24 def list_skills(self) -> list[dict]:
25 """列出所有技能"""
26 return list(self._skills.values())
28 def get_relevant(self, query: str) -> list[dict]:
29 """根据查询获取相关技能(简单关键词匹配)"""
30 query_lower = query.lower()
31 relevant = []
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)
39 return relevant
41 def load_from_paths(self, paths: list[str]):
42 """从多个路径加载技能"""
43 from .loader import SkillLoader
45 for path in paths:
46 skills = SkillLoader.load_from_directory(path)
47 for skill in skills:
48 self.register(skill)