Co-Authored-By: Quentin Torroba <quentin.torroba@mistral.ai>
Co-Authored-By: Michel Thomazo <michel.thomazo@mistral.ai>
Co-Authored-By: Kracekumar <kracethekingmaker@gmail.com>
This commit is contained in:
Quentin 2025-12-14 00:54:42 +01:00 committed by Mathias Gesbert
parent 661588de0c
commit d8dbeeb31e
91 changed files with 4521 additions and 873 deletions

View file

@ -9,8 +9,8 @@ import pytest
from tests.stubs.fake_backend import FakeBackend
from tests.stubs.fake_connection import FakeAgentSideConnection
from vibe.acp.acp_agent import VibeAcpAgent
from vibe.acp.utils import VibeSessionMode
from vibe.core.agent import Agent
from vibe.core.modes import AgentMode
from vibe.core.types import LLMChunk, LLMMessage, LLMUsage, Role
@ -49,7 +49,7 @@ def acp_agent(backend: FakeBackend) -> VibeAcpAgent:
class TestACPSetMode:
@pytest.mark.asyncio
async def test_set_mode_to_approval_required(self, acp_agent: VibeAcpAgent) -> None:
async def test_set_mode_to_default(self, acp_agent: VibeAcpAgent) -> None:
session_response = await acp_agent.newSession(
NewSessionRequest(cwd=str(Path.cwd()), mcpServers=[])
)
@ -59,21 +59,18 @@ class TestACPSetMode:
)
assert acp_session is not None
acp_session.agent.auto_approve = True
acp_session.mode_id = VibeSessionMode.AUTO_APPROVE
await acp_session.agent.switch_mode(AgentMode.AUTO_APPROVE)
response = await acp_agent.setSessionMode(
SetSessionModeRequest(
sessionId=session_id, modeId=VibeSessionMode.APPROVAL_REQUIRED
)
SetSessionModeRequest(sessionId=session_id, modeId=AgentMode.DEFAULT.value)
)
assert response is not None
assert acp_session.mode_id == VibeSessionMode.APPROVAL_REQUIRED
assert acp_session.agent.mode == AgentMode.DEFAULT
assert acp_session.agent.auto_approve is False
@pytest.mark.asyncio
async def test_set_mode_to_AUTO_APPROVE(self, acp_agent: VibeAcpAgent) -> None:
async def test_set_mode_to_auto_approve(self, acp_agent: VibeAcpAgent) -> None:
session_response = await acp_agent.newSession(
NewSessionRequest(cwd=str(Path.cwd()), mcpServers=[])
)
@ -83,19 +80,67 @@ class TestACPSetMode:
)
assert acp_session is not None
assert acp_session.mode_id == VibeSessionMode.APPROVAL_REQUIRED
assert acp_session.agent.mode == AgentMode.DEFAULT
assert acp_session.agent.auto_approve is False
response = await acp_agent.setSessionMode(
SetSessionModeRequest(
sessionId=session_id, modeId=VibeSessionMode.AUTO_APPROVE
sessionId=session_id, modeId=AgentMode.AUTO_APPROVE.value
)
)
assert response is not None
assert acp_session.mode_id == VibeSessionMode.AUTO_APPROVE
assert acp_session.agent.mode == AgentMode.AUTO_APPROVE
assert acp_session.agent.auto_approve is True
@pytest.mark.asyncio
async def test_set_mode_to_plan(self, acp_agent: VibeAcpAgent) -> None:
session_response = await acp_agent.newSession(
NewSessionRequest(cwd=str(Path.cwd()), mcpServers=[])
)
session_id = session_response.sessionId
acp_session = next(
(s for s in acp_agent.sessions.values() if s.id == session_id), None
)
assert acp_session is not None
assert acp_session.agent.mode == AgentMode.DEFAULT
response = await acp_agent.setSessionMode(
SetSessionModeRequest(sessionId=session_id, modeId=AgentMode.PLAN.value)
)
assert response is not None
assert acp_session.agent.mode == AgentMode.PLAN
assert (
acp_session.agent.auto_approve is True
) # Plan mode auto-approves read-only tools
@pytest.mark.asyncio
async def test_set_mode_to_accept_edits(self, acp_agent: VibeAcpAgent) -> None:
session_response = await acp_agent.newSession(
NewSessionRequest(cwd=str(Path.cwd()), mcpServers=[])
)
session_id = session_response.sessionId
acp_session = next(
(s for s in acp_agent.sessions.values() if s.id == session_id), None
)
assert acp_session is not None
assert acp_session.agent.mode == AgentMode.DEFAULT
response = await acp_agent.setSessionMode(
SetSessionModeRequest(
sessionId=session_id, modeId=AgentMode.ACCEPT_EDITS.value
)
)
assert response is not None
assert acp_session.agent.mode == AgentMode.ACCEPT_EDITS
assert (
acp_session.agent.auto_approve is False
) # Accept Edits mode doesn't auto-approve all
@pytest.mark.asyncio
async def test_set_mode_invalid_mode_returns_none(
self, acp_agent: VibeAcpAgent
@ -109,7 +154,7 @@ class TestACPSetMode:
)
assert acp_session is not None
initial_mode_id = acp_session.mode_id
initial_mode = acp_session.agent.mode
initial_auto_approve = acp_session.agent.auto_approve
response = await acp_agent.setSessionMode(
@ -117,7 +162,7 @@ class TestACPSetMode:
)
assert response is None
assert acp_session.mode_id == initial_mode_id
assert acp_session.agent.mode == initial_mode
assert acp_session.agent.auto_approve == initial_auto_approve
@pytest.mark.asyncio
@ -131,15 +176,15 @@ class TestACPSetMode:
)
assert acp_session is not None
initial_mode_id = VibeSessionMode.APPROVAL_REQUIRED
assert acp_session.mode_id == initial_mode_id
initial_mode = AgentMode.DEFAULT
assert acp_session.agent.mode == initial_mode
response = await acp_agent.setSessionMode(
SetSessionModeRequest(sessionId=session_id, modeId=initial_mode_id)
SetSessionModeRequest(sessionId=session_id, modeId=initial_mode.value)
)
assert response is not None
assert acp_session.mode_id == initial_mode_id
assert acp_session.agent.mode == initial_mode
assert acp_session.agent.auto_approve is False
@pytest.mark.asyncio
@ -153,7 +198,7 @@ class TestACPSetMode:
)
assert acp_session is not None
initial_mode_id = acp_session.mode_id
initial_mode = acp_session.agent.mode
initial_auto_approve = acp_session.agent.auto_approve
response = await acp_agent.setSessionMode(
@ -161,5 +206,5 @@ class TestACPSetMode:
)
assert response is None
assert acp_session.mode_id == initial_mode_id
assert acp_session.agent.mode == initial_mode
assert acp_session.agent.auto_approve == initial_auto_approve