X-Git-Url: https://git.giacomolli.uk/onechat/blobdiff_plain/d9fddc0f506eb4ead7049f5638674b2b8773fcaa..f5c601f1801aaa276f8c335fcb51c373edc0b50c:/main.go diff --git a/main.go b/main.go index e25e7f3..400538a 100644 --- a/main.go +++ b/main.go @@ -6,25 +6,9 @@ import ( "fmt" "os" "os/signal" - "strings" "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 - import [-n] ZIP... import WhatsApp history (stop the daemon first) - -n print the plan without model calls - 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 { @@ -37,34 +21,5 @@ func run() error { ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM) defer cancel() - 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")) - } - - return ctx.Err() + return parseCommand(ctx, os.Args[1:]) }