"""Integration tests for the MiniMax ACP adapter.""" from types import SimpleNamespace import pytest from mini_agent.acp import MiniMaxACPAgent from mini_agent.config import AgentConfig, Config, LLMConfig, ToolsConfig from mini_agent.schema import FunctionCall, LLMResponse, ToolCall from mini_agent.tools.base import Tool, ToolResult class DummyConn: def __init__(self): self.updates = [] async def sessionUpdate(self, payload): self.updates.append(payload) class DummyLLM: def __init__(self): self.calls = 0 async def generate(self, messages, tools): self.calls += 1 if self.calls == 1: return LLMResponse( content="", thinking="calling echo", tool_calls=[ ToolCall( id="tool1", type="function", function=FunctionCall(name="echo", arguments={"text": "ping"}), ) ], finish_reason="tool", ) return LLMResponse(content="done", thinking=None, tool_calls=None, finish_reason="stop") class EchoTool(Tool): @property def name(self): return "echo" @property def description(self): return "Echo helper" @property def parameters(self): return {"type": "object", "properties": {"text": {"type": "string"}}} async def execute(self, text: str): return ToolResult(success=True, content=f"tool:{text}") @pytest.fixture def acp_agent(tmp_path): config = Config( llm=LLMConfig(api_key="test-key"), agent=AgentConfig(max_steps=3, workspace_dir=str(tmp_path)), tools=ToolsConfig(), ) conn = DummyConn() agent = MiniMaxACPAgent(conn, config, DummyLLM(), [EchoTool()], "system") return agent, conn @pytest.mark.asyncio async def test_acp_turn_executes_tool(acp_agent): agent, conn = acp_agent session = await agent.newSession(SimpleNamespace(cwd=None)) prompt = SimpleNamespace(sessionId=session.sessionId, prompt=[{"text": "hello"}]) response = await agent.prompt(prompt) assert response.stopReason == "end_turn" assert any("tool:ping" in str(update) for update in conn.updates) await agent.cancel(SimpleNamespace(sessionId=session.sessionId)) assert agent._sessions[session.sessionId].cancelled @pytest.mark.asyncio async def test_acp_invalid_session(acp_agent): agent, _ = acp_agent prompt = SimpleNamespace(sessionId="missing", prompt=[{"text": "?"}]) response = await agent.prompt(prompt) assert response.stopReason == "refusal"