From cfc429f5f4c5f61027ebb6eba31fa3952fdae564 Mon Sep 17 00:00:00 2001 From: Ollie Agent Date: Tue, 11 Aug 2026 11:24:10 +0200 Subject: [PATCH] fix: expand ~ in toolsrv CWD to prevent fork/exec ENOENT Shell doesn't expand ~ in programmatically-passed arguments, so toolsrv received literal ~/src/ollie as --cwd. Go's os/exec fails with ENOENT on chdir before exec, breaking all tool execution. Expand ~ at two boundaries: - main.go: immediately after flag parsing - proc.go SetCWD(): for runtime cwd changes via 9P --- cmd/toolsrv/internal/fs/proc.go | 3 ++- cmd/toolsrv/main.go | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/toolsrv/internal/fs/proc.go b/cmd/toolsrv/internal/fs/proc.go index 5be6dfc..afe8aea 100644 --- a/cmd/toolsrv/internal/fs/proc.go +++ b/cmd/toolsrv/internal/fs/proc.go @@ -18,6 +18,7 @@ import ( "ollie/cmd/toolsrv/internal/exec" "ollie/cmd/toolsrv/internal/registry" + "ollie/paths" "ollie/toolsrv" ) @@ -95,7 +96,7 @@ func (st *State) CWD() string { // SetCWD sets the current working directory. func (st *State) SetCWD(dir string) { st.mu.Lock() - st.cwd = dir + st.cwd = paths.ExpandHome(dir) st.mu.Unlock() } diff --git a/cmd/toolsrv/main.go b/cmd/toolsrv/main.go index 46ba3f2..a53d2fd 100644 --- a/cmd/toolsrv/main.go +++ b/cmd/toolsrv/main.go @@ -29,6 +29,7 @@ import ( "ollie/env" "ollie/fsedsl" olog "ollie/log" + "ollie/paths" ) var ( @@ -61,6 +62,9 @@ func main() { os.Exit(1) } + // Expand ~ in CWD (shell doesn't expand ~ in arguments). + *cwd = paths.ExpandHome(*cwd) + // Set up logger sink := olog.NewSink(os.Stdout, os.Stderr, olog.LevelInfo) defer sink.Flush()