diff --git a/src/agents/sandbox/types.py b/src/agents/sandbox/types.py index 67bf7fde65..f9549a5e33 100644 --- a/src/agents/sandbox/types.py +++ b/src/agents/sandbox/types.py @@ -181,5 +181,8 @@ def url_for(self, scheme: str) -> str: base = f"{prefix}://{host}:{self.port}/" if self.query: - return f"{base}?{self.query}" + query = self.query[1:] if self.query.startswith("?") else self.query + if query: + return f"{base}?{query}" + return base diff --git a/tests/sandbox/test_exposed_ports.py b/tests/sandbox/test_exposed_ports.py index a33e83b7a1..e87f987bd9 100644 --- a/tests/sandbox/test_exposed_ports.py +++ b/tests/sandbox/test_exposed_ports.py @@ -28,6 +28,18 @@ def test_exposed_port_endpoint_with_query() -> None: assert endpoint.url_for("ws") == "wss://preview.example.com/?bl_preview_token=abc123" +def test_exposed_port_endpoint_accepts_leading_question_mark_query() -> None: + endpoint = ExposedPortEndpoint( + host="preview.example.com", + port=443, + tls=True, + query="?bl_preview_token=abc123", + ) + + assert endpoint.url_for("http") == "https://preview.example.com/?bl_preview_token=abc123" + assert endpoint.url_for("ws") == "wss://preview.example.com/?bl_preview_token=abc123" + + def test_exposed_port_endpoint_empty_query() -> None: endpoint = ExposedPortEndpoint(host="127.0.0.1", port=8080, tls=False, query="") assert endpoint.url_for("http") == "http://127.0.0.1:8080/"