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

26 statements  

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

1"""SubAgent plugin — creates TodoManager + SubAgentManager and wires TaskTool.""" 

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

13 

14 

15class SubAgentPlugin(Plugin): 

16 """Creates todo manager, sub-agent manager, and wires TaskTool.""" 

17 

18 name = "subagent" 

19 version = "1.0.0" 

20 description = "Creates sub-agent dispatch and todo manager" 

21 

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

23 from merco.todo.manager import TodoManager 

24 from merco.agents.subagent import SubAgentManager 

25 

26 todo_manager = TodoManager(f"{ctx.config.memory_path}/../todos.db") 

27 sub_agent_manager = SubAgentManager(ctx.agent, ctx.agent_profiles) 

28 

29 ctx.todo_manager = todo_manager 

30 ctx.sub_agent_manager = sub_agent_manager 

31 if ctx.agent is not None: 

32 ctx.agent.todo_manager = todo_manager 

33 ctx.agent.sub_agent_manager = sub_agent_manager 

34 

35 task_tool = ctx.tool_registry.get("task") 

36 if task_tool is not None: 

37 if hasattr(task_tool, "_todo_manager"): 

38 task_tool._todo_manager = todo_manager 

39 if hasattr(task_tool, "_sub_agent_manager"): 

40 task_tool._sub_agent_manager = sub_agent_manager 

41 

42 logger.info("SubAgent plugin activated")