@@ -1,19 +1,57 @@
1package prompt
1package prompt
4 "github.com/kujtimiihoxha/opencode/internal/config"
8 "github.com/kujtimiihoxha/opencode/internal/config"
5 "github.com/kujtimiihoxha/opencode/internal/llm/models"
9 "github.com/kujtimiihoxha/opencode/internal/llm/models"
12+// contextFiles is a list of potential context files to check for
13+var contextFiles = []string{
14+ ".github/copilot-instructions.md",
8func GetAgentPrompt(agentName config.AgentName, provider models.ModelProvider) string {
21func GetAgentPrompt(agentName config.AgentName, provider models.ModelProvider) string {
9 switch agentName {
23 switch agentName {
10 case config.AgentCoder:
24 case config.AgentCoder:
11− return CoderPrompt(provider)
25+ basePrompt = CoderPrompt(provider)
12 case config.AgentTitle:
26 case config.AgentTitle:
13− return TitlePrompt(provider)
27+ basePrompt = TitlePrompt(provider)
14 case config.AgentTask:
28 case config.AgentTask:
15− return TaskPrompt(provider)
29+ basePrompt = TaskPrompt(provider)
17− return "You are a helpful assistant"
31+ basePrompt = "You are a helpful assistant"
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)
43+// getContextFromFiles checks for the existence of context files and returns their content
44+func getContextFromFiles() string {
45+ workDir := config.WorkingDirectory()
46+ var contextContent string
48+ for _, file := range contextFiles {
49+ filePath := filepath.Join(workDir, file)
50+ content, err := os.ReadFile(filePath)
52+ contextContent += fmt.Sprintf("\n%s\n", string(content))
56+ return contextContent