summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorKujtim Hoxha <[email protected]>2025-04-20 16:52:36 +0200
committerKujtim Hoxha <[email protected]>2025-04-21 13:42:29 +0200
commitc40e68496d4ed5a7db47879376dec293a9e82856 (patch)
tree1a5fdba60c69495831578f2f63f498f71f98a034
parent8e160488ff1aa29f6b2cb601145e9f3ff5410d07 (diff)
downloadopencode-c40e68496d4ed5a7db47879376dec293a9e82856.tar.gz
opencode-c40e68496d4ed5a7db47879376dec293a9e82856.zip
add context to the prompt
-rw-r--r--internal/llm/prompt/prompt.go46
1 files changed, 42 insertions, 4 deletions
diff --git a/internal/llm/prompt/prompt.go b/internal/llm/prompt/prompt.go
index cdc3560ce..cf4d9a7e7 100644
--- a/internal/llm/prompt/prompt.go
+++ b/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
}