@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
|
@@ -15,6 +15,14 @@ a mano (`estado: aprobado`) deja el plan en modo legacy (cláusula de gracia D-0
|
|
|
15
15
|
se ejecuta con advertencia pero sin protección de integridad. Usar este comando
|
|
16
16
|
es lo que activa el gate real.
|
|
17
17
|
|
|
18
|
+
> **Invocación cross-scope** (ver `@docs/invocacion-cli-cross-scope.md`): las
|
|
19
|
+
> partes deterministas del gate viven en subcomandos del CLI. Resuélvelos así:
|
|
20
|
+
> si existe `./scripts/cli/<sub>.js` (repo madre) usa `node scripts/cli/<sub>.js`;
|
|
21
|
+
> si `command -v swl-ses` responde usa `swl-ses <sub>`; si no,
|
|
22
|
+
> `npx -y @saulwade/swl-ses@latest <sub>`. Abajo escribo la forma `swl-ses <sub>`
|
|
23
|
+
> como canónica. NUNCA uses `node -e "require('./scripts/lib/...')"` — esa ruta no
|
|
24
|
+
> existe en proyectos downstream.
|
|
25
|
+
|
|
18
26
|
## Uso
|
|
19
27
|
|
|
20
28
|
```
|
|
@@ -37,7 +45,7 @@ Lee el campo `estado:` del frontmatter:
|
|
|
37
45
|
- Si `estado: borrador` → continúa al Paso 3 (caso normal).
|
|
38
46
|
- Si `estado: aprobado` → ya está aprobado. Verifica si existe el lock:
|
|
39
47
|
```bash
|
|
40
|
-
|
|
48
|
+
swl-ses verificar-plan --fase=N
|
|
41
49
|
```
|
|
42
50
|
- Si `modo: "firmado"` → informa "El plan ya está aprobado y firmado." y termina.
|
|
43
51
|
- Si `modo: "legacy"` (aprobado sin lock) → pregunta al usuario: "El plan está
|
|
@@ -59,7 +67,7 @@ aceptación. `verificar-trazabilidad.js` reconoce ambos formatos.
|
|
|
59
67
|
("CONTEXTO sin REQ-IDs — trazabilidad no exigible, gracia legacy") y continúa.
|
|
60
68
|
- **CONTEXTO con REQ-IDs**: verifica que el PLAN cubra TODOS:
|
|
61
69
|
```bash
|
|
62
|
-
|
|
70
|
+
swl-ses verificar-trazabilidad --fase=N --solo-plan
|
|
63
71
|
```
|
|
64
72
|
- Exit 0 → continúa al Paso 3.
|
|
65
73
|
- Exit 1 (REQ huérfanos) → **RECHAZA la aprobación**. Lista los REQ sin tarea y
|
|
@@ -86,41 +94,21 @@ a `/swl:planear-fase N` para refinar.
|
|
|
86
94
|
edita el frontmatter `estado: borrador` → `estado: aprobado` y agrega
|
|
87
95
|
`aprobadoPor: usuario (<nombre>) — <fecha>, via /swl:aprobar-plan`.
|
|
88
96
|
|
|
89
|
-
2. **Firmar** —
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
Verifica que el resultado sea `ok: true` y que exista
|
|
94
|
-
`.planning/locks/0N-PLAN.md.lock`.
|
|
95
|
-
|
|
96
|
-
3. **Verificar** la firma de inmediato:
|
|
97
|
-
```bash
|
|
98
|
-
node -e "const {verificarPlan}=require('./scripts/lib/plan-lock'); console.log(JSON.stringify(verificarPlan('.planning/fases/0N-PLAN.md')))"
|
|
99
|
-
```
|
|
100
|
-
Debe retornar `modo: "firmado"`, `ok: true`.
|
|
101
|
-
|
|
102
|
-
4. **Marcar la fase como activa** (gate G0 — `hooks/spec-gate.js` consume este
|
|
103
|
-
archivo): escribe `.planning/locks/fase-activa.json` con el sha256 devuelto
|
|
104
|
-
por `firmarPlan`:
|
|
97
|
+
2. **Firmar y marcar la fase activa** — un solo subcomando hace las tres
|
|
98
|
+
operaciones deterministas: firma SHA256 → `.planning/locks/0N-PLAN.md.lock`,
|
|
99
|
+
verifica la firma, y escribe `.planning/locks/fase-activa.json` (gate G0 que
|
|
100
|
+
consume `hooks/spec-gate.js`):
|
|
105
101
|
```bash
|
|
106
|
-
|
|
107
|
-
const {atomicWriteJSON} = require('./hooks/lib/atomic-write');
|
|
108
|
-
const {verificarPlan} = require('./scripts/lib/plan-lock');
|
|
109
|
-
const v = verificarPlan('.planning/fases/0N-PLAN.md');
|
|
110
|
-
atomicWriteJSON('.planning/locks/fase-activa.json', {
|
|
111
|
-
numero: N,
|
|
112
|
-
planPath: '.planning/fases/0N-PLAN.md',
|
|
113
|
-
sha256: v.hashEsperado,
|
|
114
|
-
aprobadoEn: new Date().toISOString(),
|
|
115
|
-
aprobadoPor: 'usuario via /swl:aprobar-plan'
|
|
116
|
-
});
|
|
117
|
-
console.log('fase activa: 0N');
|
|
118
|
-
"
|
|
102
|
+
swl-ses aprobar-plan --fase=N
|
|
119
103
|
```
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
104
|
+
Verifica en la salida JSON que `ok: true` y `modo: "firmado"`. Si reporta
|
|
105
|
+
error de firma, **NO continúes** — revisa el `motivo`.
|
|
106
|
+
|
|
107
|
+
El `.lock` SÍ se versiona en git (evidencia de aprobación, parte del audit
|
|
108
|
+
trail SDD). El `fase-activa.json` es runtime local (gitignored);
|
|
109
|
+
`/swl:ejecutar-fase` lo elimina al cerrar la fase. Re-ejecutar
|
|
110
|
+
`swl-ses aprobar-plan --fase=N` tras una re-aprobación (plan mutado) realinea
|
|
111
|
+
lock y fase-activa automáticamente.
|
|
124
112
|
|
|
125
113
|
## Paso 5 — Reporte
|
|
126
114
|
|
|
@@ -135,20 +135,15 @@ Resultado: [ÉXITO | PLATEAU | ESTANCAMIENTO | DEGRADACIÓN]
|
|
|
135
135
|
|
|
136
136
|
Si el score mejoró respecto al baseline:
|
|
137
137
|
1. Actualizar versión del skill/agente (< 10 pts: PATCH, >= 10 pts: MINOR)
|
|
138
|
-
2. **OBLIGATORIO — Marcar como evolucionado
|
|
138
|
+
2. **OBLIGATORIO — Marcar como evolucionado** con el subcomando del CLI
|
|
139
|
+
(resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`):
|
|
139
140
|
```bash
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
rounds: [N_ROUNDS],
|
|
147
|
-
score: '[BASELINE]% → [FINAL]%',
|
|
148
|
-
note: '[descripción breve de las mutaciones]'
|
|
149
|
-
});
|
|
150
|
-
console.log(r.marked ? 'Marcado como evolucionado' : 'Error: ' + r.error);
|
|
151
|
-
"
|
|
141
|
+
swl-ses mark-evolved "[RUTA_ARCHIVO_MODIFICADO]" \
|
|
142
|
+
--by=autoresearch \
|
|
143
|
+
--rounds=[N_ROUNDS] \
|
|
144
|
+
--score="[BASELINE]% → [FINAL]%" \
|
|
145
|
+
--note="[descripción breve de las mutaciones]"
|
|
146
|
+
# fallback: npx -y @saulwade/swl-ses@latest mark-evolved "[RUTA]" --by=autoresearch ...
|
|
152
147
|
```
|
|
153
148
|
Reemplazar los placeholders entre corchetes con los valores reales.
|
|
154
149
|
Si el comando Bash no está disponible, agregar manualmente en el frontmatter:
|
|
@@ -220,8 +215,11 @@ Si `--dry-run`: terminar aquí mostrando la configuración derivada.
|
|
|
220
215
|
|
|
221
216
|
### Paso C1 — Baseline y telemetría
|
|
222
217
|
|
|
218
|
+
Subcomando del CLI (resuelve cross-scope; ver `docs/invocacion-cli-cross-scope.md`).
|
|
219
|
+
Imprime el `<dir>` de la corrida:
|
|
220
|
+
|
|
223
221
|
```bash
|
|
224
|
-
|
|
222
|
+
swl-ses loop-telemetry iniciar --tipo=autoresearch --direccion=[direction] --config='{"goal":"[goal]","scope":"[scope]","verify":"[verify]","guard":"[guard]"}'
|
|
225
223
|
```
|
|
226
224
|
|
|
227
225
|
Correr Verify, extraer la métrica, registrar la iteración 0 (`estado:
|
package/comandos/swl/briefing.md
CHANGED
|
@@ -28,12 +28,9 @@ Ejecuta los recolectores de filesystem y presenta el digest sin tope de 5 (aquí
|
|
|
28
28
|
sí caben todas, no hay presupuesto de latencia de arranque):
|
|
29
29
|
|
|
30
30
|
```bash
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
for (const it of items) console.log('— [' + it.categoria + '] ' + it.titulo + ' → ' + it.accion);
|
|
35
|
-
if (items.length === 0) console.log('(sin señales baratas)');
|
|
36
|
-
"
|
|
31
|
+
# Subcomando del CLI (resuelve cross-scope; ver docs/invocacion-cli-cross-scope.md)
|
|
32
|
+
swl-ses briefing
|
|
33
|
+
# fallback: npx -y @saulwade/swl-ses@latest briefing
|
|
37
34
|
```
|
|
38
35
|
|
|
39
36
|
Las 5 categorías: `adr-vencido`, `deuda-trigger`, `nudges-pendientes`,
|
|
@@ -78,11 +75,11 @@ commits sin revisión asociada. Si no está disponible → omitir con nota.
|
|
|
78
75
|
### 2.4 — Drift de feature-list
|
|
79
76
|
|
|
80
77
|
```bash
|
|
81
|
-
|
|
78
|
+
swl-ses derivar-feature-list --check 2>/dev/null; echo "exit: $?"
|
|
82
79
|
```
|
|
83
80
|
|
|
84
81
|
Exit 2 → reportar que `HOJA-RUTA.md` y `feature-list.json` divergieron, con la
|
|
85
|
-
acción `
|
|
82
|
+
acción `swl-ses derivar-feature-list` para regenerar.
|
|
86
83
|
|
|
87
84
|
### 2.5 — Deuda con trigger en prosa libre
|
|
88
85
|
|
|
@@ -221,24 +221,19 @@ cat .planning/execution-state.json 2>/dev/null || echo "(sin estado de ejecució
|
|
|
221
221
|
```
|
|
222
222
|
|
|
223
223
|
Si existe, actualizar el campo `proximoAgente` con la siguiente tarea pendiente.
|
|
224
|
-
Si no existe y hay un plan en progreso con agentes ejecutados en esta sesión,
|
|
224
|
+
Si no existe y hay un plan en progreso con agentes ejecutados en esta sesión,
|
|
225
|
+
imprimir el resumen estructurado con el subcomando del CLI (resuelve cross-scope;
|
|
226
|
+
ver `docs/invocacion-cli-cross-scope.md`):
|
|
225
227
|
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
// Registrar agentes completados en esta sesión
|
|
231
|
-
// es.completarAgente(cwd, 'nombre-agente', 'slice', { resumen: '...' });
|
|
232
|
-
|
|
233
|
-
// Registrar el próximo agente a ejecutar
|
|
234
|
-
// es.establecerProximo(cwd, 'proximo-agente', 'proximo-slice');
|
|
235
|
-
|
|
236
|
-
// Ver resumen del estado
|
|
237
|
-
console.log(es.formatearResumen(process.cwd()));
|
|
228
|
+
```bash
|
|
229
|
+
swl-ses execution-state
|
|
230
|
+
# fallback: npx -y @saulwade/swl-ses@latest execution-state
|
|
238
231
|
```
|
|
239
232
|
|
|
240
|
-
Incluir
|
|
241
|
-
|
|
233
|
+
Incluir ese resumen en el `continue-here.md` generado en el Paso 4, bajo la
|
|
234
|
+
sección "Qué se estaba haciendo". El registro de agentes
|
|
235
|
+
(`completarAgente`/`establecerProximo`) lo gestiona el skill `ejecutar-fase`
|
|
236
|
+
internamente; aquí solo se lee el resumen.
|
|
242
237
|
|
|
243
238
|
## Paso 4 — Creación del continue-here.md
|
|
244
239
|
|