From e8b6a843f73cd359f9178cfb01341b2a12caff6d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 20:51:01 +0000 Subject: [PATCH 1/3] Initial plan From 971794a3257224d3684616edc5adb78e3c7140b9 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 20:53:32 +0000 Subject: [PATCH 2/3] Add auto-open browser functionality with -no-open flag Co-authored-by: alexec <1142830+alexec@users.noreply.github.com> --- main.go | 35 +++++++++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/main.go b/main.go index e4ae3f6..1925f05 100644 --- a/main.go +++ b/main.go @@ -3,13 +3,30 @@ package main import ( "flag" "fmt" + "net" "net/http" "os" + "os/exec" + "runtime" ) +func openBrowser(url string) error { + var cmd *exec.Cmd + switch runtime.GOOS { + case "darwin": + cmd = exec.Command("open", url) + case "windows": + cmd = exec.Command("rundll32", "url.dll,FileProtocolHandler", url) + default: + cmd = exec.Command("xdg-open", url) + } + return cmd.Start() +} + func main() { port := flag.String("p", "3844", "Port to listen on") workspaceDir := flag.String("C", ".", "Directory to scan for git repositories") + noOpen := flag.Bool("no-open", false, "Disable auto-opening browser") flag.Parse() if err := os.Chdir(*workspaceDir); err != nil { @@ -19,8 +36,22 @@ func main() { http.HandleFunc("/", diffsHandler) - fmt.Printf("Starting server on http://localhost:%s\n", *port) - if err := http.ListenAndServe(":"+*port, nil); err != nil { + listener, err := net.Listen("tcp", ":"+*port) + if err != nil { + fmt.Fprintf(os.Stderr, "Server failed: %v\n", err) + os.Exit(1) + } + + url := fmt.Sprintf("http://localhost:%s", *port) + fmt.Printf("Starting server on %s\n", url) + + if !*noOpen { + if err := openBrowser(url); err != nil { + fmt.Fprintf(os.Stderr, "Failed to open browser: %v\n", err) + } + } + + if err := http.Serve(listener, nil); err != nil { fmt.Fprintf(os.Stderr, "Server failed: %v\n", err) os.Exit(1) } From d39b30b954fe3955f947010813cc4f7cdfae8813 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 12 Aug 2026 20:56:40 +0000 Subject: [PATCH 3/3] Use pkg/browser library and rename flag to -B Co-authored-by: alexec <1142830+alexec@users.noreply.github.com> --- go.mod | 5 +++++ go.sum | 4 ++++ main.go | 23 +++++------------------ 3 files changed, 14 insertions(+), 18 deletions(-) create mode 100644 go.sum diff --git a/go.mod b/go.mod index d7f2731..536e447 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,8 @@ module github.com/kitproj/diff-server go 1.24.4 + +require ( + github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect + golang.org/x/sys v0.1.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..7513caf --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= +github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= +golang.org/x/sys v0.1.0 h1:kunALQeHf1/185U1i0GOB/fy1IPRDDpuoOOqRReG57U= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/main.go b/main.go index 1925f05..54d23fa 100644 --- a/main.go +++ b/main.go @@ -6,27 +6,14 @@ import ( "net" "net/http" "os" - "os/exec" - "runtime" -) -func openBrowser(url string) error { - var cmd *exec.Cmd - switch runtime.GOOS { - case "darwin": - cmd = exec.Command("open", url) - case "windows": - cmd = exec.Command("rundll32", "url.dll,FileProtocolHandler", url) - default: - cmd = exec.Command("xdg-open", url) - } - return cmd.Start() -} + "github.com/pkg/browser" +) func main() { port := flag.String("p", "3844", "Port to listen on") workspaceDir := flag.String("C", ".", "Directory to scan for git repositories") - noOpen := flag.Bool("no-open", false, "Disable auto-opening browser") + noBrowser := flag.Bool("B", false, "Disable auto-opening browser") flag.Parse() if err := os.Chdir(*workspaceDir); err != nil { @@ -45,8 +32,8 @@ func main() { url := fmt.Sprintf("http://localhost:%s", *port) fmt.Printf("Starting server on %s\n", url) - if !*noOpen { - if err := openBrowser(url); err != nil { + if !*noBrowser { + if err := browser.OpenURL(url); err != nil { fmt.Fprintf(os.Stderr, "Failed to open browser: %v\n", err) } }