X-Git-Url: http://git.giacomolli.uk/onechat/blobdiff_plain/80fa33c0fd65e4110f88f0cab9b19ca26c27d1f6..d50c22617aafed0d3d87bf4596e933b343a10b60:/main.go diff --git a/main.go b/main.go index 271a91a..f2c263d 100644 --- a/main.go +++ b/main.go @@ -5,6 +5,7 @@ import ( "fmt" "os" "os/signal" + "strings" "syscall" ) @@ -20,9 +21,31 @@ func run() error { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer cancel() - _, err := fmt.Println("onechat") - if err != nil { - return err + args := os.Args[1:] + switch { + case len(args) == 0: + _, err := fmt.Println("onechat") + if err != nil { + return err + } + case len(args) == 1 && args[0] == "login": + err := chatgptLogin(ctx, os.Stdout) + if err != nil { + return err + } + // A signal is the normal stop of the daemon and the client, so their + // result does not include ctx.Err(). + case len(args) == 1 && args[0] == "daemon": + return daemon(ctx, os.Stdout) + case len(args) == 1 && args[0] == "chat": + return terminal(ctx, os.Stdin, os.Stdout) + case len(args) > 0 && args[0] == "probe": + err := probe(ctx, args[1:], os.Stdout) + if err != nil { + return err + } + default: + return fmt.Errorf("unknown command %q", strings.Join(args, " ")) } return ctx.Err()