]> git.giacomolli.uk - onechat/blobdiff - main.go
Keep retries after a rejected pair request
[onechat] / main.go
diff --git a/main.go b/main.go
index a561c3755c8b19860a4665762adaf2b2e9f38fd2..04b06770977eac566ca0599a0766f4864b095bbb 100644 (file)
--- a/main.go
+++ b/main.go
@@ -9,6 +9,19 @@ import (
        "syscall"
 )
 
+// usage is the help text of the command.
+const usage = `Usage: onechat [COMMAND]
+
+Commands:
+  chat                     talk to the agent in this terminal (default)
+  daemon                   run the agent, Telegram, and WhatsApp
+  login                    log in to ChatGPT with a device code
+  probe LOG COUNT [BUILDS] measure the compactor on a log, with real calls
+  help                     show this help
+
+Chat needs a running daemon. ONECHAT_DIR sets the data directory.
+`
+
 func main() {
        err := run()
        if err != nil {
@@ -23,23 +36,29 @@ func run() error {
 
        args := os.Args[1:]
        switch {
-       case len(args) == 0:
-               _, err := fmt.Println("onechat")
+       case len(args) == 1 && (args[0] == "help" || args[0] == "--help" || args[0] == "-h"):
+               _, err := fmt.Print(usage)
                if err != nil {
                        return err
                }
        case len(args) == 1 && args[0] == "login":
-               err := login(ctx, os.Stdout)
+               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] == "probe":
                err := probe(ctx, args[1:], os.Stdout)
                if err != nil {
                        return err
                }
        default:
-               return fmt.Errorf("unknown command %q", strings.Join(args, " "))
+               return fmt.Errorf("unknown command %q\n\n%s", strings.Join(args, " "), strings.TrimSuffix(usage, "\n"))
        }
 
        return ctx.Err()