feat: pipeline completo de eliminacion de agentes y robots
Nuevos scripts que revierten todo lo que create-full.sh genera: - deactivate-matrix.sh: desactiva usuario via Synapse admin API - remove-launcher-import.sh: elimina blank import del launcher - remove-env-vars.sh: limpia las 4 env vars del .env - delete-full.sh: orquestador de 7 pasos (validate, stop, deactivate, remove import, remove env, delete files, rebuild) Flags: --force (sin confirmacion), --keep-matrix (preserva usuario). Actualiza remove.sh con referencia a delete-full.sh. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Executable
+207
@@ -0,0 +1,207 @@
|
||||
#!/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)
|
||||
TYPE_LINE=$(grep -m1 'type:' "$CFG_PATH" | awk '{print $2}')
|
||||
[[ -n "$TYPE_LINE" ]] && AGENT_TYPE="$TYPE_LINE"
|
||||
fi
|
||||
|
||||
ok "Agente $ID encontrado en $AGENT_DIR/"
|
||||
dim " Tipo: $AGENT_TYPE"
|
||||
[[ -n "$AGENT_DESC" ]] && dim " Descripcion: $AGENT_DESC"
|
||||
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 ""
|
||||
Reference in New Issue
Block a user