36 lines
820 B
Go
36 lines
820 B
Go
package skill
|
|
|
|
import (
|
|
"embed"
|
|
"fmt"
|
|
"io/fs"
|
|
)
|
|
|
|
//go:embed skills/*.md
|
|
var bundledFS embed.FS
|
|
|
|
// BundledSkills parses and returns all skills embedded in the binary.
|
|
func BundledSkills() ([]*Skill, error) {
|
|
entries, err := fs.ReadDir(bundledFS, "skills")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("skill: reading bundled skills: %w", err)
|
|
}
|
|
|
|
skills := make([]*Skill, 0, len(entries))
|
|
for _, entry := range entries {
|
|
if entry.IsDir() {
|
|
continue
|
|
}
|
|
data, err := bundledFS.ReadFile("skills/" + entry.Name())
|
|
if err != nil {
|
|
return nil, fmt.Errorf("skill: reading bundled file %q: %w", entry.Name(), err)
|
|
}
|
|
s, err := Parse(data, "bundled")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("skill: parsing bundled file %q: %w", entry.Name(), err)
|
|
}
|
|
skills = append(skills, s)
|
|
}
|
|
return skills, nil
|
|
}
|