93 lines
1.7 KiB
Go
93 lines
1.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"cliprepo/internal/config"
|
|
"cliprepo/internal/tree"
|
|
"cliprepo/internal/utils"
|
|
|
|
"github.com/spf13/cobra"
|
|
"github.com/atotto/clipboard"
|
|
)
|
|
|
|
var delineate string
|
|
var useClipboard bool
|
|
|
|
var runCmd = &cobra.Command{
|
|
Use: "run",
|
|
Short: "Generate LLM context from repo",
|
|
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
|
|
cfg, err := config.Load()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 1. tree
|
|
treeStr, err := tree.Generate(".")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
var builder strings.Builder
|
|
|
|
// builder.WriteString("===== PROJECT TREE =====\n")
|
|
builder.WriteString(treeStr)
|
|
builder.WriteString("\n\n")
|
|
|
|
// 2. preset files
|
|
rawFiles, ok := cfg.Preset[delineate]
|
|
if !ok {
|
|
return fmt.Errorf("preset not found: %s", delineate)
|
|
}
|
|
|
|
files, err := utils.ExpandGlob(rawFiles)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// 3. template
|
|
template := cfg.Prompts.Preset
|
|
|
|
for _, file := range files {
|
|
|
|
content, err := os.ReadFile(file)
|
|
if err != nil {
|
|
continue
|
|
}
|
|
|
|
path := file
|
|
if cfg.Config.PathMode == "absolute" {
|
|
abs, _ := filepath.Abs(file)
|
|
path = abs
|
|
}
|
|
|
|
block := strings.ReplaceAll(template, "{{path}}", path)
|
|
block = strings.ReplaceAll(block, "{{content}}", string(content))
|
|
|
|
builder.WriteString(block)
|
|
builder.WriteString("\n\n")
|
|
}
|
|
|
|
result := builder.String()
|
|
|
|
if useClipboard {
|
|
return clipboard.WriteAll(result)
|
|
}
|
|
|
|
fmt.Println(result)
|
|
return nil
|
|
},
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(runCmd)
|
|
|
|
runCmd.Flags().StringVar(&delineate, "delineate", "", "preset key")
|
|
runCmd.Flags().BoolVar(&useClipboard, "clipboard", false, "copy output to clipboard")
|
|
} |