from typing import Any from mcp.types import CallToolResult from astrbot.core.agent.hooks import BaseAgentRunHooks from astrbot.core.agent.run_context import ContextWrapper from astrbot.core.agent.tool import FunctionTool from astrbot.core.astr_agent_context import AstrAgentContext from astrbot.core.pipeline.context_utils import call_event_hook from astrbot.core.star.star_handler import EventType class MainAgentHooks(BaseAgentRunHooks[AstrAgentContext]): async def on_agent_done(self, run_context, llm_response): # 执行事件钩子 await call_event_hook( run_context.context.event, EventType.OnLLMResponseEvent, llm_response, ) async def on_tool_end( self, run_context: ContextWrapper[AstrAgentContext], tool: FunctionTool[Any], tool_args: dict | None, tool_result: CallToolResult | None, ): run_context.context.event.clear_result() class EmptyAgentHooks(BaseAgentRunHooks[AstrAgentContext]): pass MAIN_AGENT_HOOKS = MainAgentHooks()