+ args := os.Args[1:]
+ switch {
+ case len(args) == 1 && (args[0] == "help" || args[0] == "--help" || args[0] == "-h"):
+ _, err := fmt.Print(usage)
+ if err != nil {
+ return fmt.Errorf("write command help: %w", 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) == 0 || len(args) == 1 && args[0] == "chat":
+ return terminal(ctx, os.Stdin, os.Stdout)
+ case len(args) > 0 && args[0] == "import":
+ return whatsappImport(ctx, args[1:], 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\n\n%s", strings.Join(args, " "), strings.TrimSuffix(usage, "\n"))