package cmd import ( "fmt" "os/exec" "github.com/fatih/color" "github.com/spf13/cobra" "gmgauthier.com/grokkit/config" "gmgauthier.com/grokkit/internal/git" "gmgauthier.com/grokkit/internal/grok" ) var commitCmd = &cobra.Command{ Use: "commit", Short: "Generate message and commit staged changes", Run: func(cmd *cobra.Command, args []string) { diff, err := git.Run([]string{"diff", "--cached", "--no-color"}) if err != nil { color.Red("Failed to get staged changes: %v", err) return } if diff == "" { color.Yellow("No staged changes!") return } modelFlag, _ := cmd.Flags().GetString("model") model := config.GetModel("commit", modelFlag) client := grok.NewClient() messages := []map[string]string{ {"role": "system", "content": "Return ONLY a conventional commit message (type(scope): subject\n\nbody)."}, {"role": "user", "content": fmt.Sprintf("Staged changes:\n%s", diff)}, } color.Yellow("Generating commit message...") msg := client.Stream(messages, model) color.Cyan("\nProposed commit message:\n%s", msg) var confirm string color.Yellow("Commit with this message? (y/n): ") if _, err := fmt.Scanln(&confirm); err != nil { color.Red("Failed to read input: %v", err) return } if confirm != "y" && confirm != "Y" { color.Yellow("Aborted.") return } if err := exec.Command("git", "commit", "-m", msg).Run(); err != nil { color.Red("Git commit failed") } else { color.Green("✅ Committed successfully!") } }, }