Coverage for merco/plugins/builtin/skills/plugin.py: 100%

20 statements  

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

1"""Skill plugin — creates and loads SkillRegistry.""" 

2from __future__ import annotations 

3 

4import logging 

5from typing import TYPE_CHECKING 

6 

7from merco.plugins.base import Plugin 

8 

9if TYPE_CHECKING: 

10 from merco.plugins.base import PluginContext 

11 

12logger = logging.getLogger("merco.plugins.skills") 

13 

14 

15class SkillPlugin(Plugin): 

16 """Creates SkillRegistry and injects it into the agent and skill_view tool.""" 

17 

18 name = "skills" 

19 version = "1.0.0" 

20 description = "Loads skills and injects the skill registry" 

21 

22 async def activate(self, ctx: "PluginContext") -> None: 

23 from merco.skills.registry import SkillRegistry 

24 

25 registry = SkillRegistry() 

26 registry.load_from_paths(ctx.config.skills_paths) 

27 

28 ctx.skill_registry = registry 

29 if ctx.agent is not None: 

30 ctx.agent.skill_registry = registry 

31 

32 skill_tool = ctx.tool_registry.get("skill_view") 

33 if skill_tool is not None and hasattr(skill_tool, "set_skill_registry"): 

34 skill_tool.set_skill_registry(registry) 

35 

36 logger.info("Skill plugin activated (paths=%s)", ctx.config.skills_paths)