opencode-cursor-agent/main.go

91 lines
1.7 KiB
Go

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
}