prompt.go

 1package prompt
 2
 3import (
 4	"fmt"
 5	"os"
 6	"path/filepath"
 7
 8	"github.com/kujtimiihoxha/opencode/internal/config"
 9	"github.com/kujtimiihoxha/opencode/internal/llm/models"
10)
11
12// contextFiles is a list of potential context files to check for
13var contextFiles = []string{
14	".github/copilot-instructions.md",
15	".cursorrules",
16	"CLAUDE.md",
17	"opencode.md",
18	"OpenCode.md",
19}
20
21func GetAgentPrompt(agentName config.AgentName, provider models.ModelProvider) string {
22	basePrompt := ""
23	switch agentName {
24	case config.AgentCoder:
25		basePrompt = CoderPrompt(provider)
26	case config.AgentTitle:
27		basePrompt = TitlePrompt(provider)
28	case config.AgentTask:
29		basePrompt = TaskPrompt(provider)
30	default:
31		basePrompt = "You are a helpful assistant"
32	}
33
34	// Add context from project-specific instruction files if they exist
35	contextContent := getContextFromFiles()
36	if contextContent != "" {
37		return fmt.Sprintf("%s\n\n# Project-Specific Context\n%s", basePrompt, contextContent)
38	}
39
40	return basePrompt
41}
42
43// getContextFromFiles checks for the existence of context files and returns their content
44func getContextFromFiles() string {
45	workDir := config.WorkingDirectory()
46	var contextContent string
47
48	for _, file := range contextFiles {
49		filePath := filepath.Join(workDir, file)
50		content, err := os.ReadFile(filePath)
51		if err == nil {
52			contextContent += fmt.Sprintf("\n%s\n", string(content))
53		}
54	}
55
56	return contextContent
57}