feat: opción Restart en TUI dashboard de agentes

Añade botón "Restart" en el menú de acciones de agente en la TUI.
Ejecuta stop + start del launcher unificado para aplicar cambios
de configuración sin salir del dashboard. Incluye intent nuevo
IntentRestartAgent y su implementación en el adapter impuro.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-07 15:46:23 +00:00
parent f193f8d5ea
commit 525425a81c
3 changed files with 23 additions and 0 deletions
+2
View File
@@ -89,11 +89,13 @@ func ServerMenuOptions(running bool) []MenuOption {
func AgentActionOptions(enabled bool) []MenuOption {
if enabled {
return []MenuOption{
{Label: "Restart", Desc: "Reiniciar launcher para aplicar cambios"},
{Label: "Disable", Desc: "Desactivar agente (requiere restart)"},
{Label: "Logs", Desc: "Ver log del launcher"},
}
}
return []MenuOption{
{Label: "Restart", Desc: "Reiniciar launcher para aplicar cambios"},
{Label: "Enable", Desc: "Activar agente (requiere restart)"},
{Label: "Logs", Desc: "Ver log del launcher"},
}
+6
View File
@@ -14,6 +14,7 @@ const (
// Agent-level
IntentEnableAgent IntentKind = "enable_agent"
IntentDisableAgent IntentKind = "disable_agent"
IntentRestartAgent IntentKind = "restart_agent"
// Unified launcher operations
IntentStartLauncher IntentKind = "start_launcher"
@@ -69,6 +70,8 @@ func Update(model Model, msg interface{}) (Model, []Intent) {
case MsgActionDone:
if m.Err != nil {
model.StatusMsg = fmt.Sprintf("Error: %s %s: %v", m.Action, m.AgentID, m.Err)
} else if m.Action == "Restart" {
model.StatusMsg = fmt.Sprintf("Restart OK — all agents reloaded")
} else {
model.StatusMsg = fmt.Sprintf("%s %s OK — restart launcher to apply", m.Action, m.AgentID)
}
@@ -229,6 +232,9 @@ func executeAction(model Model, action string) (Model, []Intent) {
case "Disable":
model.StatusMsg = "Disabling " + id + "..."
return model, []Intent{{Kind: IntentDisableAgent, AgentID: id}}
case "Restart":
model.StatusMsg = "Restarting launcher (all agents)..."
return model, []Intent{{Kind: IntentRestartAgent, AgentID: id}}
case "Logs":
model.Screen = ScreenLogs
model.LogLines = nil