add context to the prompt

Kujtim Hoxha created

Change summary

internal/llm/prompt/prompt.go | 46 +++++++++++++++++++++++++++++++++---
1 file changed, 42 insertions(+), 4 deletions(-)

Detailed changes

internal/llm/prompt/prompt.go 🔗

@@ -1,19 +1,57 @@
 package prompt
 
 import (
+	"fmt"
+	"os"
+	"path/filepath"
+
 	"github.com/kujtimiihoxha/opencode/internal/config"
 	"github.com/kujtimiihoxha/opencode/internal/llm/models"
 )
 
+// contextFiles is a list of potential context files to check for
+var contextFiles = []string{
+	".github/copilot-instructions.md",
+	".cursorrules",
+	"CLAUDE.md",
+	"opencode.md",
+	"OpenCode.md",
+}
+
 func GetAgentPrompt(agentName config.AgentName, provider models.ModelProvider) string {
+	basePrompt := ""
 	switch agentName {
 	case config.AgentCoder:
-		return CoderPrompt(provider)
+		basePrompt = CoderPrompt(provider)
 	case config.AgentTitle:
-		return TitlePrompt(provider)
+		basePrompt = TitlePrompt(provider)
 	case config.AgentTask:
-		return TaskPrompt(provider)
+		basePrompt = TaskPrompt(provider)
 	default:
-		return "You are a helpful assistant"
+		basePrompt = "You are a helpful assistant"
 	}
+
+	// Add context from project-specific instruction files if they exist
+	contextContent := getContextFromFiles()
+	if contextContent != "" {
+		return fmt.Sprintf("%s\n\n# Project-Specific Context\n%s", basePrompt, contextContent)
+	}
+
+	return basePrompt
+}
+
+// getContextFromFiles checks for the existence of context files and returns their content
+func getContextFromFiles() string {
+	workDir := config.WorkingDirectory()
+	var contextContent string
+
+	for _, file := range contextFiles {
+		filePath := filepath.Join(workDir, file)
+		content, err := os.ReadFile(filePath)
+		if err == nil {
+			contextContent += fmt.Sprintf("\n%s\n", string(content))
+		}
+	}
+
+	return contextContent
 }