diff --git a/hermes_cli/middleware.py b/hermes_cli/middleware.py index f5833aa12e7..a3b472a4563 100644 --- a/hermes_cli/middleware.py +++ b/hermes_cli/middleware.py @@ -132,7 +132,8 @@ def apply_tool_request_middleware( trace: List[Dict[str, Any]] = [] session_id = str(context.get("session_id") or "") - if session_id and not context.pop("skip_relay", False): + skip_relay = bool(context.pop("skip_relay", False)) + if session_id and not skip_relay: from agent import relay_runtime relay_args = relay_runtime.apply_tool_request_intercepts( diff --git a/tests/hermes_cli/test_plugins.py b/tests/hermes_cli/test_plugins.py index 3fdb6d1812d..b540f70bd10 100644 --- a/tests/hermes_cli/test_plugins.py +++ b/tests/hermes_cli/test_plugins.py @@ -189,6 +189,32 @@ class TestPluginDiscovery: assert result.changed is True assert result.trace == [{"source": "same-payload"}] + def test_tool_request_middleware_hides_internal_skip_relay_flag( + self, + monkeypatch, + ): + observed = [] + + def middleware(**kwargs): + observed.append(kwargs) + return {"args": kwargs["args"]} + + manager = types.SimpleNamespace( + _middleware={"tool_request": [middleware]}, + invoke_middleware=lambda kind, **kwargs: [middleware(**kwargs)], + ) + monkeypatch.setattr("hermes_cli.plugins.get_plugin_manager", lambda: manager) + + apply_tool_request_middleware( + "read_file", + {"path": "README.md"}, + session_id="", + skip_relay=True, + ) + + assert len(observed) == 1 + assert "skip_relay" not in observed[0] + def test_execution_middleware_post_next_call_error_does_not_retry(self, monkeypatch): calls = []