Fix relay URL derivation stripping existing port before appending :8765

http://10.10.20.70:3000 was becoming ws://10.10.20.70:3000:8765 instead
of ws://10.10.20.70:8765. Extract hostname only via urlparse.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
monoadmin
2026-04-10 16:32:19 -07:00
parent e16a2fa978
commit e808112aa4
2 changed files with 19 additions and 4 deletions

View File

@@ -358,6 +358,23 @@ class Agent:
self._stop_event.set() self._stop_event.set()
# ── Helpers ───────────────────────────────────────────────────────────────────
def _default_relay_url(server_url: str) -> str:
"""Derive the relay WebSocket URL from a server HTTP URL.
Strips any existing port, swaps the scheme, and appends :8765.
e.g. http://10.10.20.70:3000 → ws://10.10.20.70:8765
https://remotelink.example.com → wss://remotelink.example.com:8765
"""
from urllib.parse import urlparse, urlunparse
parsed = urlparse(server_url)
ws_scheme = "wss" if parsed.scheme == "https" else "ws"
# netloc may include a port — strip it, use only the hostname
host = parsed.hostname
return f"{ws_scheme}://{host}:8765"
# ── Entry point ─────────────────────────────────────────────────────────────── # ── Entry point ───────────────────────────────────────────────────────────────
def setup_logging(verbose: bool): def setup_logging(verbose: bool):
@@ -396,7 +413,7 @@ async def main():
sys.exit(1) sys.exit(1)
log.info(f"Enrolling with server {args.server}") log.info(f"Enrolling with server {args.server}")
reg = await register(args.server, args.enroll) reg = await register(args.server, args.enroll)
relay_url = args.relay or args.server.replace("https://", "ws://").replace("http://", "ws://") + ":8765" relay_url = args.relay or _default_relay_url(args.server)
config = { config = {
"server_url": args.server, "server_url": args.server,
"relay_url": relay_url, "relay_url": relay_url,
@@ -414,9 +431,7 @@ async def main():
sys.exit(1) sys.exit(1)
server_url = config["server_url"] server_url = config["server_url"]
relay_url = config.get("relay_url") or ( relay_url = config.get("relay_url") or _default_relay_url(server_url)
server_url.replace("https://", "ws://").replace("http://", "ws://") + ":8765"
)
machine_id = config["machine_id"] machine_id = config["machine_id"]
access_key = config["access_key"] access_key = config["access_key"]