@saulwade/swl-ses 2.0.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 +196 -196
- package/README.md +579 -579
- package/agentes/_propose-step.md +90 -0
- package/agentes/implementador-swl.md +2 -0
- package/agentes/orquestador-swl.md +2 -0
- package/agentes/perfilador-usuario-swl.md +14 -1
- package/bin/swl-ses.js +64 -1
- package/comandos/swl/adoptar-proyecto.md +258 -255
- package/comandos/swl/aprender.md +828 -840
- package/comandos/swl/aprobar-plan.md +26 -37
- package/comandos/swl/autoresearch.md +12 -14
- package/comandos/swl/briefing.md +119 -0
- package/comandos/swl/checkpoint.md +10 -15
- package/comandos/swl/claudemd.md +239 -234
- package/comandos/swl/compactar.md +29 -2
- package/comandos/swl/configurar-ci.md +20 -19
- package/comandos/swl/cron.md +10 -12
- package/comandos/swl/discutir-fase.md +8 -5
- package/comandos/swl/ejecutar-fase.md +15 -2
- 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/planear-fase.md +5 -3
- package/comandos/swl/release.md +46 -0
- package/comandos/swl/status.md +333 -279
- package/comandos/swl/verificar.md +817 -812
- package/habilidades/changelog-generator/scripts/parse-commits.js +6 -4
- package/habilidades/ejecutar-fase/SKILL.md +541 -518
- package/habilidades/planear-fase/SKILL.md +3 -2
- package/habilidades/swl-claudemd/SKILL.md +10 -6
- package/habilidades/tdd-workflow/SKILL.md +715 -713
- package/habilidades/validacion-ci-sistema/SKILL.md +17 -1
- package/hooks/calidad-pre-commit.js +5 -1
- package/hooks/check-update.js +39 -1
- package/hooks/lib/autonomia.js +208 -0
- package/hooks/lib/briefing.js +474 -0
- package/hooks/lib/propose-step.js +358 -0
- package/hooks/session-briefing.js +98 -0
- package/hooks/telemetria-skill-routing.js +100 -0
- package/instintos/autonomia.yaml +27 -0
- package/llms.txt +4 -4
- package/manifiestos/hooks-config.json +18 -0
- package/manifiestos/modulos.json +25 -3
- package/manifiestos/skills-lock.json +17 -17
- package/package.json +93 -93
- package/plugin.json +371 -371
- package/reglas/analizar-directorios-antes-de-escribir.md +228 -0
- package/reglas/consultar-vault-primero.md +195 -0
- package/reglas/debatir-antes-de-aceptar.md +158 -0
- package/reglas/git-coauthor.md +100 -0
- package/reglas/monitor-ci.md +309 -0
- package/reglas/registro-componentes-nuevos.md +38 -10
- package/reglas/sesiones-paralelas.md +180 -0
- package/reglas/usar-code-review-graph.md +155 -0
- package/reglas/verificar-citas-normativas.md +548 -0
- 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/instalador.js +52 -6
- package/scripts/lib/auditar-invocaciones-comandos.js +104 -0
- package/scripts/lib/ci-reader.js +193 -0
- package/scripts/lib/detectar-host-swl.js +175 -0
- package/scripts/lib/evidencia-release.js +322 -0
- package/scripts/lib/gate-hooks-requires.js +249 -0
- package/scripts/lib/gate-licencias.js +212 -0
- package/scripts/lib/git-metricas.js +257 -0
- package/scripts/lib/metricas-dora.js +204 -0
- package/scripts/lib/resolver-plan-fase.js +37 -0
- package/scripts/tui/ejecutores.js +1 -1
- package/scripts/validar-manifest.js +92 -1
- package/scripts/validar.js +13 -0
- package/scripts/verificar-evolucion.js +54 -4
- package/scripts/verificar-release.js +102 -0
- package/scripts/verificar-trazabilidad.js +12 -6
- package/reglas/arquitectura.evolved.json +0 -7
- package/reglas/seguridad.evolved.json +0 -7
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
Fragmento compartido — Propose-step de adyacencias (Fase 13, ADR-0037)
|
|
3
|
+
Importable desde frontmatter de agente: `fragmentos: [_propose-step]`
|
|
4
|
+
Usar en orquestador-swl e implementador-swl. NO routable, NO invocable con Skill.
|
|
5
|
+
Ver reglas/seguridad-agentes.md y .planning/adrs/0037-propose-step-presupuesto-autonomia.md
|
|
6
|
+
-->
|
|
7
|
+
|
|
8
|
+
## Propose-step — proponer adyacencias, nunca actuar
|
|
9
|
+
|
|
10
|
+
Separa PROPONER de ACTUAR. Al **cerrar una tarea o fase** (no en cada turno),
|
|
11
|
+
evalúas las adyacencias de riesgo del cambio y las emites como **anexo
|
|
12
|
+
propositivo**. El anexo NUNCA bloquea ni ejecuta nada: es texto que el usuario
|
|
13
|
+
lee y decide si actúa.
|
|
14
|
+
|
|
15
|
+
### Cuándo correr
|
|
16
|
+
|
|
17
|
+
- Solo al cerrar una tarea o una fase, sobre el diff de ese cierre.
|
|
18
|
+
- Nunca en mitad de la implementación (evita ruido por turno).
|
|
19
|
+
- Si `SWL_PROPOSE=0`, el propose-step queda desactivado: silencio total.
|
|
20
|
+
|
|
21
|
+
### Cómo evaluar (mecanizado)
|
|
22
|
+
|
|
23
|
+
Ejecuta la lib sobre el diff de la tarea/fase:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
node hooks/lib/propose-step.js --rango=HEAD~1..HEAD
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Imprime el anexo solo si detecta ≥1 señal; silencio si no hay nada. Si la lib
|
|
30
|
+
no está disponible en el destino, evalúa a mano las 2 señales v1:
|
|
31
|
+
|
|
32
|
+
- **auth/PII/pagos**: el diff toca autenticación, datos personales o pagos
|
|
33
|
+
(paths `auth/`, `login`, `session`; patrones `password`, `token`, `secret`,
|
|
34
|
+
`jwt`, `stripe`, `pago`, `curp`, `rfc`). → Sugerir revisión de seguridad y
|
|
35
|
+
tests de autorización.
|
|
36
|
+
- **migración de schema**: el diff toca `models/`, `migrations/`, `*.sql`, o
|
|
37
|
+
contiene `ALTER/CREATE/DROP TABLE`. → Sugerir plan de rollback /
|
|
38
|
+
expand-contract y verificar reversibilidad.
|
|
39
|
+
|
|
40
|
+
### Formato del anexo
|
|
41
|
+
|
|
42
|
+
Solo cuando hay señal. Una sección al final del entregable:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
## Anexo propositivo — adyacencias de riesgo
|
|
46
|
+
|
|
47
|
+
Sugerencias, no acciones: nada se ejecuta ni se bloquea automáticamente.
|
|
48
|
+
|
|
49
|
+
- [auth-pii-pagos] <título> (<evidencia>) → <acción sugerida>
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Las categorías que la telemetría de aceptación silenció (el usuario las ignora
|
|
53
|
+
de forma sostenida) no copan el anexo. La lib lo maneja con
|
|
54
|
+
`categoriasSilenciadasPropose`.
|
|
55
|
+
|
|
56
|
+
## Presupuesto de autonomía — proponer libre, actuar con presupuesto
|
|
57
|
+
|
|
58
|
+
Antes de **actuar** de forma autónoma, consulta el dial de autonomía en
|
|
59
|
+
`instintos/autonomia.yaml` (defaults = `reglas/seguridad-agentes.md`; este
|
|
60
|
+
fragmento NO relaja ningún control). Niveles por clase de riesgo:
|
|
61
|
+
|
|
62
|
+
| Clase | Nivel default | Qué significa |
|
|
63
|
+
|-------|---------------|---------------|
|
|
64
|
+
| lectura/análisis | `total` | Autónomo sin checkpoint. |
|
|
65
|
+
| cambio reversible | `con_auto_checkpoint` | Autónomo, pero registra un auto-checkpoint ANTES de actuar. |
|
|
66
|
+
| migración / auth / push / publish | `hitl` | Confirmación humana siempre. |
|
|
67
|
+
|
|
68
|
+
El dial sube **solo por decisión explícita del usuario**, nunca por tu
|
|
69
|
+
conveniencia. Un valor desconocido en el dial degrada a `hitl`.
|
|
70
|
+
|
|
71
|
+
### Auto-checkpoint (precondición de cambio reversible)
|
|
72
|
+
|
|
73
|
+
Antes de la primera acción autónoma de clase **cambio reversible** de una tarea,
|
|
74
|
+
registra el checkpoint mecánico:
|
|
75
|
+
|
|
76
|
+
```bash
|
|
77
|
+
node hooks/lib/autonomia.js --accion "<descripción corta de la acción>"
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Registra HEAD + archivos modificados en
|
|
81
|
+
`.planning/user-profile/auto-checkpoints.jsonl` como evidencia de rollback (los
|
|
82
|
+
commits atómicos son el mecanismo real de reversibilidad). Es best-effort: no
|
|
83
|
+
bloquea la acción que protege.
|
|
84
|
+
|
|
85
|
+
### Reglas duras
|
|
86
|
+
|
|
87
|
+
- Proponer es siempre permitido; actuar se gobierna por el dial.
|
|
88
|
+
- Para clases `hitl` (migración, auth, push, publish): pausa y pide confirmación.
|
|
89
|
+
- Nunca degradar silenciosamente: si una adyacencia es de alto impacto, repórtala
|
|
90
|
+
en el anexo aunque el dial permita actuar.
|
|
@@ -44,6 +44,8 @@ exclusiones:
|
|
|
44
44
|
- "No invocar para backend Node.js puro — usar backend-node-swl para mayor profundidad en NestJS, Prisma y ecosistema Node."
|
|
45
45
|
- "No invocar sin PLAN.md aprobado para features complejas — primero pasar por planificador-swl."
|
|
46
46
|
- "No invocar para decisiones de arquitectura — esas decisiones corresponden a arquitecto-swl; este agente ejecuta planes, no los diseña."
|
|
47
|
+
fragmentos:
|
|
48
|
+
- _propose-step
|
|
47
49
|
---
|
|
48
50
|
## Cuándo NO invocarme
|
|
49
51
|
|
|
@@ -40,6 +40,8 @@ exclusiones:
|
|
|
40
40
|
- "No invocar para tareas de un solo agente o preguntas técnicas puntuales: el usuario puede invocar el agente especializado directamente sin pasar por el orquestador."
|
|
41
41
|
- "No invocar para tomar decisiones de arquitectura — esas decisiones corresponden a arquitecto-swl; el orquestador solo coordina, no decide."
|
|
42
42
|
- "No invocar cuando ya existe un PLAN.md aprobado y en ejecución activa: en ese caso invocar directamente a implementador-swl con el plan existente."
|
|
43
|
+
fragmentos:
|
|
44
|
+
- _propose-step
|
|
43
45
|
---
|
|
44
46
|
Eres el orquestador central del sistema SWL.
|
|
45
47
|
|
|
@@ -17,7 +17,7 @@ modeloAlterno: claude-opus-4-7
|
|
|
17
17
|
ventanaContexto: 200k
|
|
18
18
|
permissionMode: acceptEdits
|
|
19
19
|
color: indigo
|
|
20
|
-
version: 1.
|
|
20
|
+
version: 1.1.0
|
|
21
21
|
nivelRiesgo: MEDIO
|
|
22
22
|
skillsInvocables: [perfil-usuario, aprendizaje-continuo, memoria-busqueda, privacy-memoria]
|
|
23
23
|
permisosRed: false
|
|
@@ -109,10 +109,23 @@ tercero (perfil del usuario). **No cruces los carriles:**
|
|
|
109
109
|
| Sesiones con commits aceptados | 0.6 | Trabajo validado implícitamente |
|
|
110
110
|
| Sesiones con correcciones frecuentes | 0.4 | Señal de fricción, no de preferencia firme |
|
|
111
111
|
| `instintos/proyecto.yaml` con evidence_count ≥3 | 0.7 | Patrón observado en proyecto |
|
|
112
|
+
| `.planning/user-profile/briefing-telemetria.json` categoría `silenciada:true` | 0.6 | El usuario ignora consistentemente esa categoría de señal proactiva |
|
|
112
113
|
|
|
113
114
|
**Nunca** uses tool outputs crudos ni logs de errores como evidencia directa
|
|
114
115
|
de preferencia — el ruido es alto.
|
|
115
116
|
|
|
117
|
+
### Telemetría de aceptación del briefing (Fase 12, ADR-0036)
|
|
118
|
+
|
|
119
|
+
El hook `session-briefing.js` mantiene `.planning/user-profile/briefing-telemetria.json`
|
|
120
|
+
con, por categoría de señal (`adr-vencido`, `deuda-trigger`, `nudges-pendientes`,
|
|
121
|
+
`gate-calibracion`, `continue-here`), los contadores `{mostrado, actuado, ignorado,
|
|
122
|
+
silenciada}`. Al consolidar el perfil, leer este archivo como señal de **preferencias
|
|
123
|
+
de proactividad**: una categoría con `silenciada:true` (ratio ignorado/mostrado ≥0.8
|
|
124
|
+
con ≥5 muestras) indica que el usuario no quiere ese tipo de aviso — registrarlo en
|
|
125
|
+
el perfil como preferencia de comunicación, no como anti-patrón técnico (canal A de
|
|
126
|
+
`memoria-consolidada.md`, no APRENDIZAJES). NO inferir más de lo que los contadores
|
|
127
|
+
dicen: actuado≠preferencia positiva fuerte, solo "resolvió la señal".
|
|
128
|
+
|
|
116
129
|
## Estructura del perfil (`instintos/perfil-usuario.yaml`)
|
|
117
130
|
|
|
118
131
|
```yaml
|
package/bin/swl-ses.js
CHANGED
|
@@ -119,6 +119,26 @@ const COMANDOS = {
|
|
|
119
119
|
'audit-coverage-frameworks': '../scripts/cli/audit-coverage-frameworks.js',
|
|
120
120
|
'audit-agents-gaps': '../scripts/cli/audit-agents-gaps.js',
|
|
121
121
|
'skill-discovery': '../scripts/cli/skill-discovery.js',
|
|
122
|
+
'aprobar-plan': '../scripts/cli/aprobar-plan.js',
|
|
123
|
+
'verificar-plan': '../scripts/cli/verificar-plan.js',
|
|
124
|
+
'verificar-trazabilidad': '../scripts/cli/verificar-trazabilidad.js',
|
|
125
|
+
'liberar-fase': '../scripts/cli/liberar-fase.js',
|
|
126
|
+
'propose-step': '../scripts/cli/propose-step.js',
|
|
127
|
+
'derivar-feature-list': '../scripts/cli/derivar-feature-list.js',
|
|
128
|
+
'detectar-host': '../scripts/cli/detectar-host.js',
|
|
129
|
+
'metricas-dora': '../scripts/cli/metricas-dora.js',
|
|
130
|
+
'mark-evolved': '../scripts/cli/mark-evolved.js',
|
|
131
|
+
'near-duplicate': '../scripts/cli/near-duplicate.js',
|
|
132
|
+
'sugerir-modelo': '../scripts/cli/sugerir-modelo.js',
|
|
133
|
+
briefing: '../scripts/cli/briefing.js',
|
|
134
|
+
'execution-state': '../scripts/cli/execution-state.js',
|
|
135
|
+
'schedule-parse': '../scripts/cli/schedule-parse.js',
|
|
136
|
+
'gateway-notify': '../scripts/cli/gateway-notify.js',
|
|
137
|
+
'diary-entry': '../scripts/cli/diary-entry.js',
|
|
138
|
+
'loop-telemetry': '../scripts/cli/loop-telemetry.js',
|
|
139
|
+
'configurar-ci': '../scripts/cli/configurar-ci.js',
|
|
140
|
+
'ciclo-evolucion': '../scripts/cli/ciclo-evolucion.js',
|
|
141
|
+
notificaciones: '../scripts/cli/notificaciones.js',
|
|
122
142
|
};
|
|
123
143
|
|
|
124
144
|
// Comandos con subcomandos (nivel 2)
|
|
@@ -177,6 +197,49 @@ COMANDOS PRINCIPALES:
|
|
|
177
197
|
Usado por /swl:salud.
|
|
178
198
|
skill-discovery [query] Descubre y busca skills SWL. Sin query lista todos.
|
|
179
199
|
Flag: --rebuild. Usado por /swl:skill-search.
|
|
200
|
+
aprobar-plan --fase=N Gate G1: firma el PLAN (SHA256 → lock) y escribe
|
|
201
|
+
fase-activa.json (gate G0). Flags: --plan=<ruta>,
|
|
202
|
+
--aprobado-por="texto". Usado por /swl:aprobar-plan.
|
|
203
|
+
verificar-plan --fase=N Verifica el lock de un PLAN (read-only). Exit 1 si
|
|
204
|
+
mutado/sin-firmar. Usado por /swl:ejecutar-fase.
|
|
205
|
+
verificar-trazabilidad --fase=N Valida matriz REQ×T→commit→test. Flags:
|
|
206
|
+
--solo-plan, --json. Usado por /swl:aprobar-plan.
|
|
207
|
+
liberar-fase Cierra el gate G0 (borra fase-activa.json). Usado
|
|
208
|
+
por /swl:ejecutar-fase al terminar.
|
|
209
|
+
propose-step --rango=A..B Anexo propositivo del RESUMEN de fase (ADR-0037).
|
|
210
|
+
Opt-out SWL_PROPOSE=0. Usado por /swl:ejecutar-fase.
|
|
211
|
+
derivar-feature-list Genera .planning/feature-list.json desde HOJA-RUTA.md.
|
|
212
|
+
Flag: --check (exit 2 si drift). Usado por /swl:status, briefing.
|
|
213
|
+
detectar-host Indica si el CWD es el repo host de SWL o consumidor.
|
|
214
|
+
Flag: --json. Usado por /swl:status.
|
|
215
|
+
metricas-dora Calcula métricas DORA del repo. Flags: --json, --dias=N.
|
|
216
|
+
Usado por /swl:status.
|
|
217
|
+
mark-evolved <ruta> Marca un componente como evolucionado (frontmatter).
|
|
218
|
+
Flags: --from, --by, --note, --rounds, --score.
|
|
219
|
+
Usado por /swl:aprender, autoresearch, evolucionar.
|
|
220
|
+
near-duplicate --texto="..." Detecta si un aprendizaje es duplicado cercano.
|
|
221
|
+
Flags: --archivo, --threshold. Usado por /swl:aprender.
|
|
222
|
+
sugerir-modelo "<tarea>" Sugiere modelo (opus/sonnet/haiku) por complejidad.
|
|
223
|
+
Usado por /swl:modelo.
|
|
224
|
+
briefing Recolecta señales baratas del briefing. Usado por
|
|
225
|
+
/swl:briefing.
|
|
226
|
+
execution-state Imprime el resumen de .planning/execution-state.json.
|
|
227
|
+
Usado por /swl:checkpoint.
|
|
228
|
+
schedule-parse "<frase>" Parsea frase en inglés a expresión cron. Usado por
|
|
229
|
+
/swl:cron.
|
|
230
|
+
gateway-notify --texto="..." Encola notificación al canal origen del gateway.
|
|
231
|
+
Flags: --tipo, --to, --reply-to. Usado por /swl:inbox.
|
|
232
|
+
diary-entry (JSON stdin) Construye y persiste una entrada de diario de sesión.
|
|
233
|
+
Usado por /swl:aprender.
|
|
234
|
+
loop-telemetry <op> Telemetría de loops: iniciar|registrar|handoff|listar.
|
|
235
|
+
Usado por /swl:verificar, autoresearch, status.
|
|
236
|
+
configurar-ci <op> Workflows CI/CD: init|status|uninstall (salida JSON).
|
|
237
|
+
Usado por /swl:configurar-ci.
|
|
238
|
+
ciclo-evolucion Regenera .planning/evolution/metricas.json.
|
|
239
|
+
Usado por /swl:status.
|
|
240
|
+
notificaciones <op> Telegram: init|status|disable|repair|bot-start|
|
|
241
|
+
bot-stop|bot-status|bot-restart|bot-enable-autostart|
|
|
242
|
+
bot-disable-autostart. Usado por /swl:notificaciones.
|
|
180
243
|
info [--target <runtime>] Muestra información del sistema instalado
|
|
181
244
|
help Muestra esta ayuda (alias de --help)
|
|
182
245
|
list [--target <runtime>] Lista todos los agentes y skills instalados
|
|
@@ -192,7 +255,7 @@ GESTIÓN DE COMPONENTES:
|
|
|
192
255
|
OPCIONES DE INSTALL:
|
|
193
256
|
--target <runtime> Runtime destino: claude|openclaude|copilot|opencode|codex|gemini|cursor (default: claude)
|
|
194
257
|
--profile <perfil> Perfil: core|backend-python|backend-node|frontend-react|frontend-angular|
|
|
195
|
-
fullstack-python-angular|fullstack-node-react|mobile|devops|completo (default:
|
|
258
|
+
fullstack-python-angular|fullstack-node-react|mobile|devops|completo (default: completo)
|
|
196
259
|
--with <componentes> Incluir componentes adicionales (separados por coma)
|
|
197
260
|
--without <comps> Excluir componentes (separados por coma)
|
|
198
261
|
--global Instalar en directorio global del runtime (~/.claude, etc.)
|