From 06523d8c1e23acbd82c62964f0b7959a75dfdb0c Mon Sep 17 00:00:00 2001 From: Nikesh Parajuli <47485043+nikeshparajuli@users.noreply.github.com> Date: Tue, 25 Nov 2025 00:39:56 -0500 Subject: [PATCH] feat: add platform-specific process attributes support (#411) Fixes issues on Windows showing new windows for every process llama-swap spawns. --- proxy/process.go | 2 ++ proxy/process_unix.go | 12 ++++++++++++ proxy/process_windows.go | 16 ++++++++++++++++ 3 files changed, 30 insertions(+) create mode 100644 proxy/process_unix.go create mode 100644 proxy/process_windows.go diff --git a/proxy/process.go b/proxy/process.go index 91bfbd44..2c05f943 100644 --- a/proxy/process.go +++ b/proxy/process.go @@ -256,6 +256,7 @@ func (p *Process) start() error { p.cmd.Env = append(p.cmd.Environ(), p.config.Env...) p.cmd.Cancel = p.cmdStopUpstreamProcess p.cmd.WaitDelay = p.gracefulStopTimeout + setProcAttributes(p.cmd) p.cmdMutex.Lock() p.cancelUpstream = ctxCancelUpstream @@ -625,6 +626,7 @@ func (p *Process) cmdStopUpstreamProcess() error { stopCmd := exec.Command(stopArgs[0], stopArgs[1:]...) stopCmd.Stdout = p.processLogger stopCmd.Stderr = p.processLogger + setProcAttributes(stopCmd) stopCmd.Env = p.cmd.Env if err := stopCmd.Run(); err != nil { diff --git a/proxy/process_unix.go b/proxy/process_unix.go new file mode 100644 index 00000000..3e8d5d75 --- /dev/null +++ b/proxy/process_unix.go @@ -0,0 +1,12 @@ +//go:build !windows + +package proxy + +import ( + "os/exec" +) + +// setProcAttributes sets platform-specific process attributes +func setProcAttributes(cmd *exec.Cmd) { + // No-op on Unix systems +} diff --git a/proxy/process_windows.go b/proxy/process_windows.go new file mode 100644 index 00000000..28a988bb --- /dev/null +++ b/proxy/process_windows.go @@ -0,0 +1,16 @@ +//go:build windows + +package proxy + +import ( + "os/exec" + "syscall" +) + +// setProcAttributes sets platform-specific process attributes +func setProcAttributes(cmd *exec.Cmd) { + cmd.SysProcAttr = &syscall.SysProcAttr{ + HideWindow: true, + CreationFlags: 0x08000000, // CREATE_NO_WINDOW + } +}