Files
agents_and_robots/dev-scripts/agent/delete-full.sh
T
egutierrez fc86edd94c chore: auto-commit (27 archivos)
- .claude/CLAUDE.md
- .claude/rules/create_agent.md
- agents/_specials/father-bot/prompts/system.md
- agents/_template/config.yaml
- agents/_template_robot/config.yaml
- cmd/agentctl/autoavatar.go
- cmd/launcher/sqlite.go
- dev-scripts/_common.sh
- dev-scripts/agent/create-full.sh
- dev-scripts/agent/delete-full.sh
- ...

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 19:38:16 +02:00

210 lines
7.4 KiB
Bash
Executable File

#!/usr/bin/env bash
# delete-full.sh — pipeline completo para eliminar un agente o robot
#
# Revierte todo lo que create-full.sh genera:
# 1. VALIDATE → verificar que el agente existe
# 2. STOP → detener el proceso si esta corriendo
# 3. DEACTIVATE → desactivar usuario Matrix (Synapse admin API)
# 4. REMOVE IMPORT → eliminar blank import del launcher
# 5. REMOVE ENV VARS → eliminar las 4 env vars del .env
# 6. DELETE FILES → borrar directorio del agente + runtime files
# 7. REBUILD → recompilar el launcher
#
# Uso:
# ./dev-scripts/agent/delete-full.sh <agent-id> # con confirmacion
# ./dev-scripts/agent/delete-full.sh <agent-id> --force # sin confirmacion
# ./dev-scripts/agent/delete-full.sh <agent-id> --keep-matrix # preserva usuario Matrix
# ./dev-scripts/agent/delete-full.sh <agent-id> --force --keep-matrix
#
# Requiere en .env:
# MATRIX_ADMIN_TOKEN, MATRIX_HOMESERVER, MATRIX_SERVER_NAME (para desactivar Matrix)
source "$(dirname "$0")/../_common.sh"
load_env
need_arg "${1:-}"
ID="$1"
NORM="$(normalize_id "$ID")"
SCRIPT_DIR="$(dirname "$0")"
FORCE=false
KEEP_MATRIX=false
# Parse flags
shift
while [[ $# -gt 0 ]]; do
case "$1" in
--force|-f)
FORCE=true
shift
;;
--keep-matrix)
KEEP_MATRIX=true
shift
;;
*)
warn "Flag desconocido: $1"
shift
;;
esac
done
TOTAL_STEPS=7
echo ""
echo -e "${RED}═══════════════════════════════════════════════════════${RST}"
echo -e "${RED} Eliminando agente: ${GRN}$ID${RST}"
echo -e "${RED}═══════════════════════════════════════════════════════${RST}"
echo ""
# ── Paso 1: Validar existencia ──────────────────────────────────────────────
info "Paso 1/${TOTAL_STEPS} — Validando existencia..."
AGENT_DIR=""
CFG_PATH=""
# Buscar en agents/ y agents/_specials/
if [[ -d "agents/$ID" ]]; then
AGENT_DIR="agents/$ID"
CFG_PATH="agents/$ID/config.yaml"
elif [[ -d "agents/_specials/$ID" ]]; then
AGENT_DIR="agents/_specials/$ID"
CFG_PATH="agents/_specials/$ID/config.yaml"
else
fail "Agente '$ID' no encontrado en agents/ ni agents/_specials/"
fi
# Leer info del agente para mostrar al usuario
AGENT_DESC=""
AGENT_TYPE="agent"
if [[ -f "$CFG_PATH" ]]; then
AGENT_DESC=$(grep -m1 'description:' "$CFG_PATH" | cut -d'"' -f2 || true)
TYPE_LINE=$(grep -m1 'type:' "$CFG_PATH" | awk '{print $2}' || true)
if [[ -n "${TYPE_LINE:-}" ]]; then
AGENT_TYPE="$TYPE_LINE"
fi
fi
ok "Agente $ID encontrado en $AGENT_DIR/"
dim " Tipo: $AGENT_TYPE"
if [[ -n "$AGENT_DESC" ]]; then dim " Descripcion: $AGENT_DESC"; fi
echo ""
# ── Confirmacion interactiva ────────────────────────────────────────────────
if [[ "$FORCE" != true ]]; then
echo -e "${YLW}ATENCION: Esta accion es irreversible.${RST}"
echo -e "Se eliminaran:"
echo -e " - Directorio ${AGENT_DIR}/ (codigo, config, datos, crypto)"
if [[ "$KEEP_MATRIX" != true ]]; then
echo -e " - Usuario Matrix @${ID}:${MATRIX_SERVER_NAME:-<server>}"
fi
echo -e " - Variables de entorno en .env"
echo -e " - Import en cmd/launcher/main.go"
echo ""
read -rp "Escribir '$ID' para confirmar: " CONFIRM
if [[ "$CONFIRM" != "$ID" ]]; then
fail "Eliminacion cancelada"
fi
echo ""
fi
# ── Paso 2: Detener proceso ─────────────────────────────────────────────────
info "Paso 2/${TOTAL_STEPS} — Deteniendo proceso..."
PIDS="$(find_agent_pids "$ID")"
if [[ -n "$PIDS" ]]; then
echo "$PIDS" | while read -r pid; do
kill "$pid" 2>/dev/null && ok "Proceso $pid detenido" || warn "No se pudo detener proceso $pid"
done
# Esperar a que terminen
sleep 1
else
dim " No hay procesos corriendo para $ID"
fi
# Limpiar PID file
rm -f "$(pid_file "$ID")" 2>/dev/null
echo ""
# ── Paso 3: Desactivar usuario Matrix ───────────────────────────────────────
info "Paso 3/${TOTAL_STEPS} — Desactivando usuario Matrix..."
if [[ "$KEEP_MATRIX" == true ]]; then
dim " --keep-matrix: usuario Matrix preservado"
else
if [[ -n "${MATRIX_ADMIN_TOKEN:-}" && -n "${MATRIX_HOMESERVER:-}" && -n "${MATRIX_SERVER_NAME:-}" ]]; then
"$SCRIPT_DIR/deactivate-matrix.sh" "$ID" || warn "No se pudo desactivar usuario Matrix (continuando)"
else
warn "Faltan variables de Matrix en .env — usuario no desactivado"
fi
fi
echo ""
# ── Paso 4: Eliminar import del launcher ────────────────────────────────────
info "Paso 4/${TOTAL_STEPS} — Eliminando import del launcher..."
"$SCRIPT_DIR/remove-launcher-import.sh" "$ID"
echo ""
# ── Paso 5: Eliminar variables de entorno ────────────────────────────────────
info "Paso 5/${TOTAL_STEPS} — Eliminando variables de entorno..."
"$SCRIPT_DIR/remove-env-vars.sh" "$ID"
echo ""
# ── Paso 6: Eliminar archivos ───────────────────────────────────────────────
info "Paso 6/${TOTAL_STEPS} — Eliminando archivos..."
# Directorio del agente
if [[ -d "$AGENT_DIR" ]]; then
rm -rf "$AGENT_DIR"
ok "$AGENT_DIR/ eliminado"
fi
# Runtime files
for f in "run/${ID}.pid" "run/${ID}.log"; do
if [[ -f "$f" ]]; then
rm -f "$f"
ok "$f eliminado"
fi
done
# Log directory
if [[ -d "logs/$ID" ]]; then
rm -rf "logs/$ID"
ok "logs/$ID/ eliminado"
fi
echo ""
# ── Paso 7: Recompilar ─────────────────────────────────────────────────────
info "Paso 7/${TOTAL_STEPS} — Recompilando..."
if $GO build -tags goolm ./... 2>&1; then
ok "Compilacion exitosa"
else
fail "Error de compilacion — revisa cmd/launcher/main.go manualmente"
fi
echo ""
# ── Resumen ─────────────────────────────────────────────────────────────────
echo -e "${GRN}═══════════════════════════════════════════════════════${RST}"
echo -e "${GRN} ✓ Agente $ID eliminado completamente${RST}"
echo -e "${GRN}═══════════════════════════════════════════════════════${RST}"
echo ""
echo -e " ${BLU}Eliminado:${RST}"
echo -e " $AGENT_DIR/"
echo -e " cmd/launcher/main.go (import)"
echo -e " .env (MATRIX_TOKEN_${NORM}, MATRIX_PASSWORD_${NORM}, PICKLE_KEY_${NORM}, SSSS_RECOVERY_KEY_${NORM})"
if [[ "$KEEP_MATRIX" != true ]]; then
echo -e " @${ID}:${MATRIX_SERVER_NAME:-<server>} (usuario Matrix desactivado)"
else
echo -e " ${YLW}Usuario Matrix preservado (--keep-matrix)${RST}"
fi
echo ""