diff --git a/agents/commands.go b/agents/commands.go index 0064f1b..bd3ab5d 100644 --- a/agents/commands.go +++ b/agents/commands.go @@ -144,15 +144,116 @@ func (a *Agent) cmdStatus(_ context.Context, _ decision.MessageContext) string { return b.String() } -// cmdInfo shows agent name, version, and description. +// cmdInfo shows agent metadata, personality, capabilities, and configuration. func (a *Agent) cmdInfo(_ context.Context, _ decision.MessageContext) string { var b strings.Builder + + // === Identidad === + b.WriteString("## Identidad\n\n") fmt.Fprintf(&b, "- **Nombre:** %s\n", a.cfg.Agent.Name) - fmt.Fprintf(&b, "- **ID:** %s\n", a.cfg.Agent.ID) + fmt.Fprintf(&b, "- **ID:** `%s`\n", a.cfg.Agent.ID) if a.cfg.Agent.Version != "" { fmt.Fprintf(&b, "- **Version:** %s\n", a.cfg.Agent.Version) } fmt.Fprintf(&b, "- **Descripcion:** %s\n", a.cfg.Agent.Description) + if len(a.cfg.Agent.Tags) > 0 { + fmt.Fprintf(&b, "- **Tags:** %v\n", a.cfg.Agent.Tags) + } + + // === Personalidad === + if a.personality.Role != "" || a.personality.Communication.Personality != "" { + b.WriteString("\n## Personalidad\n\n") + if a.personality.Role != "" { + fmt.Fprintf(&b, "- **Rol:** %s\n", a.personality.Role) + } + if a.personality.Tone != "" { + fmt.Fprintf(&b, "- **Tono:** %s\n", a.personality.Tone) + } + if a.personality.Communication.Formality != "" { + fmt.Fprintf(&b, "- **Formalidad:** %s\n", a.personality.Communication.Formality) + } + if a.personality.Communication.Personality != "" { + fmt.Fprintf(&b, "- **Tipo:** %s\n", a.personality.Communication.Personality) + } + if a.personality.Communication.Humor != "" && a.personality.Communication.Humor != "none" { + fmt.Fprintf(&b, "- **Humor:** %s\n", a.personality.Communication.Humor) + } + } + + // === LLM === + if a.cfg.LLM.Primary.Provider != "" { + b.WriteString("\n## LLM\n\n") + fmt.Fprintf(&b, "- **Provider:** %s\n", a.cfg.LLM.Primary.Provider) + fmt.Fprintf(&b, "- **Modelo:** %s\n", a.cfg.LLM.Primary.Model) + if a.cfg.LLM.ToolUse.Enabled { + fmt.Fprintf(&b, "- **Tools:** habilitadas (max %d iteraciones)\n", a.cfg.LLM.ToolUse.MaxIterations) + } + } + + // === Tools === + toolCount := a.toolReg.Len() + if toolCount > 0 { + b.WriteString("\n## Tools disponibles\n\n") + fmt.Fprintf(&b, "- **Total:** %d tools\n", toolCount) + // Lista de tools (nombres) + toolNames := a.toolReg.Names() + if len(toolNames) > 0 && len(toolNames) <= 20 { + b.WriteString("- **Lista:** ") + for i, name := range toolNames { + if i > 0 { + b.WriteString(", ") + } + fmt.Fprintf(&b, "`%s`", name) + } + b.WriteString("\n") + } + } + + // === Skills === + if a.cfg.Skills.Enabled { + b.WriteString("\n## Skills\n\n") + b.WriteString("- **Habilitadas:** si\n") + if len(a.cfg.Skills.Categories) > 0 { + fmt.Fprintf(&b, "- **Categorias:** %v\n", a.cfg.Skills.Categories) + } + if a.skillLoader != nil { + if metas, err := a.skillLoader.LoadMeta(); err == nil { + fmt.Fprintf(&b, "- **Cantidad:** %d skills\n", len(metas)) + } + } + } + + // === Knowledge === + hasPrivate := a.cfg.Tools.Knowledge.Enabled + hasShared := a.cfg.Tools.SharedKnowledge.Enabled + if hasPrivate || hasShared { + b.WriteString("\n## Knowledge\n\n") + if hasPrivate { + b.WriteString("- **Privado:** habilitado\n") + } + if hasShared { + b.WriteString("- **Compartido:** habilitado\n") + } + } + + // === Memoria === + if a.cfg.Memory.Enabled { + b.WriteString("\n## Memoria\n\n") + fmt.Fprintf(&b, "- **Habilitada:** si\n") + fmt.Fprintf(&b, "- **Window size:** %d mensajes\n", a.windowSize) + } + + // === Schedules === + if len(a.cfg.Schedules) > 0 { + b.WriteString("\n## Schedules\n\n") + fmt.Fprintf(&b, "- **Cron jobs:** %d configurados\n", len(a.cfg.Schedules)) + } + + // === Uptime === + uptime := time.Since(a.startTime).Round(time.Second) + b.WriteString("\n## Uptime\n\n") + fmt.Fprintf(&b, "- **Activo desde:** %s\n", uptime) + return b.String() }