Skip to content

Commit 899dc14

Browse files
committed
feat: implement prompt folder management and default data handling
- Add a `promptFolder` variable and configure it with a command line flag - Add logic to initialize and create the `promptFolder` if it does not exist - Add a new `promptCmd` command to handle loading default prompt data - Implement functionality to load and save default prompt data templates - Add a `GetRawData` function to retrieve raw data of templates by name Signed-off-by: Bo-Yi Wu <[email protected]>
1 parent 0122019 commit 899dc14

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

cmd/cmd.go

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ var rootCmd = &cobra.Command{
2121

2222
// Used for flags.
2323
var (
24-
cfgFile string
25-
replacer = strings.NewReplacer("-", "_", ".", "_")
24+
cfgFile string
25+
promptFolder string
26+
replacer = strings.NewReplacer("-", "_", ".", "_")
2627
)
2728

2829
const (
@@ -34,12 +35,14 @@ func init() {
3435
cobra.OnInitialize(initConfig)
3536

3637
rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is $HOME/.config/codegpt/.codegpt.yaml)")
38+
rootCmd.PersistentFlags().StringVar(&promptFolder, "prompt_folder", "", "prompt folder (default is $HOME/.config/codegpt/prompt)")
3739
rootCmd.AddCommand(versionCmd)
3840
rootCmd.AddCommand(configCmd)
3941
rootCmd.AddCommand(commitCmd)
4042
rootCmd.AddCommand(hookCmd)
4143
rootCmd.AddCommand(reviewCmd)
4244
rootCmd.AddCommand(CompletionCmd)
45+
rootCmd.AddCommand(promptCmd)
4346

4447
// hide completion command
4548
rootCmd.CompletionOptions.HiddenDefaultCmd = true
@@ -75,6 +78,30 @@ func initConfig() {
7578
}
7679
}
7780

81+
if promptFolder != "" {
82+
viper.Set("prompt_folder", promptFolder)
83+
if file.IsFile(promptFolder) {
84+
log.Fatalf("prompt folder %s is a file", promptFolder)
85+
}
86+
// create the prompt folder if it doesn't exist
87+
if !file.IsDir(promptFolder) {
88+
if err := os.MkdirAll(promptFolder, os.ModePerm); err != nil {
89+
log.Fatal(err)
90+
}
91+
}
92+
} else {
93+
// Find home directory.
94+
home, err := os.UserHomeDir()
95+
cobra.CheckErr(err)
96+
targetFolder := path.Join(home, ".config", "codegpt", "prompt")
97+
if !file.IsDir(targetFolder) {
98+
if err := os.MkdirAll(targetFolder, os.ModePerm); err != nil {
99+
log.Fatal(err)
100+
}
101+
}
102+
viper.Set("prompt_folder", targetFolder)
103+
}
104+
78105
viper.AutomaticEnv()
79106
viper.SetEnvKeyReplacer(replacer)
80107

cmd/prompt.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package cmd
2+
3+
import (
4+
"os"
5+
"path"
6+
7+
"github.com/appleboy/CodeGPT/prompt"
8+
"github.com/erikgeiser/promptkit/confirmation"
9+
"github.com/fatih/color"
10+
"github.com/spf13/cobra"
11+
"github.com/spf13/viper"
12+
)
13+
14+
var loadPromptData bool
15+
16+
func init() {
17+
promptCmd.PersistentFlags().BoolVar(&loadPromptData, "load", false,
18+
"load default prompt data")
19+
}
20+
21+
var defaultPromptDataKeys = []string{
22+
prompt.CodeReviewTemplate,
23+
prompt.SummarizeFileDiffTemplate,
24+
prompt.SummarizeTitleTemplate,
25+
prompt.ConventionalCommitTemplate,
26+
}
27+
28+
var promptCmd = &cobra.Command{
29+
Use: "prompt",
30+
Short: "load default prompt data",
31+
RunE: func(cmd *cobra.Command, args []string) error {
32+
if loadPromptData {
33+
change, err := confirmation.New("Do you want to load default prompt data, will overwrite your data", confirmation.No).RunPrompt()
34+
if err != nil || !change {
35+
return err
36+
}
37+
38+
folder := viper.GetString("prompt_folder")
39+
for _, key := range defaultPromptDataKeys {
40+
// load default prompt data
41+
out, err := prompt.GetRawData(key)
42+
if err != nil {
43+
return err
44+
}
45+
46+
// save out to file
47+
target := path.Join(folder, key)
48+
if err := os.WriteFile(target, out, 0o600); err != nil {
49+
return err
50+
}
51+
color.Cyan("save %s to %s", key, target)
52+
}
53+
54+
return nil
55+
}
56+
return nil
57+
},
58+
}

prompt/prompt.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,9 @@ func init() { //nolint:gochecknoinits
2828
log.Fatal(err)
2929
}
3030
}
31+
32+
// GetRawData returns the raw data of the template with the given name.
33+
func GetRawData(name string) ([]byte, error) {
34+
key := "templates/" + name
35+
return templatesFS.ReadFile(key)
36+
}

0 commit comments

Comments
 (0)