diff options
| author | Kujtim Hoxha <[email protected]> | 2025-04-20 16:52:36 +0200 |
|---|---|---|
| committer | Kujtim Hoxha <[email protected]> | 2025-04-21 13:42:29 +0200 |
| commit | c40e68496d4ed5a7db47879376dec293a9e82856 (patch) | |
| tree | 1a5fdba60c69495831578f2f63f498f71f98a034 /internal | |
| parent | 8e160488ff1aa29f6b2cb601145e9f3ff5410d07 (diff) | |
| download | opencode-c40e68496d4ed5a7db47879376dec293a9e82856.tar.gz opencode-c40e68496d4ed5a7db47879376dec293a9e82856.zip | |
add context to the prompt
Diffstat (limited to 'internal')
| -rw-r--r-- | internal/llm/prompt/prompt.go | 46 |
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 } |
