mirror of
https://github.com/NousResearch/hermes-agent.git
synced 2026-06-07 08:02:23 +00:00
fix(browser): rewrite Camofox Docker loopback URLs (#25541)
Co-authored-by: Wysie <wysie@users.noreply.github.com>
This commit is contained in:
parent
f61fd59b62
commit
a0fc3df878
5 changed files with 204 additions and 4 deletions
|
|
@ -18,6 +18,7 @@ from tools.browser_camofox import (
|
|||
camofox_vision,
|
||||
check_camofox_available,
|
||||
is_camofox_mode,
|
||||
_rewrite_loopback_url_for_camofox,
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -57,6 +58,10 @@ class TestCamofoxMode:
|
|||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def _config_with_camofox(**camofox_config):
|
||||
return {"browser": {"camofox": camofox_config}}
|
||||
|
||||
|
||||
def _mock_response(status=200, json_data=None):
|
||||
resp = MagicMock()
|
||||
resp.status_code = status
|
||||
|
|
@ -71,6 +76,60 @@ def _mock_response(status=200, json_data=None):
|
|||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
class TestCamofoxLoopbackRewrite:
|
||||
@patch("tools.browser_camofox.load_config")
|
||||
def test_rewrites_localhost_when_enabled(self, mock_config, monkeypatch):
|
||||
monkeypatch.delenv("CAMOFOX_REWRITE_LOOPBACK_URLS", raising=False)
|
||||
monkeypatch.delenv("CAMOFOX_LOOPBACK_HOST_ALIAS", raising=False)
|
||||
mock_config.return_value = _config_with_camofox(rewrite_loopback_urls=True)
|
||||
|
||||
rewritten, metadata = _rewrite_loopback_url_for_camofox("http://127.0.0.1:8766/#settings")
|
||||
|
||||
assert rewritten == "http://host.docker.internal:8766/#settings"
|
||||
assert metadata == {
|
||||
"from": "127.0.0.1",
|
||||
"to": "host.docker.internal",
|
||||
"original_url": "http://127.0.0.1:8766/#settings",
|
||||
"rewritten_url": "http://host.docker.internal:8766/#settings",
|
||||
}
|
||||
|
||||
@patch("tools.browser_camofox.load_config")
|
||||
def test_rewrite_is_opt_in(self, mock_config, monkeypatch):
|
||||
monkeypatch.delenv("CAMOFOX_REWRITE_LOOPBACK_URLS", raising=False)
|
||||
mock_config.return_value = _config_with_camofox(rewrite_loopback_urls=False)
|
||||
|
||||
rewritten, metadata = _rewrite_loopback_url_for_camofox("http://localhost:3000/app?x=1")
|
||||
|
||||
assert rewritten == "http://localhost:3000/app?x=1"
|
||||
assert metadata is None
|
||||
|
||||
@patch("tools.browser_camofox.load_config")
|
||||
def test_preserves_public_urls_when_enabled(self, mock_config, monkeypatch):
|
||||
monkeypatch.delenv("CAMOFOX_REWRITE_LOOPBACK_URLS", raising=False)
|
||||
mock_config.return_value = _config_with_camofox(rewrite_loopback_urls=True)
|
||||
|
||||
rewritten, metadata = _rewrite_loopback_url_for_camofox("https://example.com:8443/path?q=1#top")
|
||||
|
||||
assert rewritten == "https://example.com:8443/path?q=1#top"
|
||||
assert metadata is None
|
||||
|
||||
@patch("tools.browser_camofox.load_config")
|
||||
def test_env_alias_takes_precedence(self, mock_config, monkeypatch):
|
||||
monkeypatch.setenv("CAMOFOX_REWRITE_LOOPBACK_URLS", "true")
|
||||
monkeypatch.setenv("CAMOFOX_LOOPBACK_HOST_ALIAS", "192.168.1.10")
|
||||
mock_config.return_value = _config_with_camofox(
|
||||
rewrite_loopback_urls=False,
|
||||
loopback_host_alias="host.docker.internal",
|
||||
)
|
||||
|
||||
rewritten, metadata = _rewrite_loopback_url_for_camofox("http://[::1]:8080/path")
|
||||
|
||||
assert rewritten == "http://192.168.1.10:8080/path"
|
||||
assert metadata is not None
|
||||
assert metadata["from"] == "::1"
|
||||
assert metadata["to"] == "192.168.1.10"
|
||||
|
||||
|
||||
class TestCamofoxNavigate:
|
||||
@patch("tools.browser_camofox.requests.post")
|
||||
def test_creates_tab_on_first_navigate(self, mock_post, monkeypatch):
|
||||
|
|
@ -81,6 +140,24 @@ class TestCamofoxNavigate:
|
|||
assert result["success"] is True
|
||||
assert result["url"] == "https://example.com"
|
||||
|
||||
@patch("tools.browser_camofox.load_config")
|
||||
@patch("tools.browser_camofox.requests.post")
|
||||
def test_navigate_uses_rewritten_loopback_url(self, mock_post, mock_config, monkeypatch):
|
||||
monkeypatch.setenv("CAMOFOX_URL", "http://localhost:9377")
|
||||
monkeypatch.delenv("CAMOFOX_REWRITE_LOOPBACK_URLS", raising=False)
|
||||
monkeypatch.delenv("CAMOFOX_LOOPBACK_HOST_ALIAS", raising=False)
|
||||
mock_config.return_value = _config_with_camofox(rewrite_loopback_urls=True)
|
||||
mock_post.return_value = _mock_response(json_data={"tabId": "tab_rewrite"})
|
||||
|
||||
result = json.loads(camofox_navigate("http://127.0.0.1:8766/#settings", task_id="t_rewrite"))
|
||||
|
||||
assert result["success"] is True
|
||||
assert result["url"] == "http://host.docker.internal:8766/#settings"
|
||||
assert result["requested_url"] == "http://127.0.0.1:8766/#settings"
|
||||
assert result["url_rewrite"]["to"] == "host.docker.internal"
|
||||
assert "Rewrote loopback URL" in result["warning"]
|
||||
assert mock_post.call_args.kwargs["json"]["url"] == "http://host.docker.internal:8766/#settings"
|
||||
|
||||
@patch("tools.browser_camofox.requests.post")
|
||||
def test_navigates_existing_tab(self, mock_post, monkeypatch):
|
||||
monkeypatch.setenv("CAMOFOX_URL", "http://localhost:9377")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue