mirror of
https://github.com/charmbracelet/crush.git
synced 2025-08-02 05:20:46 +03:00
59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"strings"
|
|
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var runCmd = &cobra.Command{
|
|
Use: "run [prompt...]",
|
|
Short: "Run a single non-interactive prompt",
|
|
Long: `Run a single prompt in non-interactive mode and exit.
|
|
The prompt can be provided as arguments or piped from stdin.`,
|
|
Example: `
|
|
# Run a simple prompt
|
|
crush run Explain the use of context in Go
|
|
|
|
# Pipe input from stdin
|
|
echo "What is this code doing?" | crush run
|
|
|
|
# Run with quiet mode (no spinner)
|
|
crush run -q "Generate a README for this project"
|
|
`,
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
quiet, _ := cmd.Flags().GetBool("quiet")
|
|
|
|
app, err := setupApp(cmd)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer app.Shutdown()
|
|
|
|
if !app.Config().IsConfigured() {
|
|
return fmt.Errorf("no providers configured - please run 'crush' to set up a provider interactively")
|
|
}
|
|
|
|
prompt := strings.Join(args, " ")
|
|
|
|
prompt, err = MaybePrependStdin(prompt)
|
|
if err != nil {
|
|
slog.Error("Failed to read from stdin", "error", err)
|
|
return err
|
|
}
|
|
|
|
if prompt == "" {
|
|
return fmt.Errorf("no prompt provided")
|
|
}
|
|
|
|
// Run non-interactive flow using the App method
|
|
return app.RunNonInteractive(cmd.Context(), prompt, quiet)
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
runCmd.Flags().BoolP("quiet", "q", false, "Hide spinner")
|
|
}
|