Skip to content

Commit ded778f

Browse files
fix: batch D — main.go CLI bugs (BUG-03,04,20,22,23)
1 parent 4fd25bb commit ded778f

1 file changed

Lines changed: 36 additions & 20 deletions

File tree

cmd/bridge/main.go

Lines changed: 36 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"io"
88
"log"
99
"os"
10+
"strings"
1011

1112
"github.com/DeliciousBuding/codex-browser-bridge/internal/client"
1213
"github.com/DeliciousBuding/codex-browser-bridge/internal/discovery"
@@ -30,19 +31,28 @@ func main() {
3031

3132
// If BRIDGE_DEBUG_LOG is set, also tee logs to that file
3233
if debugPath := os.Getenv("BRIDGE_DEBUG_LOG"); debugPath != "" {
33-
if f, err := os.OpenFile(debugPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644); err == nil {
34+
f, err := os.OpenFile(debugPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
35+
if err == nil {
3436
logger = log.New(io.MultiWriter(os.Stderr, f), "[codex-bridge] ", log.LstdFlags)
3537
defer func() { _ = f.Close() }()
38+
} else {
39+
fmt.Fprintf(os.Stderr, "Warning: BRIDGE_DEBUG_LOG=%s but failed to open: %v\n", debugPath, err)
3640
}
3741
}
3842

3943
switch *mode {
4044
case "discover":
4145
runDiscover()
4246
case "mcp":
43-
runMCP(*pipe, logger)
47+
if err := runMCP(*pipe, logger); err != nil {
48+
fmt.Fprintf(os.Stderr, "MCP error: %v\n", err)
49+
os.Exit(1)
50+
}
4451
case "cli":
45-
runCLI(*pipe, logger)
52+
if err := runCLI(*pipe, logger); err != nil {
53+
fmt.Fprintf(os.Stderr, "CLI error: %v\n", err)
54+
os.Exit(1)
55+
}
4656
default:
4757
fmt.Fprintf(os.Stderr, "Unknown mode: %s\n", *mode)
4858
os.Exit(1)
@@ -63,13 +73,11 @@ func runDiscover() {
6373
fmt.Println(string(data))
6474
}
6575

66-
func runMCP(pipeName string, logger *log.Logger) {
76+
func runMCP(pipeName string, logger *log.Logger) error {
6777
logger.Println("runMCP starting, discovering pipes...")
6878
c, err := client.Connect(pipeName, logger)
6979
if err != nil {
70-
logger.Printf("Failed to connect: %v", err)
71-
fmt.Fprintf(os.Stderr, "Failed to connect: %v\n", err)
72-
os.Exit(1)
80+
return fmt.Errorf("failed to connect: %w", err)
7381
}
7482
defer func() { _ = c.Close() }()
7583

@@ -78,18 +86,16 @@ func runMCP(pipeName string, logger *log.Logger) {
7886
srv := mcp.NewMCPServer(c)
7987
srv.SetVersion(version)
8088
if err := srv.Run(); err != nil {
81-
logger.Printf("MCP server error: %v", err)
82-
fmt.Fprintf(os.Stderr, "MCP server error: %v\n", err)
83-
os.Exit(1)
89+
return fmt.Errorf("MCP server error: %w", err)
8490
}
8591
logger.Println("MCP server exited normally")
92+
return nil
8693
}
8794

88-
func runCLI(pipeName string, logger *log.Logger) {
95+
func runCLI(pipeName string, logger *log.Logger) error {
8996
c, err := client.Connect(pipeName, logger)
9097
if err != nil {
91-
fmt.Fprintf(os.Stderr, "Failed to connect: %v\n", err)
92-
os.Exit(1)
98+
return fmt.Errorf("failed to connect: %w", err)
9399
}
94100
defer func() { _ = c.Close() }()
95101

@@ -100,12 +106,19 @@ func runCLI(pipeName string, logger *log.Logger) {
100106
scanner := newScanner()
101107
for {
102108
fmt.Print("> ")
103-
line := scanner.nextLine()
109+
line, ok := scanner.nextLine()
110+
if !ok {
111+
fmt.Println("\nGoodbye.")
112+
return nil
113+
}
104114
if line == "" {
105115
continue
106116
}
107117

108118
args := splitArgs(line)
119+
if len(args) == 0 {
120+
continue
121+
}
109122
cmd := args[0]
110123

111124
switch cmd {
@@ -209,8 +222,8 @@ func runCLI(pipeName string, logger *log.Logger) {
209222
// Everything after "try method " is the JSON params
210223
method := args[1]
211224
var params map[string]interface{}
212-
if len(line) > len("try ")+len(method)+1 {
213-
jsonStr := line[len("try ")+len(method)+1:]
225+
if len(args) > 2 {
226+
jsonStr := strings.Join(args[2:], " ")
214227
if err := json.Unmarshal([]byte(jsonStr), &params); err != nil {
215228
fmt.Printf("Invalid JSON params: %v\n", err)
216229
continue
@@ -223,7 +236,7 @@ func runCLI(pipeName string, logger *log.Logger) {
223236
fmt.Println(string(raw))
224237
}
225238
case "quit", "exit":
226-
return
239+
return nil
227240
default:
228241
fmt.Printf("Unknown command: %s\n", cmd)
229242
}
@@ -236,13 +249,16 @@ func newScanner() *scanner {
236249
return &scanner{}
237250
}
238251

239-
func (s *scanner) nextLine() string {
252+
func (s *scanner) nextLine() (string, bool) {
240253
var line []byte
241254
b := make([]byte, 1)
242255
for {
243256
n, err := os.Stdin.Read(b)
257+
if err == io.EOF {
258+
return "", false
259+
}
244260
if err != nil || n == 0 {
245-
return ""
261+
return "", false
246262
}
247263
if b[0] == '\n' {
248264
break
@@ -251,7 +267,7 @@ func (s *scanner) nextLine() string {
251267
line = append(line, b[0])
252268
}
253269
}
254-
return string(line)
270+
return string(line), true
255271
}
256272

257273
func splitArgs(s string) []string {

0 commit comments

Comments
 (0)