package main import ( "git.yeij.top/AskaEth/Cyrene_v2/internal/capability/skills" "git.yeij.top/AskaEth/Cyrene_v2/internal/logger" ) // defaultSkillsDir 是技能 YAML 定义的磁盘目录。它是可选的:目录缺失时只告警并 // 跳过技能加载。 const defaultSkillsDir = "configs/skills" // wireSkills 从 configs/skills 加载技能定义,并把每个技能以 KindSkill 能力注册进 // 能力注册表,供插件生态枚举。加载+注册是 M5 的交付物;Runner.Run(端到端执行 // 技能)**已实现**(切片 CODE-SK/L2:`Runner.Run` 真执行 + 渐进披露接线;哨兵 `ErrRunPending` 已删除)。 func (a *app) wireSkills() { log := logger.WithSource(a.log, "cmd/cyrene") list, err := skills.NewLoader(a.log).LoadDir(defaultSkillsDir) if err != nil { log.Warn("skills load skipped", "dir", defaultSkillsDir, "error", err) return } if len(list) == 0 { log.Debug("no skills defined", "dir", defaultSkillsDir) return } registered := 0 for _, s := range list { if err := skills.Register(a.caps, s); err != nil { log.Warn("skill register skipped", "skill", s.Name(), "error", err) continue } registered++ } log.Info("skills registered", "registered", registered, "loaded", len(list)) }