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
« 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
4import logging
5from typing import TYPE_CHECKING
7from merco.plugins.base import Plugin
9if TYPE_CHECKING:
10 from merco.plugins.base import PluginContext
12logger = logging.getLogger("merco.plugins.skills")
15class SkillPlugin(Plugin):
16 """Creates SkillRegistry and injects it into the agent and skill_view tool."""
18 name = "skills"
19 version = "1.0.0"
20 description = "Loads skills and injects the skill registry"
22 async def activate(self, ctx: "PluginContext") -> None:
23 from merco.skills.registry import SkillRegistry
25 registry = SkillRegistry()
26 registry.load_from_paths(ctx.config.skills_paths)
28 ctx.skill_registry = registry
29 if ctx.agent is not None:
30 ctx.agent.skill_registry = registry
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)
36 logger.info("Skill plugin activated (paths=%s)", ctx.config.skills_paths)