@saulwade/swl-ses 2.1.0 → 2.2.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 +1 -1
- package/README.md +1 -1
- package/bin/swl-ses.js +63 -0
- package/comandos/swl/adoptar-proyecto.md +258 -255
- package/comandos/swl/aprender.md +828 -840
- package/comandos/swl/aprobar-plan.md +23 -35
- package/comandos/swl/autoresearch.md +12 -14
- package/comandos/swl/briefing.md +5 -8
- package/comandos/swl/checkpoint.md +10 -15
- package/comandos/swl/claudemd.md +239 -234
- package/comandos/swl/configurar-ci.md +20 -19
- package/comandos/swl/cron.md +10 -12
- package/comandos/swl/ejecutar-fase.md +10 -3
- package/comandos/swl/evolucionar.md +6 -11
- package/comandos/swl/inbox.md +10 -10
- package/comandos/swl/modelo.md +7 -9
- package/comandos/swl/notificaciones.md +19 -116
- package/comandos/swl/nuevo-proyecto.md +205 -205
- package/comandos/swl/status.md +333 -348
- package/comandos/swl/verificar.md +817 -813
- package/habilidades/swl-claudemd/SKILL.md +10 -6
- package/hooks/lib/propose-step.js +1 -0
- package/llms.txt +1 -1
- package/manifiestos/skills-lock.json +5 -5
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/auditar-claudemd.js +38 -0
- package/scripts/cli/aprobar-plan.js +73 -0
- package/scripts/cli/briefing.js +23 -0
- package/scripts/cli/ciclo-evolucion.js +26 -0
- package/scripts/cli/configurar-ci.js +40 -0
- package/scripts/cli/derivar-feature-list.js +25 -0
- package/scripts/cli/detectar-host.js +27 -0
- package/scripts/cli/diary-entry.js +69 -0
- package/scripts/cli/execution-state.js +18 -0
- package/scripts/cli/gateway-notify.js +41 -0
- package/scripts/cli/liberar-fase.js +42 -0
- package/scripts/cli/loop-telemetry.js +125 -0
- package/scripts/cli/mark-evolved.js +56 -0
- package/scripts/cli/metricas-dora.js +26 -0
- package/scripts/cli/near-duplicate.js +55 -0
- package/scripts/cli/notificaciones.js +123 -0
- package/scripts/cli/propose-step.js +29 -0
- package/scripts/cli/schedule-parse.js +19 -0
- package/scripts/cli/sugerir-modelo.js +20 -0
- package/scripts/cli/verificar-plan.js +36 -0
- package/scripts/cli/verificar-trazabilidad.js +35 -0
- package/scripts/derivar-feature-list.js +1 -0
- package/scripts/lib/auditar-invocaciones-comandos.js +104 -0
- package/scripts/lib/resolver-plan-fase.js +37 -0
- package/scripts/validar.js +13 -0
- package/scripts/verificar-trazabilidad.js +1 -1
package/comandos/swl/status.md
CHANGED
|
@@ -1,348 +1,333 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: swl:status
|
|
3
|
-
description: Comando unificado de observabilidad del sistema y la sesión. Enruta a subcomandos [salud | metricas | loops | evolucion | historico | dashboard] que reportan salud del sistema SWL, métricas de la sesión actual, trayectorias de loops iterativos, estado del ciclo de auto-evolución y dashboard histórico multi-sesión. Reemplaza los comandos previos /swl:salud, /swl:metricas, /swl:dashboard y /swl:evolucion-estado (fusionados en este desde la Fase 09).
|
|
4
|
-
allowed_tools: ["Read", "Write", "Bash", "Glob", "Grep"]
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# /swl:status <subcomando> — Observabilidad unificada
|
|
8
|
-
|
|
9
|
-
Punto único de observabilidad de swl-ses. Fusiona los cuatro comandos previos de
|
|
10
|
-
diagnóstico en un router con subcomandos. Cada subcomando delega exactamente en
|
|
11
|
-
la misma lógica (skill o script) que usaba el comando original — sin pérdida de
|
|
12
|
-
funcionalidad ni de flags.
|
|
13
|
-
|
|
14
|
-
## Uso
|
|
15
|
-
|
|
16
|
-
```
|
|
17
|
-
/swl:status salud — Diagnóstico de salud del sistema SWL (genera SALUD.md)
|
|
18
|
-
/swl:status metricas — Métricas de la sesión actual (tokens, costo, herramientas)
|
|
19
|
-
/swl:status metricas detalle — Desglose completo por herramienta, agente y timeline
|
|
20
|
-
/swl:status metricas fases — Progreso de fases del proyecto (desde feature-list.json)
|
|
21
|
-
/swl:status loops — Trayectorias de loops iterativos (.planning/loops/)
|
|
22
|
-
/swl:status evolucion — Estado del ciclo de auto-evolución (health_score, nudges…)
|
|
23
|
-
/swl:status evolucion --json — JSON crudo de metricas.json (para pipes)
|
|
24
|
-
/swl:status evolucion --dias=N — Regenera métricas con ventana de N días (default 14)
|
|
25
|
-
/swl:status evolucion --regenerar — Fuerza recomputo del hook ciclo-evolucion.js (etapa métricas)
|
|
26
|
-
/swl:status dora — Métricas DORA del proyecto destino (deploy freq, lead time, CFR, MTTR)
|
|
27
|
-
/swl:status dora --dias=N — Ventana de medición de N días (default 30)
|
|
28
|
-
/swl:status historico — Dashboard histórico multi-sesión (web, auto-puerto)
|
|
29
|
-
/swl:status dashboard — Alias de historico
|
|
30
|
-
/swl:status dashboard --port 9090 — Fuerza puerto específico del dashboard
|
|
31
|
-
/swl:status dashboard today — Resumen de consumo del día (terminal)
|
|
32
|
-
/swl:status dashboard stats — Estadísticas históricas all-time (terminal)
|
|
33
|
-
/swl:status dashboard scan — Sincroniza JSONL → SQLite sin abrir el dashboard
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Sin subcomando: pide al usuario cuál quiere, o muestra `salud` + `metricas`
|
|
37
|
-
como vista por defecto si el contexto lo sugiere.
|
|
38
|
-
|
|
39
|
-
## Tabla de enrutamiento (delegación 1:1)
|
|
40
|
-
|
|
41
|
-
| Subcomando | Delega en | Origen previo |
|
|
42
|
-
|------------|-----------|---------------|
|
|
43
|
-
| `salud` | `Skill("validacion-ci-sistema")` | `/swl:salud` |
|
|
44
|
-
| `metricas` (+ `detalle`, `fases`) | scripts de métricas de sesión + `derivar-feature-list.js` | `/swl:metricas` |
|
|
45
|
-
| `loops` | `hooks/lib/loop-telemetry.js` | `/swl:metricas loops` |
|
|
46
|
-
| `evolucion` | `hooks/ciclo-evolucion.js` (etapa métricas) + `.planning/evolution/metricas.json` | `/swl:evolucion-estado` |
|
|
47
|
-
| `dora` | `scripts/lib/metricas-dora.js` + `.planning/evolution/metricas-dora.json` | nuevo (Fase 15, ADR-0039) |
|
|
48
|
-
| `historico` / `dashboard` | `Skill("swl-dashboard")` | `/swl:dashboard` |
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## Subcomando: `salud`
|
|
53
|
-
|
|
54
|
-
Diagnóstico de salud del sistema SWL con **verificaciones deterministas**
|
|
55
|
-
(conteos, existencia de campos, sintaxis). Genera `SALUD.md` con score objetivo.
|
|
56
|
-
**Solo lectura** — no modifica nada salvo `SALUD.md`. Para corregir problemas,
|
|
57
|
-
usar `/swl:evolucionar`.
|
|
58
|
-
|
|
59
|
-
**Paso 0 — Detección host vs consumidor (gate determinista, OBLIGATORIO)**:
|
|
60
|
-
|
|
61
|
-
`salud` audita los componentes del sistema SWL con un score ponderado. Ese score
|
|
62
|
-
solo tiene sentido en el repo que **hospeda** los componentes (swl-ses o un fork).
|
|
63
|
-
En un proyecto **consumidor** (usa las convenciones SWL vía `~/.claude/` pero no
|
|
64
|
-
aloja `agentes/`, `habilidades/`, `comandos/swl/`, `reglas/`, `hooks/`), el
|
|
65
|
-
inventario daría 0 y un score `0/100` sería señal falsa. Esta distinción es
|
|
66
|
-
**determinista**, NO juicio del agente:
|
|
67
|
-
|
|
68
|
-
```bash
|
|
69
|
-
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
- Si `esHost: true` → continuar con el diagnóstico normal (Carga + pasos siguientes).
|
|
73
|
-
- Si `esHost: false` → **NO** calcular score de componentes ni generar `SALUD.md`
|
|
74
|
-
con `0/100`. Reportar el campo `razon` y la lista `sugerencias` (subcomandos de
|
|
75
|
-
`/swl:status` que sí aplican aquí: `metricas`, `loops`, `evolucion`, `dashboard`).
|
|
76
|
-
Ofrecer ejecutar uno de ellos. Terminar sin penalizar el score.
|
|
77
|
-
|
|
78
|
-
**Carga**: `Skill("validacion-ci-sistema")` — contiene las reglas de validación
|
|
79
|
-
por componente (agentes, skills, hooks, comandos, reglas), la tabla de exit codes
|
|
80
|
-
y el checklist de integridad. Toda la lógica de verificación vive en el skill.
|
|
81
|
-
|
|
82
|
-
**Cuándo usar**: antes de iniciar proyecto nuevo, tras modificar agentes/skills
|
|
83
|
-
manualmente, tras merge/pull, o como mantenimiento mensual.
|
|
84
|
-
|
|
85
|
-
**Score global ponderado**:
|
|
86
|
-
```
|
|
87
|
-
Score = agentes×0.30 + skills×0.25 + comandos×0.20 + reglas×0.15 + hooks×0.10
|
|
88
|
-
90-100 Excelente · 75-89 Saludable · 60-74 Funcional · <60 Crítico
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
**Pasos siempre activos**: inventario determinista, detección de tier del proyecto
|
|
92
|
-
(Simple <500 / Standard 500-5000 / Complex >5000 archivos), diagnóstico de los 5
|
|
93
|
-
componentes, y calidad de `CLAUDE.md` (ADR-0016):
|
|
94
|
-
```bash
|
|
95
|
-
npx -y @saulwade/swl-ses@latest audit-claudemd --json
|
|
96
|
-
```
|
|
97
|
-
Umbrales ajustables: `SWL_CLAUDEMD_MAX_LINES` (default 200),
|
|
98
|
-
`SWL_CLAUDEMD_MAX_BULLET_CHARS` (default 1000).
|
|
99
|
-
|
|
100
|
-
**Auditorías opt-in** (cada una se activa con su variable de entorno; si no está
|
|
101
|
-
definida, el paso se omite sin afectar el score — diseño zero-config):
|
|
102
|
-
|
|
103
|
-
| Variable | Qué audita | Comando |
|
|
104
|
-
|----------|-----------|---------|
|
|
105
|
-
| `SWL_AUDIT_SKILLS=1` | Prompt injection, secretos, URLs sospechosas y estructura en SKILL.md | `bash scripts/audit-skills.sh` (requiere `uv`) |
|
|
106
|
-
| `SWL_AUDIT_FRAMEWORKS=1` | Cobertura de NIST CSF/AI RMF, MITRE ATLAS/ATT&CK, D3FEND en skills de seguridad | `npx -y @saulwade/swl-ses@latest audit-coverage-frameworks --resumen` |
|
|
107
|
-
| `SWL_AUDIT_AGENTES=1` | Agentes sin Exclusion Clause o Gotchas (anti agent-hijacking) | `npx -y @saulwade/swl-ses@latest audit-agents-gaps --resumen` |
|
|
108
|
-
|
|
109
|
-
**Verificación de drift de skills** (si existe `manifiestos/skills-lock.json`):
|
|
110
|
-
```bash
|
|
111
|
-
npx -y @saulwade/swl-ses@latest generate-skills-lock --check
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
**Smoke test de MCP** (si hay servers en `.claude/settings.json` o configs globales):
|
|
115
|
-
```bash
|
|
116
|
-
python scripts/mcp-orchestrator.py status --json 2>/dev/null
|
|
117
|
-
```
|
|
118
|
-
Detecta drift de apiKeys (`40101`), binarios faltantes y `"env": {}` que rompe la
|
|
119
|
-
herencia de variables — antes de que fallen en uso interactivo.
|
|
120
|
-
|
|
121
|
-
Formato de salida enriquecido vía `scripts/lib/health-row.js` (barras Unicode;
|
|
122
|
-
respeta `NO_COLOR` y `SWL_ASCII_SIMPLE=1`). Genera `SALUD.md` con los datos
|
|
123
|
-
exactos de los scripts — sin ajustar el score "porque parece sano".
|
|
124
|
-
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Subcomando: `metricas`
|
|
128
|
-
|
|
129
|
-
Métricas acumuladas de la **sesión actual**: tokens, costo estimado USD, tool
|
|
130
|
-
calls y distribución por herramienta, más el estado del presupuesto configurado.
|
|
131
|
-
|
|
132
|
-
**Fuentes de datos**:
|
|
133
|
-
```bash
|
|
134
|
-
# 1. Bridge de tracking de la sesión (generado por el hook de costos)
|
|
135
|
-
ls /tmp/swl-costs-*.json 2>/dev/null | sort -t- -k3 -n | tail -1
|
|
136
|
-
# 2. Métricas persistidas del proyecto
|
|
137
|
-
cat .planning/METRICAS.md 2>/dev/null || echo "(sin métricas previas)"
|
|
138
|
-
# 3. Presupuesto configurado
|
|
139
|
-
node -e "const c=require('./manifiestos/hooks-config.json').costBudget||{}; console.log('maxUsd:',c.maxUsd??'no configurado','| maxTokens:',c.maxTokens??'no configurado','| alertAt:',c.alertAt??'no configurado')"
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
Construir el resumen con: tool calls totales, tokens, costo estimado, modelo
|
|
143
|
-
predominante, estado de presupuesto (`OK`/`ALERTA`/`EXCEDIDO`) y top 5
|
|
144
|
-
herramientas por costo. Si el estado es ALERTA (≥ `alertAt`), sugerir
|
|
145
|
-
`/swl:compactar`. Si EXCEDIDO, recomendar revisar `manifiestos/hooks-config.json`.
|
|
146
|
-
|
|
147
|
-
### `metricas detalle`
|
|
148
|
-
|
|
149
|
-
Desglose completo: tabla por herramienta (calls, tokens entrada/salida, costo),
|
|
150
|
-
desglose por agente SWL desde `costePorAgente` del bridge, comparativa histórica
|
|
151
|
-
contra `~/.claude/usage.db` (últimos 30 días) y timeline de actividad por bloques
|
|
152
|
-
de 5 minutos.
|
|
153
|
-
|
|
154
|
-
### `metricas fases`
|
|
155
|
-
|
|
156
|
-
Progreso de fases del proyecto. Regenera primero el JSON derivado de
|
|
157
|
-
`HOJA-RUTA.md` (fuente de verdad) y lo lee:
|
|
158
|
-
```bash
|
|
159
|
-
|
|
160
|
-
cat .planning/feature-list.json
|
|
161
|
-
```
|
|
162
|
-
Reporta totales por estado canónico (`completado`, `en_progreso`, `pendiente`,
|
|
163
|
-
`bloqueado`, `spec_listo`), lista de fases con marca visual y artefactos
|
|
164
|
-
presentes (`[PLAN]`/`[RESUMEN]`), y timestamp de generación. Detección de drift:
|
|
165
|
-
`node scripts/derivar-feature-list.js --check` (exit 2 si drift).
|
|
166
|
-
|
|
167
|
-
### Notas de precisión
|
|
168
|
-
|
|
169
|
-
Los costos son estimaciones según precios publicados de la API de Anthropic. El
|
|
170
|
-
real varía por modelo efectivo, caché de prompt y región/plan. Para costos
|
|
171
|
-
exactos, el dashboard de Anthropic Console.
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## Subcomando: `loops`
|
|
176
|
-
|
|
177
|
-
Trayectorias de loops iterativos registradas
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
**
|
|
212
|
-
(
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
**
|
|
241
|
-
`.
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
- `
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
`.planning/MCP_REGISTRY.md`.
|
|
335
|
-
|
|
336
|
-
---
|
|
337
|
-
|
|
338
|
-
## Reglas de comportamiento
|
|
339
|
-
|
|
340
|
-
- `salud` y `evolucion` son **solo lectura** (salvo que `salud` genera `SALUD.md`).
|
|
341
|
-
Para corregir, usar `/swl:evolucionar`.
|
|
342
|
-
- Las verificaciones de `salud` son scripts deterministas — no usar juicio
|
|
343
|
-
subjetivo ni ajustar scores "porque parece sano".
|
|
344
|
-
- Los reportes opt-in de auditoría (`SWL_AUDIT_SKILLS`, `SWL_AUDIT_FRAMEWORKS`,
|
|
345
|
-
`SWL_AUDIT_AGENTES`) nunca bloquean el diagnóstico: si fallan (red,
|
|
346
|
-
dependencia, paquete no publicado), el flujo continúa.
|
|
347
|
-
- Respetar `--json` como salida cruda sin prosa donde aplique (`evolucion`).
|
|
348
|
-
- No reintroducir los comandos eliminados: este comando los reemplaza.
|
|
1
|
+
---
|
|
2
|
+
name: swl:status
|
|
3
|
+
description: Comando unificado de observabilidad del sistema y la sesión. Enruta a subcomandos [salud | metricas | loops | evolucion | historico | dashboard] que reportan salud del sistema SWL, métricas de la sesión actual, trayectorias de loops iterativos, estado del ciclo de auto-evolución y dashboard histórico multi-sesión. Reemplaza los comandos previos /swl:salud, /swl:metricas, /swl:dashboard y /swl:evolucion-estado (fusionados en este desde la Fase 09).
|
|
4
|
+
allowed_tools: ["Read", "Write", "Bash", "Glob", "Grep"]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# /swl:status <subcomando> — Observabilidad unificada
|
|
8
|
+
|
|
9
|
+
Punto único de observabilidad de swl-ses. Fusiona los cuatro comandos previos de
|
|
10
|
+
diagnóstico en un router con subcomandos. Cada subcomando delega exactamente en
|
|
11
|
+
la misma lógica (skill o script) que usaba el comando original — sin pérdida de
|
|
12
|
+
funcionalidad ni de flags.
|
|
13
|
+
|
|
14
|
+
## Uso
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
/swl:status salud — Diagnóstico de salud del sistema SWL (genera SALUD.md)
|
|
18
|
+
/swl:status metricas — Métricas de la sesión actual (tokens, costo, herramientas)
|
|
19
|
+
/swl:status metricas detalle — Desglose completo por herramienta, agente y timeline
|
|
20
|
+
/swl:status metricas fases — Progreso de fases del proyecto (desde feature-list.json)
|
|
21
|
+
/swl:status loops — Trayectorias de loops iterativos (.planning/loops/)
|
|
22
|
+
/swl:status evolucion — Estado del ciclo de auto-evolución (health_score, nudges…)
|
|
23
|
+
/swl:status evolucion --json — JSON crudo de metricas.json (para pipes)
|
|
24
|
+
/swl:status evolucion --dias=N — Regenera métricas con ventana de N días (default 14)
|
|
25
|
+
/swl:status evolucion --regenerar — Fuerza recomputo del hook ciclo-evolucion.js (etapa métricas)
|
|
26
|
+
/swl:status dora — Métricas DORA del proyecto destino (deploy freq, lead time, CFR, MTTR)
|
|
27
|
+
/swl:status dora --dias=N — Ventana de medición de N días (default 30)
|
|
28
|
+
/swl:status historico — Dashboard histórico multi-sesión (web, auto-puerto)
|
|
29
|
+
/swl:status dashboard — Alias de historico
|
|
30
|
+
/swl:status dashboard --port 9090 — Fuerza puerto específico del dashboard
|
|
31
|
+
/swl:status dashboard today — Resumen de consumo del día (terminal)
|
|
32
|
+
/swl:status dashboard stats — Estadísticas históricas all-time (terminal)
|
|
33
|
+
/swl:status dashboard scan — Sincroniza JSONL → SQLite sin abrir el dashboard
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Sin subcomando: pide al usuario cuál quiere, o muestra `salud` + `metricas`
|
|
37
|
+
como vista por defecto si el contexto lo sugiere.
|
|
38
|
+
|
|
39
|
+
## Tabla de enrutamiento (delegación 1:1)
|
|
40
|
+
|
|
41
|
+
| Subcomando | Delega en | Origen previo |
|
|
42
|
+
|------------|-----------|---------------|
|
|
43
|
+
| `salud` | `Skill("validacion-ci-sistema")` | `/swl:salud` |
|
|
44
|
+
| `metricas` (+ `detalle`, `fases`) | scripts de métricas de sesión + `derivar-feature-list.js` | `/swl:metricas` |
|
|
45
|
+
| `loops` | `hooks/lib/loop-telemetry.js` | `/swl:metricas loops` |
|
|
46
|
+
| `evolucion` | `hooks/ciclo-evolucion.js` (etapa métricas) + `.planning/evolution/metricas.json` | `/swl:evolucion-estado` |
|
|
47
|
+
| `dora` | `scripts/lib/metricas-dora.js` + `.planning/evolution/metricas-dora.json` | nuevo (Fase 15, ADR-0039) |
|
|
48
|
+
| `historico` / `dashboard` | `Skill("swl-dashboard")` | `/swl:dashboard` |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Subcomando: `salud`
|
|
53
|
+
|
|
54
|
+
Diagnóstico de salud del sistema SWL con **verificaciones deterministas**
|
|
55
|
+
(conteos, existencia de campos, sintaxis). Genera `SALUD.md` con score objetivo.
|
|
56
|
+
**Solo lectura** — no modifica nada salvo `SALUD.md`. Para corregir problemas,
|
|
57
|
+
usar `/swl:evolucionar`.
|
|
58
|
+
|
|
59
|
+
**Paso 0 — Detección host vs consumidor (gate determinista, OBLIGATORIO)**:
|
|
60
|
+
|
|
61
|
+
`salud` audita los componentes del sistema SWL con un score ponderado. Ese score
|
|
62
|
+
solo tiene sentido en el repo que **hospeda** los componentes (swl-ses o un fork).
|
|
63
|
+
En un proyecto **consumidor** (usa las convenciones SWL vía `~/.claude/` pero no
|
|
64
|
+
aloja `agentes/`, `habilidades/`, `comandos/swl/`, `reglas/`, `hooks/`), el
|
|
65
|
+
inventario daría 0 y un score `0/100` sería señal falsa. Esta distinción es
|
|
66
|
+
**determinista**, NO juicio del agente:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
swl-ses detectar-host --json
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
- Si `esHost: true` → continuar con el diagnóstico normal (Carga + pasos siguientes).
|
|
73
|
+
- Si `esHost: false` → **NO** calcular score de componentes ni generar `SALUD.md`
|
|
74
|
+
con `0/100`. Reportar el campo `razon` y la lista `sugerencias` (subcomandos de
|
|
75
|
+
`/swl:status` que sí aplican aquí: `metricas`, `loops`, `evolucion`, `dashboard`).
|
|
76
|
+
Ofrecer ejecutar uno de ellos. Terminar sin penalizar el score.
|
|
77
|
+
|
|
78
|
+
**Carga**: `Skill("validacion-ci-sistema")` — contiene las reglas de validación
|
|
79
|
+
por componente (agentes, skills, hooks, comandos, reglas), la tabla de exit codes
|
|
80
|
+
y el checklist de integridad. Toda la lógica de verificación vive en el skill.
|
|
81
|
+
|
|
82
|
+
**Cuándo usar**: antes de iniciar proyecto nuevo, tras modificar agentes/skills
|
|
83
|
+
manualmente, tras merge/pull, o como mantenimiento mensual.
|
|
84
|
+
|
|
85
|
+
**Score global ponderado**:
|
|
86
|
+
```
|
|
87
|
+
Score = agentes×0.30 + skills×0.25 + comandos×0.20 + reglas×0.15 + hooks×0.10
|
|
88
|
+
90-100 Excelente · 75-89 Saludable · 60-74 Funcional · <60 Crítico
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
**Pasos siempre activos**: inventario determinista, detección de tier del proyecto
|
|
92
|
+
(Simple <500 / Standard 500-5000 / Complex >5000 archivos), diagnóstico de los 5
|
|
93
|
+
componentes, y calidad de `CLAUDE.md` (ADR-0016):
|
|
94
|
+
```bash
|
|
95
|
+
npx -y @saulwade/swl-ses@latest audit-claudemd --json
|
|
96
|
+
```
|
|
97
|
+
Umbrales ajustables: `SWL_CLAUDEMD_MAX_LINES` (default 200),
|
|
98
|
+
`SWL_CLAUDEMD_MAX_BULLET_CHARS` (default 1000).
|
|
99
|
+
|
|
100
|
+
**Auditorías opt-in** (cada una se activa con su variable de entorno; si no está
|
|
101
|
+
definida, el paso se omite sin afectar el score — diseño zero-config):
|
|
102
|
+
|
|
103
|
+
| Variable | Qué audita | Comando |
|
|
104
|
+
|----------|-----------|---------|
|
|
105
|
+
| `SWL_AUDIT_SKILLS=1` | Prompt injection, secretos, URLs sospechosas y estructura en SKILL.md | `bash scripts/audit-skills.sh` (requiere `uv`) |
|
|
106
|
+
| `SWL_AUDIT_FRAMEWORKS=1` | Cobertura de NIST CSF/AI RMF, MITRE ATLAS/ATT&CK, D3FEND en skills de seguridad | `npx -y @saulwade/swl-ses@latest audit-coverage-frameworks --resumen` |
|
|
107
|
+
| `SWL_AUDIT_AGENTES=1` | Agentes sin Exclusion Clause o Gotchas (anti agent-hijacking) | `npx -y @saulwade/swl-ses@latest audit-agents-gaps --resumen` |
|
|
108
|
+
|
|
109
|
+
**Verificación de drift de skills** (si existe `manifiestos/skills-lock.json`):
|
|
110
|
+
```bash
|
|
111
|
+
npx -y @saulwade/swl-ses@latest generate-skills-lock --check
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**Smoke test de MCP** (si hay servers en `.claude/settings.json` o configs globales):
|
|
115
|
+
```bash
|
|
116
|
+
python scripts/mcp-orchestrator.py status --json 2>/dev/null
|
|
117
|
+
```
|
|
118
|
+
Detecta drift de apiKeys (`40101`), binarios faltantes y `"env": {}` que rompe la
|
|
119
|
+
herencia de variables — antes de que fallen en uso interactivo.
|
|
120
|
+
|
|
121
|
+
Formato de salida enriquecido vía `scripts/lib/health-row.js` (barras Unicode;
|
|
122
|
+
respeta `NO_COLOR` y `SWL_ASCII_SIMPLE=1`). Genera `SALUD.md` con los datos
|
|
123
|
+
exactos de los scripts — sin ajustar el score "porque parece sano".
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Subcomando: `metricas`
|
|
128
|
+
|
|
129
|
+
Métricas acumuladas de la **sesión actual**: tokens, costo estimado USD, tool
|
|
130
|
+
calls y distribución por herramienta, más el estado del presupuesto configurado.
|
|
131
|
+
|
|
132
|
+
**Fuentes de datos**:
|
|
133
|
+
```bash
|
|
134
|
+
# 1. Bridge de tracking de la sesión (generado por el hook de costos)
|
|
135
|
+
ls /tmp/swl-costs-*.json 2>/dev/null | sort -t- -k3 -n | tail -1
|
|
136
|
+
# 2. Métricas persistidas del proyecto
|
|
137
|
+
cat .planning/METRICAS.md 2>/dev/null || echo "(sin métricas previas)"
|
|
138
|
+
# 3. Presupuesto configurado
|
|
139
|
+
node -e "const c=require('./manifiestos/hooks-config.json').costBudget||{}; console.log('maxUsd:',c.maxUsd??'no configurado','| maxTokens:',c.maxTokens??'no configurado','| alertAt:',c.alertAt??'no configurado')"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Construir el resumen con: tool calls totales, tokens, costo estimado, modelo
|
|
143
|
+
predominante, estado de presupuesto (`OK`/`ALERTA`/`EXCEDIDO`) y top 5
|
|
144
|
+
herramientas por costo. Si el estado es ALERTA (≥ `alertAt`), sugerir
|
|
145
|
+
`/swl:compactar`. Si EXCEDIDO, recomendar revisar `manifiestos/hooks-config.json`.
|
|
146
|
+
|
|
147
|
+
### `metricas detalle`
|
|
148
|
+
|
|
149
|
+
Desglose completo: tabla por herramienta (calls, tokens entrada/salida, costo),
|
|
150
|
+
desglose por agente SWL desde `costePorAgente` del bridge, comparativa histórica
|
|
151
|
+
contra `~/.claude/usage.db` (últimos 30 días) y timeline de actividad por bloques
|
|
152
|
+
de 5 minutos.
|
|
153
|
+
|
|
154
|
+
### `metricas fases`
|
|
155
|
+
|
|
156
|
+
Progreso de fases del proyecto. Regenera primero el JSON derivado de
|
|
157
|
+
`HOJA-RUTA.md` (fuente de verdad) y lo lee:
|
|
158
|
+
```bash
|
|
159
|
+
swl-ses derivar-feature-list
|
|
160
|
+
cat .planning/feature-list.json
|
|
161
|
+
```
|
|
162
|
+
Reporta totales por estado canónico (`completado`, `en_progreso`, `pendiente`,
|
|
163
|
+
`bloqueado`, `spec_listo`), lista de fases con marca visual y artefactos
|
|
164
|
+
presentes (`[PLAN]`/`[RESUMEN]`), y timestamp de generación. Detección de drift:
|
|
165
|
+
`node scripts/derivar-feature-list.js --check` (exit 2 si drift).
|
|
166
|
+
|
|
167
|
+
### Notas de precisión
|
|
168
|
+
|
|
169
|
+
Los costos son estimaciones según precios publicados de la API de Anthropic. El
|
|
170
|
+
real varía por modelo efectivo, caché de prompt y región/plan. Para costos
|
|
171
|
+
exactos, el dashboard de Anthropic Console.
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## Subcomando: `loops`
|
|
176
|
+
|
|
177
|
+
Trayectorias de loops iterativos registradas en `.planning/loops/`. Subcomando
|
|
178
|
+
del CLI (resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`):
|
|
179
|
+
```bash
|
|
180
|
+
swl-ses loop-telemetry listar
|
|
181
|
+
# fallback: npx -y @saulwade/swl-ses@latest loop-telemetry listar
|
|
182
|
+
```
|
|
183
|
+
Reportar en tabla: corrida, iteraciones, keep/revert rate, métrica inicial →
|
|
184
|
+
final, plateau y status. Si una corrida activa muestra plateau, sugerir cerrarla
|
|
185
|
+
— iterar sin mejora quema tokens.
|
|
186
|
+
|
|
187
|
+
---
|
|
188
|
+
|
|
189
|
+
## Subcomando: `evolucion`
|
|
190
|
+
|
|
191
|
+
Estado del ciclo de auto-evolución en la ventana reciente (default 14 días).
|
|
192
|
+
Responde con datos a "¿el sistema está aprendiendo?".
|
|
193
|
+
|
|
194
|
+
**Flags**: `--json` (emite el JSON crudo de `metricas.json`), `--dias=N`
|
|
195
|
+
(ventana de N días), `--regenerar` (fuerza recomputo del hook).
|
|
196
|
+
|
|
197
|
+
**Paso 0 — métricas frescas** (si `--regenerar` o `metricas.json` > 24h).
|
|
198
|
+
Subcomando del CLI (resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`):
|
|
199
|
+
```bash
|
|
200
|
+
swl-ses ciclo-evolucion
|
|
201
|
+
# fallback: npx -y @saulwade/swl-ses@latest ciclo-evolucion
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
**Paso 1 — cargar**:
|
|
205
|
+
```bash
|
|
206
|
+
cat .planning/evolution/metricas.json
|
|
207
|
+
```
|
|
208
|
+
Si no existe, ejecutar el regenerado; si sigue sin existir, reportar que el ciclo
|
|
209
|
+
no ha corrido aún.
|
|
210
|
+
|
|
211
|
+
**Dashboard** (formato humano) con secciones: health_score + badge, NUDGES
|
|
212
|
+
(emitidos/accionados/pendientes por tipo), INSTINTOS (proyecto/global/perfil),
|
|
213
|
+
AGENTES (runs/fallos/tasa), EVOLUCIONES (aplicadas/revertidas/rollback ratio),
|
|
214
|
+
CALIDAD CONDUCTUAL (fallos por tipo, reintentos, latencia), ALERTAS PERSISTENTES
|
|
215
|
+
y KERNEL (gobernanza: política evolvable, último ADR kernel, ratio
|
|
216
|
+
`evolvable=false`/total).
|
|
217
|
+
|
|
218
|
+
**Badges**: ≥90 🏆 Óptimo · ≥75 🥇 Saludable · ≥60 🥈 Parcial · ≥40 🥉 Esqueleto
|
|
219
|
+
· <40 ⚠️ Dormido.
|
|
220
|
+
|
|
221
|
+
**Recomendaciones contextuales** (máx 3, al final): bootstrap de instintos si
|
|
222
|
+
`instintos.proyecto==0` y `aprendizajes>10`; revisar alertas si `tasaAccion<0.3`;
|
|
223
|
+
candidatos a `/swl:evolucionar` si `tasaExito<70`; etc.
|
|
224
|
+
|
|
225
|
+
**Anti-substitution**: el archivo de métricas es **siempre**
|
|
226
|
+
`.planning/evolution/metricas.json` (nunca `.planning/metricas.json` ni variantes);
|
|
227
|
+
el hook que regenera es **siempre** `hooks/ciclo-evolucion.js` (etapa métricas, Fase 11); para forzar
|
|
228
|
+
regen usar el pipe `echo '{}' | node ...`, nunca `require()` directo.
|
|
229
|
+
|
|
230
|
+
**Response discipline**: con `--json`, la respuesta es el contenido crudo del
|
|
231
|
+
archivo, sin prosa.
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Subcomando: `dora`
|
|
236
|
+
|
|
237
|
+
Métricas DORA (DevOps Research and Assessment) del **proyecto destino** donde SWL
|
|
238
|
+
está instalado: deployment frequency, lead time for changes, change failure rate
|
|
239
|
+
y MTTR, cada una clasificada en elite/high/medium/low (umbrales DORA Report 2023).
|
|
240
|
+
Mide **velocidad de entrega**, ortogonal a la reliability en runtime de
|
|
241
|
+
`observabilidad-swl`/`sre-swl`. Solo lectura salvo el JSON de storage.
|
|
242
|
+
|
|
243
|
+
**Portabilidad** (D-15-01): deployment frequency + lead time se derivan de git
|
|
244
|
+
(tags de release + commits) y están **siempre** disponibles. Change failure rate
|
|
245
|
+
+ MTTR requieren `gh` (GitHub CLI) autenticado; si `gh` falta, no está autenticado,
|
|
246
|
+
o el repo no tiene remoto GitHub, esas dos reportan "no disponible" **sin fallar**.
|
|
247
|
+
|
|
248
|
+
**Paso 0 — calcular/regenerar**:
|
|
249
|
+
```bash
|
|
250
|
+
swl-ses metricas-dora --json [--dias=N]
|
|
251
|
+
```
|
|
252
|
+
Regenera siempre que se invoque el subcomando (la medición es barata) o cuando se
|
|
253
|
+
pase `--dias=N` (ventana en días, default 30). El script persiste el informe en
|
|
254
|
+
`.planning/evolution/metricas-dora.json` (runtime, gitignored).
|
|
255
|
+
|
|
256
|
+
**Paso 1 — render**: presentar las 4 métricas con su valor y clasificación:
|
|
257
|
+
|
|
258
|
+
```
|
|
259
|
+
Métricas DORA — ventana de 30 días
|
|
260
|
+
|
|
261
|
+
Deployment frequency: 2.30 deploys/semana [high]
|
|
262
|
+
Lead time (p50): 18.4 h [high]
|
|
263
|
+
Change failure rate: no disponible (gh ausente)
|
|
264
|
+
MTTR: no disponible (gh ausente)
|
|
265
|
+
```
|
|
266
|
+
|
|
267
|
+
Reglas de render:
|
|
268
|
+
- Si una métrica git reporta `sinDatos: true` (proyecto sin tags de release),
|
|
269
|
+
mostrar "sin datos" — distinto de "frecuencia baja". El informe NO penaliza:
|
|
270
|
+
un proyecto sin releases no es "low", es "sin datos".
|
|
271
|
+
- Si `changeFailureRate`/`mttr` traen `disponible: false`, mostrar
|
|
272
|
+
"no disponible (gh ausente)" con la `razon` si ayuda — nunca como error.
|
|
273
|
+
- Tras el render, si CFR/MTTR no están disponibles, sugerir (1 línea) instalar y
|
|
274
|
+
autenticar `gh` para habilitarlas; no es obligatorio.
|
|
275
|
+
|
|
276
|
+
**Anti-substitution**: el archivo de storage es **siempre**
|
|
277
|
+
`.planning/evolution/metricas-dora.json` (nunca `metricas.json`, que es del ciclo
|
|
278
|
+
de evolución); el script es **siempre** `scripts/lib/metricas-dora.js`.
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Subcomando: `historico` / `dashboard`
|
|
283
|
+
|
|
284
|
+
Dashboard histórico multi-sesión vía `claude-usage` (vendored). Complementa
|
|
285
|
+
`metricas` (sesión actual) con perspectiva multi-sesión y gráficos interactivos.
|
|
286
|
+
|
|
287
|
+
**Carga**: `Skill("swl-dashboard")` con el subcomando indicado:
|
|
288
|
+
- (vacío) o `historico` → dashboard web (auto-detecta puerto: 8888, 9090, 9191…)
|
|
289
|
+
- `--port N` → fuerza un puerto
|
|
290
|
+
- `today` → resumen del día en terminal
|
|
291
|
+
- `stats` → estadísticas históricas all-time en terminal
|
|
292
|
+
- `scan` → solo sincroniza JSONL → SQLite sin abrir el dashboard
|
|
293
|
+
|
|
294
|
+
### Integración con Mission Control (opt-in)
|
|
295
|
+
|
|
296
|
+
Dashboard web externo para orquestación de flotas de agentes. **Completamente
|
|
297
|
+
opcional** — el dashboard local funciona igual sin configurarlo.
|
|
298
|
+
|
|
299
|
+
| Variable | Descripción | Ejemplo |
|
|
300
|
+
|----------|-------------|---------|
|
|
301
|
+
| `SWL_MC_URL` | URL base de la instancia de MC | `http://localhost:3000` |
|
|
302
|
+
| `SWL_MC_TOKEN` | API key de MC (si hay auth) | `mc-key-abc123` |
|
|
303
|
+
|
|
304
|
+
- Con `SWL_MC_URL` definida: el comando detecta MC (vía `scripts/lib/mc-client.js`)
|
|
305
|
+
y ofrece redirigir al panel web. Si MC no responde en 2s, fallback graceful al
|
|
306
|
+
dashboard local con mensaje informativo (sin crash ni degradación silenciosa).
|
|
307
|
+
- Sin `SWL_MC_URL`: dashboard local sin cambios (zero-config).
|
|
308
|
+
|
|
309
|
+
Instalar MC (opcional): `git clone https://github.com/builderzlabs/mission-control`
|
|
310
|
+
→ `docker compose up` (requiere Node ≥22, pnpm; genera su API key al primer
|
|
311
|
+
arranque). MC expone además un **servidor MCP con ~49 tools** (agentes, memoria,
|
|
312
|
+
soul, tareas, sesiones, tokens/costos, skills, cron, runs/evals). swl-ses **NO**
|
|
313
|
+
modifica `.claude/settings.json` automáticamente — el registro del MCP es manual.
|
|
314
|
+
|
|
315
|
+
**Seguridad**: el MCP de MC incluye tools de **escritura** (`mc_create_task`,
|
|
316
|
+
`mc_write_memory`, `mc_write_soul`…). Antes de activarlo, evaluar exposición de
|
|
317
|
+
red, permisos mínimos de la API key y confianza en los agentes que lo invocarán.
|
|
318
|
+
La regla `seguridad-agentes.md` recomienda documentarlo en
|
|
319
|
+
`.planning/MCP_REGISTRY.md`.
|
|
320
|
+
|
|
321
|
+
---
|
|
322
|
+
|
|
323
|
+
## Reglas de comportamiento
|
|
324
|
+
|
|
325
|
+
- `salud` y `evolucion` son **solo lectura** (salvo que `salud` genera `SALUD.md`).
|
|
326
|
+
Para corregir, usar `/swl:evolucionar`.
|
|
327
|
+
- Las verificaciones de `salud` son scripts deterministas — no usar juicio
|
|
328
|
+
subjetivo ni ajustar scores "porque parece sano".
|
|
329
|
+
- Los reportes opt-in de auditoría (`SWL_AUDIT_SKILLS`, `SWL_AUDIT_FRAMEWORKS`,
|
|
330
|
+
`SWL_AUDIT_AGENTES`) nunca bloquean el diagnóstico: si fallan (red,
|
|
331
|
+
dependencia, paquete no publicado), el flujo continúa.
|
|
332
|
+
- Respetar `--json` como salida cruda sin prosa donde aplique (`evolucion`).
|
|
333
|
+
- No reintroducir los comandos eliminados: este comando los reemplaza.
|