- Remove trailing whitespace and normalize blank lines - Unify string quotes and line breaks for long lines - Sort imports alphabetically across modules
64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
"""Spawn tool for creating background subagents."""
|
|
|
|
from typing import TYPE_CHECKING, Any
|
|
|
|
from nanobot.agent.tools.base import Tool
|
|
|
|
if TYPE_CHECKING:
|
|
from nanobot.agent.subagent import SubagentManager
|
|
|
|
|
|
class SpawnTool(Tool):
|
|
"""Tool to spawn a subagent for background task execution."""
|
|
|
|
def __init__(self, manager: "SubagentManager"):
|
|
self._manager = manager
|
|
self._origin_channel = "cli"
|
|
self._origin_chat_id = "direct"
|
|
self._session_key = "cli:direct"
|
|
|
|
def set_context(self, channel: str, chat_id: str) -> None:
|
|
"""Set the origin context for subagent announcements."""
|
|
self._origin_channel = channel
|
|
self._origin_chat_id = chat_id
|
|
self._session_key = f"{channel}:{chat_id}"
|
|
|
|
@property
|
|
def name(self) -> str:
|
|
return "spawn"
|
|
|
|
@property
|
|
def description(self) -> str:
|
|
return (
|
|
"Spawn a subagent to handle a task in the background. "
|
|
"Use this for complex or time-consuming tasks that can run independently. "
|
|
"The subagent will complete the task and report back when done."
|
|
)
|
|
|
|
@property
|
|
def parameters(self) -> dict[str, Any]:
|
|
return {
|
|
"type": "object",
|
|
"properties": {
|
|
"task": {
|
|
"type": "string",
|
|
"description": "The task for the subagent to complete",
|
|
},
|
|
"label": {
|
|
"type": "string",
|
|
"description": "Optional short label for the task (for display)",
|
|
},
|
|
},
|
|
"required": ["task"],
|
|
}
|
|
|
|
async def execute(self, task: str, label: str | None = None, **kwargs: Any) -> str:
|
|
"""Spawn a subagent to execute the given task."""
|
|
return await self._manager.spawn(
|
|
task=task,
|
|
label=label,
|
|
origin_channel=self._origin_channel,
|
|
origin_chat_id=self._origin_chat_id,
|
|
session_key=self._session_key,
|
|
)
|