"""Agent 专属 Protocol 端口。""" from __future__ import annotations from typing import TYPE_CHECKING, Any, Protocol, runtime_checkable import pluggy if TYPE_CHECKING: from core.agent.types import LoopResult, Step hookspec = pluggy.HookspecMarker("agent_loop") hookimpl = pluggy.HookimplMarker("agent_loop") @runtime_checkable class ToolDispatcher(Protocol): """Agent 工具调度端口。无效工具名抛 ValueError。""" async def dispatch( self, tool_name: str, args: dict[str, Any], *, context: dict[str, Any] ) -> str: ... class AgentLoopSpec: """AgentLoop 生命周期扩展点。 每个 hookimpl 可选择观察(返回 None)或变换(返回值)。 """ @hookspec async def before_step(self, iteration: int, messages: list[dict[str, Any]]) -> None: ... @hookspec async def after_tool(self, iteration: int, step: Step) -> str | None: ... @hookspec async def after_step(self, iteration: int, messages: list[dict[str, Any]]) -> None: ... @hookspec async def on_finish(self, result: LoopResult) -> None: ...