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
« 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
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.superpower")
15class SuperpowerHintChunk:
16 """Prompt chunk that informs the LLM about available superpowers"""
17 name = "superpower_hint"
19 def enabled(self, agent) -> bool:
20 return True
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."""
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"
34 async def activate(self, ctx: "PluginContext") -> None:
35 # 1. Register prompt chunk
36 ctx.add_prompt_chunk(SuperpowerHintChunk())
38 # 2. Subscribe to events
39 ctx.hooks.on("agent.start", self._on_start)
40 ctx.hooks.on("tool.error", self._on_tool_error)
42 logger.info("Superpower plugin activated")
44 async def deactivate(self) -> None:
45 logger.info("Superpower plugin deactivated")
47 async def _on_start(self, session_id: str = "", **kwargs):
48 logger.debug("Superpower: agent.start session=%s", session_id)
50 async def _on_tool_error(self, tool_name: str = "", error: str = "", **kwargs):
51 logger.debug("Superpower: tool.error %s: %s", tool_name, error)