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 ("\n Goodbye." )
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
257273func splitArgs (s string ) []string {
0 commit comments