Files
2026-07-13 13:00:08 +08:00

48 lines
1.1 KiB
Go

package skill
import (
"fmt"
"sync"
"reasonix/internal/skill/builtincontent"
)
var (
embeddedOnce sync.Once
embeddedSkills []Skill
embeddedErr error
)
// loadEmbeddedBuiltins returns skills compiled into the binary via go:embed.
// Failures are sticky for the process so a corrupt embed fails loudly once.
func loadEmbeddedBuiltins() []Skill {
embeddedOnce.Do(func() {
items, err := builtincontent.All()
if err != nil {
embeddedErr = err
return
}
out := make([]Skill, 0, len(items))
for _, item := range items {
out = append(out, skillFromEmbedded(item))
}
embeddedSkills = out
})
if embeddedErr != nil {
// Panic in development/tests; production binaries always ship valid embeds.
panic(fmt.Sprintf("embedded builtin skills: %v", embeddedErr))
}
return append([]Skill(nil), embeddedSkills...)
}
func skillFromEmbedded(item builtincontent.SkillMarkdown) Skill {
return Skill{
Name: item.Name,
Description: item.Description,
Body: item.Body,
Scope: ScopeBuiltin,
Path: "(builtin:" + item.Path + ")",
RunAs: parseRunAs(item.RunAs, item.Context, item.Agent),
}
}