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}