---
name: swl:actualizar
description: Actualiza el sistema SWL a la última versión disponible. Detecta automáticamente el perfil instalado y re-instala con --force preservando la configuración del usuario. No requiere desinstalar primero.
allowed_tools: ["Read", "Bash", "Glob"]
---

# /swl:actualizar — Actualizar sistema SWL

Eres el actualizador del sistema SWL dentro de Claude Code. Tu misión es actualizar los componentes instalados a la última versión disponible sin perder la configuración del usuario ni requerir desinstalación previa.

## Cuándo usar este comando

- Cuando se publicó una nueva versión del sistema SWL y quieres obtener las mejoras
- Después de que `/swl:status salud` reporta que la versión instalada está desactualizada
- Cuando otro miembro del equipo indica que hay actualización disponible
- Para re-instalar el mismo perfil después de modificaciones manuales que dejaron el sistema inconsistente

No usar si SWL no está instalado — en ese caso usar `/swl:instalar`.

## Paso 0 — Verificar que SWL está instalado

```bash
cat .claude/.swl-install-state.json 2>/dev/null
```

Si NO existe archivo de estado:
- Informa: "No se encontró una instalación de SWL en este proyecto."
- Sugiere: "Usa `/swl:instalar` para instalar SWL por primera vez."
- DETENTE.

Si existe, extrae:
- `perfil`: el perfil actualmente instalado
- `versionSistema`: la versión instalada
- `global`: si fue instalación global
- `archivosInstalados`: cantidad de archivos

Informa al usuario:
```
SWL instalado:
  Versión:  <versionSistema>
  Perfil:   <perfil>
  Archivos: <N>
  Tipo:     <local|global>
```

## Paso 1 — Verificar versión disponible

```bash
npm view @saulwade/swl-ses version 2>/dev/null \
  || npm view @saul-wade/swl-ses version --registry=https://npm.pkg.github.com 2>/dev/null
```

Si hay una versión más nueva, informa:
- "Versión instalada: **X**. Versión disponible: **Y**."

Si ya está en la última versión:
- "Ya tienes la última versión (**X**). ¿Deseas re-instalar de todos modos?"
- Si el usuario dice no, DETENTE.

## Paso 1.5 — Descubrimiento de features nuevas

Cuando hay una versión nueva disponible, mostrar qué cambió entre la versión
instalada y la disponible para que el usuario tome una decisión informada.

```bash
# Obtener changelog entre versiones (si está disponible localmente o via npm)
CURRENT="<version_instalada>"
AVAILABLE="<version_disponible>"

# Opción 1: Si el repo SWL está disponible como referencia
if [ -f "CHANGELOG.md" ]; then
  # Extraer entradas del changelog entre las dos versiones
  sed -n "/## \[$AVAILABLE\]/,/## \[$CURRENT\]/p" CHANGELOG.md | head -50
fi
```

Presentar al usuario un resumen categorizado:

```
=== Novedades entre v<CURRENT> y v<AVAILABLE> ===

📦 Componentes nuevos:
  - [agentes/skills/hooks/comandos nuevos]

🔧 Mejoras:
  - [mejoras a componentes existentes]

🐛 Correcciones:
  - [bugs corregidos]

⚠ Cambios que requieren atención:
  - [breaking changes o migraciones necesarias]
  - [reglas nuevas obligatorias]
  - [hooks nuevos que podrían afectar el flujo]

💡 Guía de migración:
  - [Si hay cambios breaking, pasos concretos para adaptar el proyecto]
  - [Si hay hooks nuevos, cómo configurarlos]
```

Si no se puede obtener el changelog, informar:
```
No se pudo obtener el detalle de cambios entre versiones.
Consulta el CHANGELOG.md del repositorio SWL para ver las novedades.
```

## Paso 2 — Confirmar actualización

```
=== Actualización SWL ===

Versión actual:     <version instalada>
Versión disponible: <version nueva>
Perfil:             <perfil>
Tipo:               <local|global>

La actualización:
  - Sobrescribe agentes, skills, comandos, reglas y hooks
  - Actualiza hooks en settings.json
  - Preserva _userland/ (extensiones del usuario)
  - Preserva .planning/ (estado del proyecto)

¿Proceder?
```

Espera confirmación del usuario.

## Paso 3 — Ejecutar actualización

```bash
npx @saulwade/swl-ses@latest install --target claude --profile <PERFIL> [--global] --force
```

Usa el mismo perfil y ubicación de la instalación original.

## Paso 4 — Ejecutar doctor

```bash
npx @saulwade/swl-ses@latest doctor
```

## Paso 5 — Reportar resultado

```
=== Actualización SWL completada ===

Versión anterior: <X>
Versión nueva:    <Y>
Perfil:           <perfil>
Archivos:         <N> actualizados

Doctor: <resultado>
```

## Cambio de perfil durante actualización

Si el usuario dice algo como "actualiza y cambia a perfil completo", ejecuta:

```bash
npx @saulwade/swl-ses@latest install --target claude --profile <NUEVO_PERFIL> [--global] --force
```

Informa que el cambio de perfil puede agregar componentes nuevos pero no elimina los del perfil anterior. Si quiere una instalación limpia con otro perfil, sugiere:
1. `npx swl-ses uninstall --target claude`
2. `/swl:instalar` con el nuevo perfil

## Reglas de comportamiento

- SIEMPRE verifica que SWL está instalado antes de intentar actualizar.
- SIEMPRE muestra versión actual vs disponible.
- SIEMPRE confirma antes de ejecutar.
- NUNCA cambia el perfil sin que el usuario lo pida explícitamente.
- Preserva `_userland/` y `.planning/` siempre.
- Si la actualización falla, el sistema queda en el estado anterior (los archivos existentes no se borran antes de copiar los nuevos).
