Refactor connection logic for Windows and hash calculationfix(cli): fix windows daemon startup and port calculation inconsistency (#79)

This commit is contained in:
0okay
2026-01-18 09:14:03 -06:00
committed by GitHub
parent 1689cf9eca
commit d02ef66c89
+7 -8
View File
@@ -104,7 +104,9 @@ fn get_port_for_session(session: &str) -> u16 {
for c in session.chars() { for c in session.chars() {
hash = ((hash << 5).wrapping_sub(hash)).wrapping_add(c as i32); hash = ((hash << 5).wrapping_sub(hash)).wrapping_add(c as i32);
} }
49152 + ((hash.abs() as u16) % 16383) // Correct logic: first take absolute modulo, then cast to u16
// Using unsigned_abs() to safely handle i32::MIN
49152 + ((hash.unsigned_abs() as u32 % 16383) as u16)
} }
#[cfg(unix)] #[cfg(unix)]
@@ -235,13 +237,10 @@ pub fn ensure_daemon(
{ {
use std::os::windows::process::CommandExt; use std::os::windows::process::CommandExt;
// On Windows, use cmd.exe to run node to ensure proper PATH resolution. // On Windows, call node directly. Command::new handles PATH resolution (node.exe or node.cmd)
// This handles cases where node.exe isn't directly in PATH but node.cmd is. // and automatically quotes arguments containing spaces.
// Pass the entire command as a single string to /c to handle paths with spaces. let mut cmd = Command::new("node");
let cmd_string = format!("node \"{}\"", daemon_path.display()); cmd.arg(daemon_path)
let mut cmd = Command::new("cmd");
cmd.arg("/c")
.arg(&cmd_string)
.env("AGENT_BROWSER_DAEMON", "1") .env("AGENT_BROWSER_DAEMON", "1")
.env("AGENT_BROWSER_SESSION", session); .env("AGENT_BROWSER_SESSION", session);