package main import ( "flag" "fmt" "os" "cursor-api-proxy/internal/config" "cursor-api-proxy/internal/handler" "cursor-api-proxy/internal/svc" cmd "cursor-api-proxy/cmd/cli" "github.com/zeromicro/go-zero/core/conf" "github.com/zeromicro/go-zero/rest" ) const version = "1.0.0" var configFile = flag.String("f", "etc/chat-api.yaml", "the config file") func main() { // Check for CLI commands first (before flag.Parse) args := os.Args[1:] if len(args) > 0 { parsed, err := cmd.ParseArgs(args) if err != nil { // Not a CLI command, proceed to HTTP server } else if handleCLICommand(parsed) { return } } // HTTP server mode (go-zero) flag.Parse() var c config.Config conf.MustLoad(*configFile, &c) server := rest.MustNewServer(c.RestConf) defer server.Stop() ctx := svc.NewServiceContext(c) handler.RegisterHandlers(server, ctx) fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port) server.Start() } func handleCLICommand(args cmd.ParsedArgs) bool { if args.Help { cmd.PrintHelp(version) return true } if args.Login { if err := cmd.HandleLogin(args.AccountName, args.Proxies); err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } return true } if args.Logout { if err := cmd.HandleLogout(args.AccountName); err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } return true } if args.AccountsList { if err := cmd.HandleAccountsList(); err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } return true } if args.ResetHwid { if err := cmd.HandleResetHwid(args.DeepClean, args.DryRun); err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } return true } // Not a CLI command return false }