---
name: swl:sesiones
description: Gestiona el historial de sesiones SWL (listar, resumir, inspeccionar la sesión activa y generar continue-here.md desde cualquier sesión pasada)
allowed_tools: ["Read", "Write", "Bash", "Glob"]
---

# /swl:sesiones — Gestionar historial de sesiones SWL

Administra las sesiones de trabajo persistidas en `.planning/sessions/`.
Cada sesión registra tool calls, costo estimado, archivos modificados y agentes invocados.

## Uso

```
/swl:sesiones              — Lista las últimas 10 sesiones
/swl:sesiones list [N]     — Lista las últimas N sesiones
/swl:sesiones resume [id]  — Genera continue-here.md desde una sesión
/swl:sesiones inspect [id] — Muestra detalle completo de una sesión
/swl:sesiones active       — Muestra la sesión activa actual
/swl:sesiones wake [id]    — Reconstruye estado de sesión desde eventos JSONL (Managed Agents wake pattern)
```

## Comportamiento por subcomando

### list [N]

1. Leer todos los archivos `ses-*.json` en `.planning/sessions/`.
2. Ordenar por nombre de archivo descendente (el nombre encode el timestamp).
3. Aplicar límite: 10 por defecto, o el N proporcionado.
4. Mostrar tabla compacta:

```
| ID                  | Fecha      | Modo | Tool Calls | Costo  | Estado    |
|---------------------|------------|------|------------|--------|-----------|
| ses-20260331-143000 | 2026-03-31 | dev  | 47         | $1.87  | completed |
| ses-20260331-093000 | 2026-03-31 | dev  | 23         | $0.69  | completed |
```

Si `.planning/sessions/` no existe o está vacío, mostrar:
```
No hay sesiones registradas en .planning/sessions/
```

### resume [id]

1. Si no se proporciona `id`, usar la sesión de `.planning/sessions/latest.json`.
2. Si se proporciona `id`, buscar el archivo `ses-{id}.json` o `{id}.json` en `.planning/sessions/`.
3. Leer el objeto de sesión.
4. Construir el contenido del continue-here.md con esta estructura:

```markdown
# Continue Here — {id}

**Sesión**: {id}
**Inicio**: {startTime}
**Duración**: {N min | en progreso}
**Modo**: {mode}
**Tool calls**: {toolCalls}
**Costo estimado**: ${costEstimated} USD

## Archivos modificados
- ruta/archivo1
- ruta/archivo2

## Agentes invocados
- nombre-agente-1

## Herramientas más usadas
  - Bash: 21 llamadas
  - Read: 15 llamadas

## Resumen
{summary o "(sin resumen)"}
```

5. Escribir el contenido en `.planning/continue-here.md`.
6. Confirmar al usuario:
```
continue-here.md generado desde la sesión {id}.
Archivo: .planning/continue-here.md
```

### inspect [id]

1. Localizar el archivo de sesión igual que en `resume`.
2. Mostrar TODOS los campos del JSON con formato legible:

```
Sesión: ses-20260331-143000
Estado: completed
Inicio: 2026-03-31T14:30:00.000Z
Fin:    2026-03-31T16:45:00.000Z
Modo:   dev

Métricas generales:
  Tool calls:      47
  Tokens estimados: 23,500
  Costo estimado:  $1.87 USD

Herramientas:
  Bash    21
  Read    15
  Write    6
  Edit     3
  Grep     2

Modelos:
  claude-sonnet-4-6   47

Archivos modificados (6):
  hooks/lib/session-store.js
  comandos/swl/sesiones.md
  ...

Agentes invocados (2):
  planificador-swl
  backend-python-swl

Resumen:
  (sin resumen)
```

### active

1. Leer `.planning/sessions/latest.json` para obtener el ID de la sesión activa.
2. Leer el archivo de sesión correspondiente.
3. Mostrar las métricas en tiempo real con el mismo formato de `inspect`.
4. Si no hay sesión activa:
```
No hay sesión activa en este momento.
Para iniciar una nueva sesión, el sistema la crea automáticamente al primer tool call.
```

### wake [id]

Reconstruye el estado de una sesión desde su log de eventos JSONL en `.planning/runs/`.
Implementa el patrón `wake(sessionId)` de Managed Agents: permite retomar sesiones
interrumpidas sin recargar el contexto completo en la ventana del modelo.

1. Si no se proporciona `id`, usar el ID de la sesión activa en `latest.json`.
2. Buscar el archivo `.planning/runs/{id}.jsonl`.
3. Leer el módulo `hooks/lib/run-log.js` para acceder a `wakeSession(id)`.
4. Mostrar el estado reconstruido:

```
Sesión reconstruida: {id}
Estado: {active|completed|aborted|unknown}

Inicio:          {startTs}
Último evento:   {lastTs}
Tool calls:      {toolCalls}
Último tool:     {lastToolCall}
Abortada:        {sí|no}

Agentes invocados ({N}):
  - planificador-swl
  - implementador-swl

Skills cargados ({N}):
  - ejecutar-fase
  - git-workflow

Contexto disponible en: .planning/runs/{id}.jsonl
Para retomar: /swl:sesiones resume {id}
```

5. Si el archivo JSONL no existe pero sí existe `ses-{id}.json`, mostrar:
```
Run log no disponible para {id}. Usa /swl:sesiones inspect {id} para ver la sesión.
```

## Resolución de ID parcial

Cuando el usuario proporciona un ID parcial (ej: `143000` o `20260331`), buscar el
primer archivo `ses-*.json` cuyo nombre contenga ese fragmento. Si hay múltiples
coincidencias, listarlas y pedir al usuario que especifique.

## Datos persistidos por sesión

Cada archivo `ses-YYYYMMDD-HHmmss.json` contiene:

| Campo            | Tipo     | Descripción                                  |
|------------------|----------|----------------------------------------------|
| id               | string   | Identificador único de la sesión             |
| startTime        | string   | ISO timestamp de inicio                      |
| endTime          | string   | ISO timestamp de fin (null si activa)        |
| status           | string   | `active` o `completed`                       |
| mode             | string   | Modo activo (`dev`, `review`, `research`)    |
| toolCalls        | number   | Total de invocaciones de herramientas        |
| tokensEstimated  | number   | Suma de tokens estimados                     |
| costEstimated    | number   | Costo acumulado en USD                       |
| filesChanged     | string[] | Rutas de archivos modificados (deduplicados) |
| agentsInvoked    | string[] | Nombres de agentes invocados (deduplicados)  |
| summary          | string   | Resumen generado al cerrar la sesión         |
| metricas         | object   | `{ herramientas: {}, modelos: {} }`          |

## Directorio de sesiones

`.planning/sessions/` — creado automáticamente por `session-store.js`.
`latest.json` — puntero lógico a la sesión activa: `{ currentSession, path }`.
