Co-authored-by: Clément Sirieix <clement.sirieix@mistral.ai>
Co-authored-by: Guillaume LE GOFF <guillaume.lgf@gmail.com>
Co-authored-by: Hdandria <henri.dandria@mistral.ai>
Co-authored-by: Ivana Dunisijevic <ivana.dunisijevic@mistral.ai>
Co-authored-by: Jean Burellier <sheplu@users.noreply.github.com>
Co-authored-by: Mathias Gesbert <mathias.gesbert@mistral.ai>
Co-authored-by: Mert Unsal <mert.unsal@mistral.ai>
Co-authored-by: Michel Thomazo <51709227+michelTho@users.noreply.github.com>
Co-authored-by: Paul VEZIA <166131032+le-codeur-rapide@users.noreply.github.com>
Co-authored-by: Pierre Rossinès <pierre.rossines@mistral.ai>
Co-authored-by: Val <102326092+vdeva@users.noreply.github.com>
Co-authored-by: Vincent G <10739306+VinceOPS@users.noreply.github.com>
Co-authored-by: renovate-mistral[bot] <253709520+renovate-mistral[bot]@users.noreply.github.com>
Co-authored-by: Mistral Vibe <vibe@mistral.ai>
This commit is contained in:
Clément Drouin 2026-06-19 11:01:24 +02:00 committed by GitHub
parent 564a14365e
commit 6bedf271ce
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
223 changed files with 10533 additions and 6947 deletions

View file

@ -1,6 +1,6 @@
from __future__ import annotations
from unittest.mock import MagicMock, patch
from unittest.mock import AsyncMock, MagicMock, patch
import pytest
@ -228,3 +228,44 @@ class TestTaskToolExecution:
assert isinstance(result, TaskResult)
assert result.completed is False
assert "Simulated error" in result.response
@pytest.mark.asyncio
async def test_closes_subagent_loop_on_success(
self, task_tool: Task, ctx: InvokeContext
) -> None:
async def mock_act(task: str):
yield AssistantEvent(content="done")
with patch("vibe.core.tools.builtins.task.AgentLoop") as mock_agent_loop_class:
mock_agent_loop = MagicMock()
mock_agent_loop.act = mock_act
mock_agent_loop.messages = [LLMMessage(role=Role.assistant, content="a")]
mock_agent_loop.set_approval_callback = MagicMock()
mock_agent_loop.aclose = AsyncMock()
mock_agent_loop_class.return_value = mock_agent_loop
args = TaskArgs(task="do something", agent="explore")
await collect_result(task_tool.run(args, ctx))
mock_agent_loop.aclose.assert_awaited_once()
@pytest.mark.asyncio
async def test_closes_subagent_loop_on_exception(
self, task_tool: Task, ctx: InvokeContext
) -> None:
async def mock_act(task: str):
yield AssistantEvent(content="starting")
raise RuntimeError("boom")
with patch("vibe.core.tools.builtins.task.AgentLoop") as mock_agent_loop_class:
mock_agent_loop = MagicMock()
mock_agent_loop.act = mock_act
mock_agent_loop.messages = [LLMMessage(role=Role.assistant, content="a")]
mock_agent_loop.set_approval_callback = MagicMock()
mock_agent_loop.aclose = AsyncMock()
mock_agent_loop_class.return_value = mock_agent_loop
args = TaskArgs(task="do something", agent="explore")
await collect_result(task_tool.run(args, ctx))
mock_agent_loop.aclose.assert_awaited_once()