from app.core.contracts import UserTask from app.runtime.runtime_controller import RuntimeController def test_runtime_loop_emits_basic_events() -> None: controller = RuntimeController() result = controller.handle_task(UserTask(input="hello runtime")) event_types = [event["type"] for event in result["events"]] assert result["status"] == "completed" assert "message" in result["result"] assert "task_received" in event_types assert "context_built" in event_types assert "task_completed" in event_types def test_runtime_loop_routes_natural_language_shell_request_to_permission_flow() -> None: controller = RuntimeController() result = controller.handle_task(UserTask(input="запусти sudo apt update")) event_types = [event["type"] for event in result["events"]] assert result["status"] == "awaiting_permission" assert result["directive"]["type"] == "tool" assert result["directive"]["payload"]["tool"] == "shell_exec" assert "permission_requested" in event_types assert "task_awaiting_permission" in event_types assert result["result"]["error"] == "Permission required before execution."