@@ -4,6 +4,7 @@ import (
"fmt"
"os"
"path/filepath"
+ "strings"
"github.com/opencode-ai/opencode/internal/config"
"github.com/opencode-ai/opencode/internal/llm/models"
@@ -13,6 +14,7 @@ import (
var contextFiles = []string{
".github/copilot-instructions.md",
".cursorrules",
+ ".cursor/rules/", // Directory containing multiple rule files
"CLAUDE.md",
"CLAUDE.local.md",
"opencode.md",
@@ -51,11 +53,30 @@ 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))
+ for _, path := range contextFiles {
+ // Check if path ends with a slash (indicating a directory)
+ if strings.HasSuffix(path, "/") {
+ // Handle directory - read all files within it
+ dirPath := filepath.Join(workDir, path)
+ files, err := os.ReadDir(dirPath)
+ if err == nil {
+ for _, file := range files {
+ if !file.IsDir() {
+ filePath := filepath.Join(dirPath, file.Name())
+ content, err := os.ReadFile(filePath)
+ if err == nil {
+ contextContent += fmt.Sprintf("\n# From %s\n%s\n", file.Name(), string(content))
+ }
+ }
+ }
+ }
+ } else {
+ // Handle individual file as before
+ filePath := filepath.Join(workDir, path)
+ content, err := os.ReadFile(filePath)
+ if err == nil {
+ contextContent += fmt.Sprintf("\n%s\n", string(content))
+ }
}
}