Coverage for merco/plugins/builtin/superpower/plugin.py: 96%

26 statements  

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

1"""Superpower plugin — example builtin plugin for merco""" 

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.superpower") 

13 

14 

15class SuperpowerHintChunk: 

16 """Prompt chunk that informs the LLM about available superpowers""" 

17 name = "superpower_hint" 

18 

19 def enabled(self, agent) -> bool: 

20 return True 

21 

22 def build(self, agent) -> str: 

23 return """## Superpowers Available 

24You have access to superpowers: TDD, debugging, subagent, code review. 

25Use them when appropriate to help the user.""" 

26 

27 

28class SuperpowerPlugin(Plugin): 

29 """Example builtin plugin demonstrating merco's plugin system""" 

30 name = "superpower" 

31 version = "1.0.0" 

32 description = "Extends merco with superpower capabilities" 

33 

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

35 # 1. Register prompt chunk 

36 ctx.add_prompt_chunk(SuperpowerHintChunk()) 

37 

38 # 2. Subscribe to events 

39 ctx.hooks.on("agent.start", self._on_start) 

40 ctx.hooks.on("tool.error", self._on_tool_error) 

41 

42 logger.info("Superpower plugin activated") 

43 

44 async def deactivate(self) -> None: 

45 logger.info("Superpower plugin deactivated") 

46 

47 async def _on_start(self, session_id: str = "", **kwargs): 

48 logger.debug("Superpower: agent.start session=%s", session_id) 

49 

50 async def _on_tool_error(self, tool_name: str = "", error: str = "", **kwargs): 

51 logger.debug("Superpower: tool.error %s: %s", tool_name, error)