fc86edd94c
- .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>
210 lines
7.4 KiB
Bash
Executable File
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 ""
|