Skip to content

Commit 6b613a2

Browse files
committed
Skip hidden directories in recursive skill loading
Return fs.SkipDir for hidden directories and symlinks instead of descending into them. This avoids walking large trees like .git, .node_modules, or .cache that can never contain skills. Assisted-By: cagent
1 parent 796af82 commit 6b613a2

1 file changed

Lines changed: 17 additions & 12 deletions

File tree

pkg/skills/skills.go

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ func loadSkillsFlat(dir string) []Skill {
194194

195195
var skills []Skill
196196
for _, entry := range entries {
197-
if !entry.IsDir() || isHiddenOrSymlink(entry) {
197+
if !entry.IsDir() || (isHidden(entry) || isSymlink(entry)) {
198198
continue
199199
}
200200

@@ -214,10 +214,18 @@ func loadSkillsRecursive(dir string) []Skill {
214214
var skills []Skill
215215

216216
_ = filepath.WalkDir(dir, func(path string, d fs.DirEntry, err error) error {
217-
if err != nil || d.IsDir() {
217+
if err != nil {
218218
return nil
219219
}
220-
if isHiddenOrSymlink(d) || d.Name() != skillFile {
220+
221+
if d.IsDir() {
222+
if path != dir && isHidden(d) {
223+
return fs.SkipDir
224+
}
225+
return nil
226+
}
227+
228+
if d.Name() != skillFile {
221229
return nil
222230
}
223231

@@ -277,17 +285,14 @@ func parseFrontmatter(content string) (Skill, bool) {
277285
return skill, true
278286
}
279287

280-
// isValidSkill validates skill constraints.
281288
func isValidSkill(skill Skill) bool {
282-
// Description and name is required
283-
if skill.Description == "" || skill.Name == "" {
284-
return false
285-
}
289+
return skill.Description != "" && skill.Name != ""
290+
}
286291

287-
return true
292+
func isHidden(entry fs.DirEntry) bool {
293+
return strings.HasPrefix(entry.Name(), ".")
288294
}
289295

290-
// isHiddenOrSymlink returns true for hidden files/dirs or symlinks.
291-
func isHiddenOrSymlink(entry fs.DirEntry) bool {
292-
return strings.HasPrefix(entry.Name(), ".") || entry.Type()&os.ModeSymlink != 0
296+
func isSymlink(entry fs.DirEntry) bool {
297+
return entry.Type()&os.ModeSymlink != 0
293298
}

0 commit comments

Comments
 (0)