"""core/agent/protocols.py 单元测试。"""
from __future__ import annotations

from typing import Any

import pluggy

from core.agent.protocols import AgentLoopSpec, ToolDispatcher


class _FakeDispatcher:
    async def dispatch(
        self, tool_name: str, args: dict[str, Any], *, context: dict[str, Any]
    ) -> str:
        return f"executed {tool_name}"


def test_fake_dispatcher_satisfies_protocol() -> None:
    assert isinstance(_FakeDispatcher(), ToolDispatcher)

def test_plain_object_not_dispatcher() -> None:
    assert not isinstance(object(), ToolDispatcher)

def test_hookspec_can_register() -> None:
    pm = pluggy.PluginManager("agent_loop")
    pm.add_hookspecs(AgentLoopSpec)
    assert pm.hook.before_step is not None
    assert pm.hook.after_tool is not None
    assert pm.hook.after_step is not None
    assert pm.hook.on_finish is not None
