diff --git a/tests/test_tui_gateway_server.py b/tests/test_tui_gateway_server.py index b3714bbf12d7..f566029c4016 100644 --- a/tests/test_tui_gateway_server.py +++ b/tests/test_tui_gateway_server.py @@ -9594,6 +9594,51 @@ def test_respond_unpacks_sid_tuple_correctly(): server._answers.pop("rid-x", None) +def test_approval_respond_forwards_reason_and_optional_resolve_all(): + server._sessions["sid"] = _session() + try: + with patch( + "tools.approval.resolve_gateway_approval", return_value=1 + ) as mock_resolve: + response = server.handle_request( + { + "id": "1", + "method": "approval.respond", + "params": { + "session_id": "sid", + "choice": "deny", + "reason": "Denied for this exact reason.", + "all": True, + }, + } + ) + + assert response["result"] == {"resolved": 1} + mock_resolve.assert_called_once_with( + "session-key", + "deny", + reason="Denied for this exact reason.", + resolve_all=True, + ) + + mock_resolve.reset_mock() + server.handle_request( + { + "id": "2", + "method": "approval.respond", + "params": {"session_id": "sid", "choice": "deny"}, + } + ) + mock_resolve.assert_called_once_with( + "session-key", + "deny", + reason=None, + resolve_all=False, + ) + finally: + server._sessions.pop("sid", None) + + # --------------------------------------------------------------------------- # /model switch and other agent-mutating commands must reject while the # session is running. agent.switch_model() mutates self.model, self.provider, diff --git a/tui_gateway/methods_prompt.py b/tui_gateway/methods_prompt.py index 763de70ac8e0..445b475d7a13 100644 --- a/tui_gateway/methods_prompt.py +++ b/tui_gateway/methods_prompt.py @@ -875,6 +875,7 @@ def _(rid, params: dict) -> dict: "resolved": resolve_gateway_approval( session["session_key"], params.get("choice", "deny"), + reason=params.get("reason"), resolve_all=params.get("all", False), ) },