+// Command onechat runs the agent daemon and its terminal client.
package main
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
+ 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 {
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
+ 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) == 1 && args[0] == "chat":
+ 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", strings.Join(args, " "))
+ return fmt.Errorf("unknown command %q\n\n%s", strings.Join(args, " "), strings.TrimSuffix(usage, "\n"))
}
return ctx.Err()