@saulwade/swl-ses 2.5.3 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +192 -192
- package/README.md +600 -600
- package/agentes/auto-evolucion-swl.md +27 -3
- package/bin/swl-ses.js +32 -7
- package/comandos/swl/actualizar.md +174 -174
- package/comandos/swl/adoptar-proyecto.md +265 -265
- package/comandos/swl/aprender.md +836 -823
- package/comandos/swl/aprobar-plan.md +146 -146
- package/comandos/swl/auditar-deps.md +134 -134
- package/comandos/swl/autoresearch.md +264 -264
- package/comandos/swl/ayuda.md +224 -224
- package/comandos/swl/brainstorm.md +51 -51
- package/comandos/swl/briefing.md +119 -119
- package/comandos/swl/checkpoint.md +325 -325
- package/comandos/swl/claudemd.md +234 -234
- package/comandos/swl/compactar.md +310 -310
- package/comandos/swl/configurar-ci.md +235 -235
- package/comandos/swl/contexto.md +110 -110
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/crear-skill.md +292 -292
- package/comandos/swl/cron.md +194 -194
- package/comandos/swl/deuda-codigo.md +97 -97
- package/comandos/swl/discutir-fase.md +169 -169
- package/comandos/swl/ejecutar-fase.md +233 -233
- package/comandos/swl/evaluar-skill.md +520 -505
- package/comandos/swl/evolucion-continua.md +73 -0
- package/comandos/swl/evolucionar.md +267 -254
- package/comandos/swl/exportar-vault.md +583 -583
- package/comandos/swl/fix.md +118 -118
- package/comandos/swl/gateway.md +158 -158
- package/comandos/swl/inbox.md +116 -116
- package/comandos/swl/instalar.md +220 -220
- package/comandos/swl/instintos.md +86 -86
- package/comandos/swl/mapear-codebase.md +312 -312
- package/comandos/swl/mcp-status.md +175 -175
- package/comandos/swl/modelo.md +100 -100
- package/comandos/swl/nemesis.md +433 -433
- package/comandos/swl/notificaciones.md +299 -299
- package/comandos/swl/nuevo-proyecto.md +251 -251
- package/comandos/swl/planear-fase.md +263 -263
- package/comandos/swl/plugins.md +256 -256
- package/comandos/swl/predecir.md +169 -169
- package/comandos/swl/reflect-skills.md +125 -125
- package/comandos/swl/release.md +450 -450
- package/comandos/swl/revisar-impacto.md +201 -201
- package/comandos/swl/revisar.md +330 -330
- package/comandos/swl/seguridad.md +189 -189
- package/comandos/swl/sesiones.md +200 -200
- package/comandos/swl/skill-search.md +113 -113
- package/comandos/swl/status.md +343 -343
- package/comandos/swl/verificar.md +817 -817
- package/comandos/swl/wiki.md +620 -620
- package/gateway/cron/jobs.example.json +12 -0
- package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -276
- package/habilidades/autoresearch/SKILL.md +3 -2
- package/habilidades/benchmark-memoria/SKILL.md +7 -7
- package/habilidades/changelog-generator/SKILL.md +174 -174
- package/habilidades/changelog-generator/scripts/parse-commits.js +2 -1
- package/habilidades/checkpoints-verificacion/SKILL.md +6 -0
- package/habilidades/context-builder/SKILL.md +4 -0
- package/habilidades/doubt-driven-review/SKILL.md +207 -191
- package/habilidades/drift-detection/SKILL.md +6 -1
- package/habilidades/ejecutar-fase/SKILL.md +6 -6
- package/habilidades/eval-framework/SKILL.md +8 -3
- package/habilidades/harness-claude-code/SKILL.md +312 -308
- package/habilidades/infra-github-actions/SKILL.md +4 -3
- package/habilidades/instalar-sistema/SKILL.md +227 -223
- package/habilidades/memoria-busqueda/SKILL.md +31 -39
- package/habilidades/planear-fase/SKILL.md +358 -350
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +3 -2
- package/habilidades/swl-claudemd/SKILL.md +6 -7
- package/habilidades/swl-dashboard/SKILL.md +11 -43
- package/habilidades/tdd-workflow/SKILL.md +749 -744
- package/habilidades/validacion-ci-sistema/SKILL.md +1 -1
- package/hooks/agente-lifecycle.js +2 -1
- package/hooks/aiisms-detector.js +13 -4
- package/hooks/audit-trail.js +2 -1
- package/hooks/auto-consolidacion.js +2 -1
- package/hooks/captura-acciones-post.js +2 -1
- package/hooks/captura-acciones-session.js +2 -1
- package/hooks/captura-feedback-usuario.js +3 -2
- package/hooks/claudemd-bloat-detector.js +12 -3
- package/hooks/claudemd-duplicacion-detector.js +13 -3
- package/hooks/contexto-iteracion.js +2 -1
- package/hooks/degradacion-instintos.js +2 -1
- package/hooks/extraccion-aprendizajes.js +109 -15
- package/hooks/grafo-contexto.js +2 -1
- package/hooks/guardrail-modelo.js +2 -1
- package/hooks/inbox-aviso.js +2 -1
- package/hooks/inyeccion-contexto.js +2 -1
- package/hooks/lib/agent-matcher.js +2 -1
- package/hooks/lib/agent-routing.js +2 -1
- package/hooks/lib/autonomia.js +5 -3
- package/hooks/lib/captura-acciones.js +2 -1
- package/hooks/lib/consolidation-lock.js +21 -10
- package/hooks/lib/etapa-auto-evolucion.js +10 -4
- package/hooks/lib/etapa-metricas.js +2 -1
- package/hooks/lib/etapa-perfil-usuario.js +20 -4
- package/hooks/lib/evolution-tracker.js +2 -1
- package/hooks/lib/gateway-notify.js +193 -179
- package/hooks/lib/loop-telemetry.js +5 -4
- package/hooks/lib/mcp-health.js +2 -1
- package/hooks/lib/memory-search.js +4 -0
- package/hooks/lib/merkle-audit.js +58 -6
- package/hooks/lib/nudge-tracker.js +2 -1
- package/hooks/lib/otlp-exporter.js +2 -1
- package/hooks/lib/propose-step.js +3 -2
- package/hooks/lib/raiz-proyecto.js +102 -0
- package/hooks/lib/run-log.js +2 -1
- package/hooks/lib/singleton-guard.js +218 -27
- package/hooks/lib/telegram-cliente.js +17 -8
- package/hooks/preservar-estado-pre-compact.js +2 -1
- package/hooks/proteccion-rutas.js +59 -3
- package/hooks/registro-turnos.js +2 -1
- package/hooks/resumen-sesion.js +2 -1
- package/hooks/risk-scoring.js +2 -1
- package/hooks/rotar-audit-auto.js +46 -20
- package/hooks/session-briefing.js +127 -1
- package/hooks/spec-gate.js +2 -1
- package/hooks/sugerir-contribuir.js +6 -3
- package/hooks/sugerir-regenerar-inventario.js +3 -2
- package/hooks/tdd-gate.js +2 -1
- package/hooks/telemetria-agentes.js +2 -1
- package/hooks/telemetria-skill-routing.js +2 -1
- package/hooks/tracking-costos.js +4 -3
- package/hooks/validar-formato-post-subagente.js +2 -1
- package/hooks/validar-intent-spec.js +2 -1
- package/hooks/validar-memoria-hook.js +13 -3
- package/hooks/validar-planning-paths.js +2 -1
- package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +53 -0
- package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +372 -0
- package/instintos/perfil-usuario.yaml +506 -3
- package/instintos/proyecto.yaml +78 -0
- package/llms.txt +2 -2
- package/manifiestos/canonical-hashes.json +335 -3
- package/manifiestos/modulos.json +19 -14
- package/manifiestos/planning-paths.json +1 -0
- package/manifiestos/skills-lock.json +50 -50
- package/package.json +2 -3
- package/plugin.json +2 -2
- package/scripts/actualizar.js +3 -0
- package/scripts/auditar-clases-conocidas.js +32 -4
- package/scripts/benchmark-memoria.js +1 -0
- package/scripts/cli/autonomia.js +23 -0
- package/scripts/cli/benchmark-memoria.js +37 -0
- package/scripts/cli/ciclo-autonomo.js +73 -0
- package/scripts/cli/ciclo-fase-b.js +102 -0
- package/scripts/cli/guardrail-metrics.js +39 -0
- package/scripts/cli/loop-telemetry.js +4 -2
- package/scripts/cli/memoria-search.js +69 -0
- package/scripts/cli/nudge-accionar.js +39 -0
- package/scripts/cli/run-eval.js +38 -0
- package/scripts/cli/run-skill-evals.js +13 -2
- package/scripts/derivar-feature-list.js +15 -14
- package/scripts/desinstalar.js +11 -0
- package/scripts/doctor.js +24 -10
- package/scripts/instalador.js +85 -7
- package/scripts/lib/activar-hooks-proyecto.js +12 -0
- package/scripts/lib/auditar-invocaciones-comandos.js +96 -6
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -0
- package/scripts/lib/ciclo-autonomo/config.js +165 -0
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -0
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -0
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -0
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -0
- package/scripts/lib/ciclo-autonomo/index.js +301 -0
- package/scripts/lib/ciclo-autonomo/lock.js +124 -0
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -0
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -0
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -0
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -0
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +535 -0
- package/scripts/lib/estado.js +9 -0
- package/scripts/lib/gitignore-manifest.js +8 -1
- package/scripts/lib/hooks-settings.js +45 -0
- package/scripts/rotar-audit-logs.js +48 -2
- package/scripts/run-eval.js +1 -0
- package/scripts/run-skill-evals.js +287 -8
- package/scripts/smoke-test.js +16 -8
- package/scripts/tui/pantallas/install-wizard.js +403 -347
- package/scripts/validar.js +40 -1
package/comandos/swl/sesiones.md
CHANGED
|
@@ -1,200 +1,200 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:sesiones
|
|
3
|
-
description: Gestiona el historial de sesiones SWL (listar, resumir, inspeccionar la sesión activa y generar continue-here.md desde cualquier sesión pasada)
|
|
4
|
-
allowed_tools: ["Read", "Write", "Bash", "Glob"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:sesiones — Gestionar historial de sesiones SWL
|
|
8
|
-
|
|
9
|
-
Administra las sesiones de trabajo persistidas en `.planning/sessions/`.
|
|
10
|
-
Cada sesión registra tool calls, costo estimado, archivos modificados y agentes invocados.
|
|
11
|
-
|
|
12
|
-
## Uso
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
/swl:sesiones — Lista las últimas 10 sesiones
|
|
16
|
-
/swl:sesiones list [N] — Lista las últimas N sesiones
|
|
17
|
-
/swl:sesiones resume [id] — Genera continue-here.md desde una sesión
|
|
18
|
-
/swl:sesiones inspect [id] — Muestra detalle completo de una sesión
|
|
19
|
-
/swl:sesiones active — Muestra la sesión activa actual
|
|
20
|
-
/swl:sesiones wake [id] — Reconstruye estado de sesión desde eventos JSONL (Managed Agents wake pattern)
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Comportamiento por subcomando
|
|
24
|
-
|
|
25
|
-
### list [N]
|
|
26
|
-
|
|
27
|
-
1. Leer todos los archivos `ses-*.json` en `.planning/sessions/`.
|
|
28
|
-
2. Ordenar por nombre de archivo descendente (el nombre encode el timestamp).
|
|
29
|
-
3. Aplicar límite: 10 por defecto, o el N proporcionado.
|
|
30
|
-
4. Mostrar tabla compacta:
|
|
31
|
-
|
|
32
|
-
```
|
|
33
|
-
| ID | Fecha | Modo | Tool Calls | Costo | Estado |
|
|
34
|
-
|---------------------|------------|------|------------|--------|-----------|
|
|
35
|
-
| ses-20260331-143000 | 2026-03-31 | dev | 47 | $1.87 | completed |
|
|
36
|
-
| ses-20260331-093000 | 2026-03-31 | dev | 23 | $0.69 | completed |
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Si `.planning/sessions/` no existe o está vacío, mostrar:
|
|
40
|
-
```
|
|
41
|
-
No hay sesiones registradas en .planning/sessions/
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
### resume [id]
|
|
45
|
-
|
|
46
|
-
1. Si no se proporciona `id`, usar la sesión de `.planning/sessions/latest.json`.
|
|
47
|
-
2. Si se proporciona `id`, buscar el archivo `ses-{id}.json` o `{id}.json` en `.planning/sessions/`.
|
|
48
|
-
3. Leer el objeto de sesión.
|
|
49
|
-
4. Construir el contenido del continue-here.md con esta estructura:
|
|
50
|
-
|
|
51
|
-
```markdown
|
|
52
|
-
# Continue Here — {id}
|
|
53
|
-
|
|
54
|
-
**Sesión**: {id}
|
|
55
|
-
**Inicio**: {startTime}
|
|
56
|
-
**Duración**: {N min | en progreso}
|
|
57
|
-
**Modo**: {mode}
|
|
58
|
-
**Tool calls**: {toolCalls}
|
|
59
|
-
**Costo estimado**: ${costEstimated} USD
|
|
60
|
-
|
|
61
|
-
## Archivos modificados
|
|
62
|
-
- ruta/archivo1
|
|
63
|
-
- ruta/archivo2
|
|
64
|
-
|
|
65
|
-
## Agentes invocados
|
|
66
|
-
- nombre-agente-1
|
|
67
|
-
|
|
68
|
-
## Herramientas más usadas
|
|
69
|
-
- Bash: 21 llamadas
|
|
70
|
-
- Read: 15 llamadas
|
|
71
|
-
|
|
72
|
-
## Resumen
|
|
73
|
-
{summary o "(sin resumen)"}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
5. Escribir el contenido en `.planning/continue-here.md`.
|
|
77
|
-
6. Confirmar al usuario:
|
|
78
|
-
```
|
|
79
|
-
continue-here.md generado desde la sesión {id}.
|
|
80
|
-
Archivo: .planning/continue-here.md
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### inspect [id]
|
|
84
|
-
|
|
85
|
-
1. Localizar el archivo de sesión igual que en `resume`.
|
|
86
|
-
2. Mostrar TODOS los campos del JSON con formato legible:
|
|
87
|
-
|
|
88
|
-
```
|
|
89
|
-
Sesión: ses-20260331-143000
|
|
90
|
-
Estado: completed
|
|
91
|
-
Inicio: 2026-03-31T14:30:00.000Z
|
|
92
|
-
Fin: 2026-03-31T16:45:00.000Z
|
|
93
|
-
Modo: dev
|
|
94
|
-
|
|
95
|
-
Métricas generales:
|
|
96
|
-
Tool calls: 47
|
|
97
|
-
Tokens estimados: 23,500
|
|
98
|
-
Costo estimado: $1.87 USD
|
|
99
|
-
|
|
100
|
-
Herramientas:
|
|
101
|
-
Bash 21
|
|
102
|
-
Read 15
|
|
103
|
-
Write 6
|
|
104
|
-
Edit 3
|
|
105
|
-
Grep 2
|
|
106
|
-
|
|
107
|
-
Modelos:
|
|
108
|
-
claude-sonnet-5 47
|
|
109
|
-
|
|
110
|
-
Archivos modificados (6):
|
|
111
|
-
hooks/lib/session-store.js
|
|
112
|
-
comandos/swl/sesiones.md
|
|
113
|
-
...
|
|
114
|
-
|
|
115
|
-
Agentes invocados (2):
|
|
116
|
-
planificador-swl
|
|
117
|
-
backend-python-swl
|
|
118
|
-
|
|
119
|
-
Resumen:
|
|
120
|
-
(sin resumen)
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
### active
|
|
124
|
-
|
|
125
|
-
1. Leer `.planning/sessions/latest.json` para obtener el ID de la sesión activa.
|
|
126
|
-
2. Leer el archivo de sesión correspondiente.
|
|
127
|
-
3. Mostrar las métricas en tiempo real con el mismo formato de `inspect`.
|
|
128
|
-
4. Si no hay sesión activa:
|
|
129
|
-
```
|
|
130
|
-
No hay sesión activa en este momento.
|
|
131
|
-
Para iniciar una nueva sesión, el sistema la crea automáticamente al primer tool call.
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
### wake [id]
|
|
135
|
-
|
|
136
|
-
Reconstruye el estado de una sesión desde su log de eventos JSONL en `.planning/runs/`.
|
|
137
|
-
Implementa el patrón `wake(sessionId)` de Managed Agents: permite retomar sesiones
|
|
138
|
-
interrumpidas sin recargar el contexto completo en la ventana del modelo.
|
|
139
|
-
|
|
140
|
-
1. Si no se proporciona `id`, usar el ID de la sesión activa en `latest.json`.
|
|
141
|
-
2. Buscar el archivo `.planning/runs/{id}.jsonl`.
|
|
142
|
-
3. Leer el módulo `hooks/lib/run-log.js` para acceder a `wakeSession(id)`.
|
|
143
|
-
4. Mostrar el estado reconstruido:
|
|
144
|
-
|
|
145
|
-
```
|
|
146
|
-
Sesión reconstruida: {id}
|
|
147
|
-
Estado: {active|completed|aborted|unknown}
|
|
148
|
-
|
|
149
|
-
Inicio: {startTs}
|
|
150
|
-
Último evento: {lastTs}
|
|
151
|
-
Tool calls: {toolCalls}
|
|
152
|
-
Último tool: {lastToolCall}
|
|
153
|
-
Abortada: {sí|no}
|
|
154
|
-
|
|
155
|
-
Agentes invocados ({N}):
|
|
156
|
-
- planificador-swl
|
|
157
|
-
- implementador-swl
|
|
158
|
-
|
|
159
|
-
Skills cargados ({N}):
|
|
160
|
-
- ejecutar-fase
|
|
161
|
-
- git-workflow
|
|
162
|
-
|
|
163
|
-
Contexto disponible en: .planning/runs/{id}.jsonl
|
|
164
|
-
Para retomar: /swl:sesiones resume {id}
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
5. Si el archivo JSONL no existe pero sí existe `ses-{id}.json`, mostrar:
|
|
168
|
-
```
|
|
169
|
-
Run log no disponible para {id}. Usa /swl:sesiones inspect {id} para ver la sesión.
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
## Resolución de ID parcial
|
|
173
|
-
|
|
174
|
-
Cuando el usuario proporciona un ID parcial (ej: `143000` o `20260331`), buscar el
|
|
175
|
-
primer archivo `ses-*.json` cuyo nombre contenga ese fragmento. Si hay múltiples
|
|
176
|
-
coincidencias, listarlas y pedir al usuario que especifique.
|
|
177
|
-
|
|
178
|
-
## Datos persistidos por sesión
|
|
179
|
-
|
|
180
|
-
Cada archivo `ses-YYYYMMDD-HHmmss.json` contiene:
|
|
181
|
-
|
|
182
|
-
| Campo | Tipo | Descripción |
|
|
183
|
-
|------------------|----------|----------------------------------------------|
|
|
184
|
-
| id | string | Identificador único de la sesión |
|
|
185
|
-
| startTime | string | ISO timestamp de inicio |
|
|
186
|
-
| endTime | string | ISO timestamp de fin (null si activa) |
|
|
187
|
-
| status | string | `active` o `completed` |
|
|
188
|
-
| mode | string | Modo activo (`dev`, `review`, `research`) |
|
|
189
|
-
| toolCalls | number | Total de invocaciones de herramientas |
|
|
190
|
-
| tokensEstimated | number | Suma de tokens estimados |
|
|
191
|
-
| costEstimated | number | Costo acumulado en USD |
|
|
192
|
-
| filesChanged | string[] | Rutas de archivos modificados (deduplicados) |
|
|
193
|
-
| agentsInvoked | string[] | Nombres de agentes invocados (deduplicados) |
|
|
194
|
-
| summary | string | Resumen generado al cerrar la sesión |
|
|
195
|
-
| metricas | object | `{ herramientas: {}, modelos: {} }` |
|
|
196
|
-
|
|
197
|
-
## Directorio de sesiones
|
|
198
|
-
|
|
199
|
-
`.planning/sessions/` — creado automáticamente por `session-store.js`.
|
|
200
|
-
`latest.json` — puntero lógico a la sesión activa: `{ currentSession, path }`.
|
|
1
|
+
---
|
|
2
|
+
name: swl:sesiones
|
|
3
|
+
description: Gestiona el historial de sesiones SWL (listar, resumir, inspeccionar la sesión activa y generar continue-here.md desde cualquier sesión pasada)
|
|
4
|
+
allowed_tools: ["Read", "Write", "Bash", "Glob"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:sesiones — Gestionar historial de sesiones SWL
|
|
8
|
+
|
|
9
|
+
Administra las sesiones de trabajo persistidas en `.planning/sessions/`.
|
|
10
|
+
Cada sesión registra tool calls, costo estimado, archivos modificados y agentes invocados.
|
|
11
|
+
|
|
12
|
+
## Uso
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/swl:sesiones — Lista las últimas 10 sesiones
|
|
16
|
+
/swl:sesiones list [N] — Lista las últimas N sesiones
|
|
17
|
+
/swl:sesiones resume [id] — Genera continue-here.md desde una sesión
|
|
18
|
+
/swl:sesiones inspect [id] — Muestra detalle completo de una sesión
|
|
19
|
+
/swl:sesiones active — Muestra la sesión activa actual
|
|
20
|
+
/swl:sesiones wake [id] — Reconstruye estado de sesión desde eventos JSONL (Managed Agents wake pattern)
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Comportamiento por subcomando
|
|
24
|
+
|
|
25
|
+
### list [N]
|
|
26
|
+
|
|
27
|
+
1. Leer todos los archivos `ses-*.json` en `.planning/sessions/`.
|
|
28
|
+
2. Ordenar por nombre de archivo descendente (el nombre encode el timestamp).
|
|
29
|
+
3. Aplicar límite: 10 por defecto, o el N proporcionado.
|
|
30
|
+
4. Mostrar tabla compacta:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
| ID | Fecha | Modo | Tool Calls | Costo | Estado |
|
|
34
|
+
|---------------------|------------|------|------------|--------|-----------|
|
|
35
|
+
| ses-20260331-143000 | 2026-03-31 | dev | 47 | $1.87 | completed |
|
|
36
|
+
| ses-20260331-093000 | 2026-03-31 | dev | 23 | $0.69 | completed |
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Si `.planning/sessions/` no existe o está vacío, mostrar:
|
|
40
|
+
```
|
|
41
|
+
No hay sesiones registradas en .planning/sessions/
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### resume [id]
|
|
45
|
+
|
|
46
|
+
1. Si no se proporciona `id`, usar la sesión de `.planning/sessions/latest.json`.
|
|
47
|
+
2. Si se proporciona `id`, buscar el archivo `ses-{id}.json` o `{id}.json` en `.planning/sessions/`.
|
|
48
|
+
3. Leer el objeto de sesión.
|
|
49
|
+
4. Construir el contenido del continue-here.md con esta estructura:
|
|
50
|
+
|
|
51
|
+
```markdown
|
|
52
|
+
# Continue Here — {id}
|
|
53
|
+
|
|
54
|
+
**Sesión**: {id}
|
|
55
|
+
**Inicio**: {startTime}
|
|
56
|
+
**Duración**: {N min | en progreso}
|
|
57
|
+
**Modo**: {mode}
|
|
58
|
+
**Tool calls**: {toolCalls}
|
|
59
|
+
**Costo estimado**: ${costEstimated} USD
|
|
60
|
+
|
|
61
|
+
## Archivos modificados
|
|
62
|
+
- ruta/archivo1
|
|
63
|
+
- ruta/archivo2
|
|
64
|
+
|
|
65
|
+
## Agentes invocados
|
|
66
|
+
- nombre-agente-1
|
|
67
|
+
|
|
68
|
+
## Herramientas más usadas
|
|
69
|
+
- Bash: 21 llamadas
|
|
70
|
+
- Read: 15 llamadas
|
|
71
|
+
|
|
72
|
+
## Resumen
|
|
73
|
+
{summary o "(sin resumen)"}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
5. Escribir el contenido en `.planning/continue-here.md`.
|
|
77
|
+
6. Confirmar al usuario:
|
|
78
|
+
```
|
|
79
|
+
continue-here.md generado desde la sesión {id}.
|
|
80
|
+
Archivo: .planning/continue-here.md
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### inspect [id]
|
|
84
|
+
|
|
85
|
+
1. Localizar el archivo de sesión igual que en `resume`.
|
|
86
|
+
2. Mostrar TODOS los campos del JSON con formato legible:
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
Sesión: ses-20260331-143000
|
|
90
|
+
Estado: completed
|
|
91
|
+
Inicio: 2026-03-31T14:30:00.000Z
|
|
92
|
+
Fin: 2026-03-31T16:45:00.000Z
|
|
93
|
+
Modo: dev
|
|
94
|
+
|
|
95
|
+
Métricas generales:
|
|
96
|
+
Tool calls: 47
|
|
97
|
+
Tokens estimados: 23,500
|
|
98
|
+
Costo estimado: $1.87 USD
|
|
99
|
+
|
|
100
|
+
Herramientas:
|
|
101
|
+
Bash 21
|
|
102
|
+
Read 15
|
|
103
|
+
Write 6
|
|
104
|
+
Edit 3
|
|
105
|
+
Grep 2
|
|
106
|
+
|
|
107
|
+
Modelos:
|
|
108
|
+
claude-sonnet-5 47
|
|
109
|
+
|
|
110
|
+
Archivos modificados (6):
|
|
111
|
+
hooks/lib/session-store.js
|
|
112
|
+
comandos/swl/sesiones.md
|
|
113
|
+
...
|
|
114
|
+
|
|
115
|
+
Agentes invocados (2):
|
|
116
|
+
planificador-swl
|
|
117
|
+
backend-python-swl
|
|
118
|
+
|
|
119
|
+
Resumen:
|
|
120
|
+
(sin resumen)
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### active
|
|
124
|
+
|
|
125
|
+
1. Leer `.planning/sessions/latest.json` para obtener el ID de la sesión activa.
|
|
126
|
+
2. Leer el archivo de sesión correspondiente.
|
|
127
|
+
3. Mostrar las métricas en tiempo real con el mismo formato de `inspect`.
|
|
128
|
+
4. Si no hay sesión activa:
|
|
129
|
+
```
|
|
130
|
+
No hay sesión activa en este momento.
|
|
131
|
+
Para iniciar una nueva sesión, el sistema la crea automáticamente al primer tool call.
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### wake [id]
|
|
135
|
+
|
|
136
|
+
Reconstruye el estado de una sesión desde su log de eventos JSONL en `.planning/runs/`.
|
|
137
|
+
Implementa el patrón `wake(sessionId)` de Managed Agents: permite retomar sesiones
|
|
138
|
+
interrumpidas sin recargar el contexto completo en la ventana del modelo.
|
|
139
|
+
|
|
140
|
+
1. Si no se proporciona `id`, usar el ID de la sesión activa en `latest.json`.
|
|
141
|
+
2. Buscar el archivo `.planning/runs/{id}.jsonl`.
|
|
142
|
+
3. Leer el módulo `hooks/lib/run-log.js` para acceder a `wakeSession(id)`.
|
|
143
|
+
4. Mostrar el estado reconstruido:
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
Sesión reconstruida: {id}
|
|
147
|
+
Estado: {active|completed|aborted|unknown}
|
|
148
|
+
|
|
149
|
+
Inicio: {startTs}
|
|
150
|
+
Último evento: {lastTs}
|
|
151
|
+
Tool calls: {toolCalls}
|
|
152
|
+
Último tool: {lastToolCall}
|
|
153
|
+
Abortada: {sí|no}
|
|
154
|
+
|
|
155
|
+
Agentes invocados ({N}):
|
|
156
|
+
- planificador-swl
|
|
157
|
+
- implementador-swl
|
|
158
|
+
|
|
159
|
+
Skills cargados ({N}):
|
|
160
|
+
- ejecutar-fase
|
|
161
|
+
- git-workflow
|
|
162
|
+
|
|
163
|
+
Contexto disponible en: .planning/runs/{id}.jsonl
|
|
164
|
+
Para retomar: /swl:sesiones resume {id}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
5. Si el archivo JSONL no existe pero sí existe `ses-{id}.json`, mostrar:
|
|
168
|
+
```
|
|
169
|
+
Run log no disponible para {id}. Usa /swl:sesiones inspect {id} para ver la sesión.
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## Resolución de ID parcial
|
|
173
|
+
|
|
174
|
+
Cuando el usuario proporciona un ID parcial (ej: `143000` o `20260331`), buscar el
|
|
175
|
+
primer archivo `ses-*.json` cuyo nombre contenga ese fragmento. Si hay múltiples
|
|
176
|
+
coincidencias, listarlas y pedir al usuario que especifique.
|
|
177
|
+
|
|
178
|
+
## Datos persistidos por sesión
|
|
179
|
+
|
|
180
|
+
Cada archivo `ses-YYYYMMDD-HHmmss.json` contiene:
|
|
181
|
+
|
|
182
|
+
| Campo | Tipo | Descripción |
|
|
183
|
+
|------------------|----------|----------------------------------------------|
|
|
184
|
+
| id | string | Identificador único de la sesión |
|
|
185
|
+
| startTime | string | ISO timestamp de inicio |
|
|
186
|
+
| endTime | string | ISO timestamp de fin (null si activa) |
|
|
187
|
+
| status | string | `active` o `completed` |
|
|
188
|
+
| mode | string | Modo activo (`dev`, `review`, `research`) |
|
|
189
|
+
| toolCalls | number | Total de invocaciones de herramientas |
|
|
190
|
+
| tokensEstimated | number | Suma de tokens estimados |
|
|
191
|
+
| costEstimated | number | Costo acumulado en USD |
|
|
192
|
+
| filesChanged | string[] | Rutas de archivos modificados (deduplicados) |
|
|
193
|
+
| agentsInvoked | string[] | Nombres de agentes invocados (deduplicados) |
|
|
194
|
+
| summary | string | Resumen generado al cerrar la sesión |
|
|
195
|
+
| metricas | object | `{ herramientas: {}, modelos: {} }` |
|
|
196
|
+
|
|
197
|
+
## Directorio de sesiones
|
|
198
|
+
|
|
199
|
+
`.planning/sessions/` — creado automáticamente por `session-store.js`.
|
|
200
|
+
`latest.json` — puntero lógico a la sesión activa: `{ currentSession, path }`.
|
|
@@ -1,113 +1,113 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:skill-search
|
|
3
|
-
description: Busca habilidades (skills) SWL disponibles por nombre o descripción. Genera o reutiliza el índice auto-descubierto de habilidades/*/SKILL.md. Cargar cuando el usuario quiera explorar skills disponibles, verificar si existe una habilidad concreta, o repasar el catálogo completo.
|
|
4
|
-
allowed_tools: ["Bash", "Read"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:skill-search — Explorar habilidades SWL
|
|
8
|
-
|
|
9
|
-
Muestra el catálogo de habilidades disponibles en el sistema SWL.
|
|
10
|
-
El índice se genera automáticamente leyendo `habilidades/*/SKILL.md`.
|
|
11
|
-
|
|
12
|
-
## Uso
|
|
13
|
-
|
|
14
|
-
```
|
|
15
|
-
/swl:skill-search — Lista todas las habilidades
|
|
16
|
-
/swl:skill-search <query> — Filtra por nombre o descripción
|
|
17
|
-
/swl:skill-search --intent <desc> — Busca por intención (qué quiero hacer)
|
|
18
|
-
/swl:skill-search --dominio <dom> — Filtra por dominio (backend, frontend, etc.)
|
|
19
|
-
/swl:skill-search --rebuild — Regenera el índice desde disco
|
|
20
|
-
```
|
|
21
|
-
|
|
22
|
-
## Paso 1 — Verificar disponibilidad del script
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
ls scripts/lib/skill-discovery.js 2>/dev/null && echo "OK" || echo "FALTA"
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
Si falta, indicar al usuario que actualice SWL con `/swl:actualizar`.
|
|
29
|
-
|
|
30
|
-
## Paso 2 — Ejecutar búsqueda o listar todo
|
|
31
|
-
|
|
32
|
-
### Sin query (catálogo completo)
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npx -y @saulwade/swl-ses@latest skill-discovery
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### Con query (búsqueda filtrada)
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
npx -y @saulwade/swl-ses@latest skill-discovery "<query>"
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
Ejemplo: `npx -y @saulwade/swl-ses@latest skill-discovery "typescript"` muestra skills de TypeScript.
|
|
45
|
-
|
|
46
|
-
### Búsqueda por intent (--intent)
|
|
47
|
-
|
|
48
|
-
Cuando el usuario describe lo que quiere hacer en lugar de buscar por nombre técnico,
|
|
49
|
-
usar la siguiente tabla de sinónimos para mapear intención → skills relevantes:
|
|
50
|
-
|
|
51
|
-
| Intención del usuario | Keywords a buscar | Skills probables |
|
|
52
|
-
|----------------------|-------------------|------------------|
|
|
53
|
-
| "quiero hacer tests" | test, tdd, qa, cobertura | tdd-workflow, testing-* |
|
|
54
|
-
| "necesito autenticación" | auth, login, jwt, oauth, sesión | auth-patrones |
|
|
55
|
-
| "optimizar rendimiento" | performance, lento, caché, índice | performance-baseline |
|
|
56
|
-
| "crear API" | api, rest, endpoint, graphql | api-rest-diseno, fastapi-experto |
|
|
57
|
-
| "base de datos" | sql, query, migración, orm | postgresql-experto |
|
|
58
|
-
| "desplegar" | deploy, ci, cd, docker, pipeline | ci-cd-pipelines |
|
|
59
|
-
| "documentar" | docs, readme, changelog, adr | documentacion-tecnica |
|
|
60
|
-
| "seguridad" | owasp, xss, inyección, csrf, secretos | seguridad-skills-ia |
|
|
61
|
-
| "frontend" | componente, ui, css, react, angular | angular-moderno, frontend-* |
|
|
62
|
-
| "errores" | error, debug, excepción, stack trace | manejo-errores |
|
|
63
|
-
|
|
64
|
-
Si `--intent` está presente, buscar en la descripción de cada skill por coincidencia
|
|
65
|
-
semántica con la intención expresada, no solo por string matching exacto.
|
|
66
|
-
|
|
67
|
-
### Filtrar por dominio (--dominio)
|
|
68
|
-
|
|
69
|
-
Dominios soportados: `backend`, `frontend`, `mobile`, `datos`, `infra`, `seguridad`,
|
|
70
|
-
`ux`, `calidad`, `proceso`, `docs`.
|
|
71
|
-
|
|
72
|
-
Filtra usando el prefijo de dominio del nombre del skill (ej: `backend-*`, `frontend-*`)
|
|
73
|
-
o por las keywords del dominio en la descripción.
|
|
74
|
-
|
|
75
|
-
### Reconstruir índice
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npx -y @saulwade/swl-ses@latest skill-discovery --rebuild
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
## Paso 3 — Presentar resultados
|
|
82
|
-
|
|
83
|
-
Mostrar la tabla generada por el script, que tiene el formato:
|
|
84
|
-
|
|
85
|
-
```
|
|
86
|
-
Habilidades SWL disponibles (N)
|
|
87
|
-
──────────────────────────────────────────────────────────────────────
|
|
88
|
-
nombre-de-habilidad v1.0.0 Descripción breve
|
|
89
|
-
...
|
|
90
|
-
──────────────────────────────────────────────────────────────────────
|
|
91
|
-
Generado: YYYY-MM-DD | Índice: .planning/skill-index.json
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Paso 4 — Cómo usar una habilidad
|
|
95
|
-
|
|
96
|
-
Indicar al usuario la sintaxis para cargar la habilidad seleccionada:
|
|
97
|
-
|
|
98
|
-
```
|
|
99
|
-
Skill("nombre-de-habilidad")
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
Por ejemplo, si encontró `typescript-avanzado`:
|
|
103
|
-
|
|
104
|
-
```
|
|
105
|
-
Skill("typescript-avanzado")
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
## Notas
|
|
109
|
-
|
|
110
|
-
- El índice persiste en `.planning/skill-index.json` entre sesiones.
|
|
111
|
-
- Si una habilidad no tiene frontmatter YAML válido, aparece con su nombre de directorio.
|
|
112
|
-
- Para ver detalles de una habilidad específica: `Read("habilidades/<nombre>/SKILL.md")`.
|
|
113
|
-
- La descripción del índice viene del campo `description` en el frontmatter YAML del SKILL.md.
|
|
1
|
+
---
|
|
2
|
+
name: swl:skill-search
|
|
3
|
+
description: Busca habilidades (skills) SWL disponibles por nombre o descripción. Genera o reutiliza el índice auto-descubierto de habilidades/*/SKILL.md. Cargar cuando el usuario quiera explorar skills disponibles, verificar si existe una habilidad concreta, o repasar el catálogo completo.
|
|
4
|
+
allowed_tools: ["Bash", "Read"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:skill-search — Explorar habilidades SWL
|
|
8
|
+
|
|
9
|
+
Muestra el catálogo de habilidades disponibles en el sistema SWL.
|
|
10
|
+
El índice se genera automáticamente leyendo `habilidades/*/SKILL.md`.
|
|
11
|
+
|
|
12
|
+
## Uso
|
|
13
|
+
|
|
14
|
+
```
|
|
15
|
+
/swl:skill-search — Lista todas las habilidades
|
|
16
|
+
/swl:skill-search <query> — Filtra por nombre o descripción
|
|
17
|
+
/swl:skill-search --intent <desc> — Busca por intención (qué quiero hacer)
|
|
18
|
+
/swl:skill-search --dominio <dom> — Filtra por dominio (backend, frontend, etc.)
|
|
19
|
+
/swl:skill-search --rebuild — Regenera el índice desde disco
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Paso 1 — Verificar disponibilidad del script
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
ls scripts/lib/skill-discovery.js 2>/dev/null && echo "OK" || echo "FALTA"
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Si falta, indicar al usuario que actualice SWL con `/swl:actualizar`.
|
|
29
|
+
|
|
30
|
+
## Paso 2 — Ejecutar búsqueda o listar todo
|
|
31
|
+
|
|
32
|
+
### Sin query (catálogo completo)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
npx -y @saulwade/swl-ses@latest skill-discovery
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Con query (búsqueda filtrada)
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
npx -y @saulwade/swl-ses@latest skill-discovery "<query>"
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Ejemplo: `npx -y @saulwade/swl-ses@latest skill-discovery "typescript"` muestra skills de TypeScript.
|
|
45
|
+
|
|
46
|
+
### Búsqueda por intent (--intent)
|
|
47
|
+
|
|
48
|
+
Cuando el usuario describe lo que quiere hacer en lugar de buscar por nombre técnico,
|
|
49
|
+
usar la siguiente tabla de sinónimos para mapear intención → skills relevantes:
|
|
50
|
+
|
|
51
|
+
| Intención del usuario | Keywords a buscar | Skills probables |
|
|
52
|
+
|----------------------|-------------------|------------------|
|
|
53
|
+
| "quiero hacer tests" | test, tdd, qa, cobertura | tdd-workflow, testing-* |
|
|
54
|
+
| "necesito autenticación" | auth, login, jwt, oauth, sesión | auth-patrones |
|
|
55
|
+
| "optimizar rendimiento" | performance, lento, caché, índice | performance-baseline |
|
|
56
|
+
| "crear API" | api, rest, endpoint, graphql | api-rest-diseno, fastapi-experto |
|
|
57
|
+
| "base de datos" | sql, query, migración, orm | postgresql-experto |
|
|
58
|
+
| "desplegar" | deploy, ci, cd, docker, pipeline | ci-cd-pipelines |
|
|
59
|
+
| "documentar" | docs, readme, changelog, adr | documentacion-tecnica |
|
|
60
|
+
| "seguridad" | owasp, xss, inyección, csrf, secretos | seguridad-skills-ia |
|
|
61
|
+
| "frontend" | componente, ui, css, react, angular | angular-moderno, frontend-* |
|
|
62
|
+
| "errores" | error, debug, excepción, stack trace | manejo-errores |
|
|
63
|
+
|
|
64
|
+
Si `--intent` está presente, buscar en la descripción de cada skill por coincidencia
|
|
65
|
+
semántica con la intención expresada, no solo por string matching exacto.
|
|
66
|
+
|
|
67
|
+
### Filtrar por dominio (--dominio)
|
|
68
|
+
|
|
69
|
+
Dominios soportados: `backend`, `frontend`, `mobile`, `datos`, `infra`, `seguridad`,
|
|
70
|
+
`ux`, `calidad`, `proceso`, `docs`.
|
|
71
|
+
|
|
72
|
+
Filtra usando el prefijo de dominio del nombre del skill (ej: `backend-*`, `frontend-*`)
|
|
73
|
+
o por las keywords del dominio en la descripción.
|
|
74
|
+
|
|
75
|
+
### Reconstruir índice
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx -y @saulwade/swl-ses@latest skill-discovery --rebuild
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Paso 3 — Presentar resultados
|
|
82
|
+
|
|
83
|
+
Mostrar la tabla generada por el script, que tiene el formato:
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
Habilidades SWL disponibles (N)
|
|
87
|
+
──────────────────────────────────────────────────────────────────────
|
|
88
|
+
nombre-de-habilidad v1.0.0 Descripción breve
|
|
89
|
+
...
|
|
90
|
+
──────────────────────────────────────────────────────────────────────
|
|
91
|
+
Generado: YYYY-MM-DD | Índice: .planning/skill-index.json
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## Paso 4 — Cómo usar una habilidad
|
|
95
|
+
|
|
96
|
+
Indicar al usuario la sintaxis para cargar la habilidad seleccionada:
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
Skill("nombre-de-habilidad")
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Por ejemplo, si encontró `typescript-avanzado`:
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
Skill("typescript-avanzado")
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Notas
|
|
109
|
+
|
|
110
|
+
- El índice persiste en `.planning/skill-index.json` entre sesiones.
|
|
111
|
+
- Si una habilidad no tiene frontmatter YAML válido, aparece con su nombre de directorio.
|
|
112
|
+
- Para ver detalles de una habilidad específica: `Read("habilidades/<nombre>/SKILL.md")`.
|
|
113
|
+
- La descripción del índice viene del campo `description` en el frontmatter YAML del SKILL.md.
|