package cmd import ( "os" "fmt" "github.com/spf13/cobra" "gmgauthier.com/grokkit/config" "gmgauthier.com/grokkit/internal/logger" "gmgauthier.com/grokkit/internal/version" ) var rootCmd = &cobra.Command{ Use: "grokkit", Short: "Personal Grok / xAI command-line toolkit", Long: `A fast, native Go CLI for Grok. Chat, edit files, and supercharge your git workflow.`, PersistentPreRun: func(cmd *cobra.Command, args []string) { config.Load() // Determine log level: flag > config > default logLevel := config.GetLogLevel() if debug, _ := cmd.Flags().GetBool("debug"); debug { logLevel = "debug" } if verbose, _ := cmd.Flags().GetBool("verbose"); verbose { logLevel = "info" } _ = logger.Init(logLevel) // Logging is optional, don't fail if it errors logger.Info("grokkit starting", "command", cmd.Name(), "log_level", logLevel) }, } func Execute() { if err := rootCmd.Execute(); err != nil { os.Exit(1) } } var versionCmd = &cobra.Command{ Use: "version", Short: "Print the version information", Run: func(cmd *cobra.Command, args []string) { fmt.Printf("grokkit version %s (commit %s)\\n", version.Version, version.Commit) }, } func init() { rootCmd.AddCommand(chatCmd) rootCmd.AddCommand(editCmd) rootCmd.AddCommand(reviewCmd) rootCmd.AddCommand(commitMsgCmd) rootCmd.AddCommand(commitCmd) rootCmd.AddCommand(prDescribeCmd) rootCmd.AddCommand(historyCmd) rootCmd.AddCommand(agentCmd) rootCmd.AddCommand(completionCmd) rootCmd.AddCommand(versionCmd) rootCmd.AddCommand(docsCmd) rootCmd.AddCommand(testgenCmd) rootCmd.AddCommand(scaffoldCmd) rootCmd.AddCommand(queryCmd) // Add model flag to all commands rootCmd.PersistentFlags().StringP("model", "m", "", "Grok model to use (overrides config)") // Add logging flags rootCmd.PersistentFlags().Bool("debug", false, "Enable debug logging (logs to stderr and file)") rootCmd.PersistentFlags().BoolP("verbose", "v", false, "Enable verbose logging") }