feat: integrar skills en runtime de agentes
Integrar sistema de skills en agents/runtime.go: - Agregar skillLoader al struct Agent - Inicializar loader y executor cuando skills.enabled = true - Registrar skill tools en buildToolRegistry - Respetar filtro de categorias configurado - Aplicar timeout configurado para scripts Las skills quedan disponibles automaticamente para agentes que las habiliten en su config YAML. Arquitectura: skills como extension opcional, no dependencia core.
This commit is contained in:
+40
-1
@@ -31,6 +31,7 @@ import (
|
||||
"github.com/enmanuel/agents/shell/matrix"
|
||||
shellmcp "github.com/enmanuel/agents/shell/mcp"
|
||||
shellmem "github.com/enmanuel/agents/shell/memory"
|
||||
shellskills "github.com/enmanuel/agents/shell/skills"
|
||||
"github.com/enmanuel/agents/shell/ssh"
|
||||
"github.com/enmanuel/agents/tools"
|
||||
toolclock "github.com/enmanuel/agents/tools/clock"
|
||||
@@ -40,6 +41,7 @@ import (
|
||||
toolmatrix "github.com/enmanuel/agents/tools/matrix"
|
||||
toolmcp "github.com/enmanuel/agents/tools/mcptools"
|
||||
toolmemory "github.com/enmanuel/agents/tools/memorytools"
|
||||
toolskills "github.com/enmanuel/agents/tools/skilltools"
|
||||
toolssh "github.com/enmanuel/agents/tools/ssh"
|
||||
toolweather "github.com/enmanuel/agents/tools/weather"
|
||||
)
|
||||
@@ -95,6 +97,9 @@ type Agent struct {
|
||||
// Shared knowledge store — non-nil when shared_knowledge is enabled
|
||||
sharedKnowledgeStore *shellknowledge.FileStore
|
||||
|
||||
// Skills loader — non-nil when skills are enabled
|
||||
skillLoader *shellskills.Loader
|
||||
|
||||
// Sanitization options — nil when sanitization is disabled
|
||||
sanitizeOpts *sanitize.Options
|
||||
|
||||
@@ -277,8 +282,28 @@ func New(cfg *config.AgentConfig, rules []decision.Rule, agentACL acl.ACL, logge
|
||||
}
|
||||
}
|
||||
|
||||
// Skills loader
|
||||
var skillLoader *shellskills.Loader
|
||||
var skillExecutor *shellskills.Executor
|
||||
if cfg.Skills.Enabled {
|
||||
skillsPath := cfg.Skills.SkillsPath
|
||||
if skillsPath == "" {
|
||||
skillsPath = "skills/"
|
||||
}
|
||||
skillLoader = shellskills.NewLoader(skillsPath)
|
||||
|
||||
// Skills executor for scripts
|
||||
allowedInterpreters := cfg.Tools.Skills.AllowedInterpreters
|
||||
timeout := cfg.Skills.Timeout
|
||||
if timeout == 0 {
|
||||
timeout = 60 * time.Second
|
||||
}
|
||||
skillExecutor = shellskills.NewExecutor(allowedInterpreters, timeout)
|
||||
logger.Info("skills enabled", "path", skillsPath, "categories", cfg.Skills.Categories)
|
||||
}
|
||||
|
||||
// Tool registry — register tools enabled in config
|
||||
toolReg := buildToolRegistry(cfg, sshExec, matrixClient, memStore, kStore, sharedKStore, mcpManager, roomCtx, logger)
|
||||
toolReg := buildToolRegistry(cfg, sshExec, matrixClient, memStore, kStore, sharedKStore, mcpManager, skillLoader, skillExecutor, roomCtx, logger)
|
||||
|
||||
// Rate limiting for tools
|
||||
if cfg.Security.ToolRateLimit.Enabled {
|
||||
@@ -322,6 +347,7 @@ func New(cfg *config.AgentConfig, rules []decision.Rule, agentACL acl.ACL, logge
|
||||
memStore: memStore,
|
||||
knowledgeStore: kStore,
|
||||
sharedKnowledgeStore: sharedKStore,
|
||||
skillLoader: skillLoader,
|
||||
windowSize: windowSize,
|
||||
roomCtx: roomCtx,
|
||||
}
|
||||
@@ -1031,6 +1057,8 @@ func buildToolRegistry(
|
||||
kStore *shellknowledge.FileStore,
|
||||
sharedKStore *shellknowledge.FileStore,
|
||||
mcpManager *shellmcp.Manager,
|
||||
skillLoader *shellskills.Loader,
|
||||
skillExecutor *shellskills.Executor,
|
||||
roomCtx *toolmemory.RoomContext,
|
||||
logger *slog.Logger,
|
||||
) *tools.Registry {
|
||||
@@ -1116,5 +1144,16 @@ func buildToolRegistry(
|
||||
}
|
||||
}
|
||||
|
||||
// Skills tools — register skill search, load, read, and run tools
|
||||
if skillLoader != nil {
|
||||
reg.Register(toolskills.NewSkillSearch(skillLoader, cfg.Skills.Categories))
|
||||
reg.Register(toolskills.NewSkillLoad(skillLoader))
|
||||
reg.Register(toolskills.NewSkillReadResource(skillLoader))
|
||||
if skillExecutor != nil {
|
||||
reg.Register(toolskills.NewSkillRunScript(skillLoader, skillExecutor))
|
||||
}
|
||||
logger.Debug("registered skills tools")
|
||||
}
|
||||
|
||||
return reg
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user