@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.
Files changed (97) hide show
  1. package/CLAUDE.md +196 -196
  2. package/README.md +579 -579
  3. package/agentes/_propose-step.md +90 -0
  4. package/agentes/implementador-swl.md +2 -0
  5. package/agentes/orquestador-swl.md +2 -0
  6. package/agentes/perfilador-usuario-swl.md +14 -1
  7. package/bin/swl-ses.js +64 -1
  8. package/comandos/swl/adoptar-proyecto.md +258 -255
  9. package/comandos/swl/aprender.md +828 -840
  10. package/comandos/swl/aprobar-plan.md +26 -37
  11. package/comandos/swl/autoresearch.md +12 -14
  12. package/comandos/swl/briefing.md +119 -0
  13. package/comandos/swl/checkpoint.md +10 -15
  14. package/comandos/swl/claudemd.md +239 -234
  15. package/comandos/swl/compactar.md +29 -2
  16. package/comandos/swl/configurar-ci.md +20 -19
  17. package/comandos/swl/cron.md +10 -12
  18. package/comandos/swl/discutir-fase.md +8 -5
  19. package/comandos/swl/ejecutar-fase.md +15 -2
  20. package/comandos/swl/evolucionar.md +6 -11
  21. package/comandos/swl/inbox.md +10 -10
  22. package/comandos/swl/modelo.md +7 -9
  23. package/comandos/swl/notificaciones.md +19 -116
  24. package/comandos/swl/nuevo-proyecto.md +205 -205
  25. package/comandos/swl/planear-fase.md +5 -3
  26. package/comandos/swl/release.md +46 -0
  27. package/comandos/swl/status.md +333 -279
  28. package/comandos/swl/verificar.md +817 -812
  29. package/habilidades/changelog-generator/scripts/parse-commits.js +6 -4
  30. package/habilidades/ejecutar-fase/SKILL.md +541 -518
  31. package/habilidades/planear-fase/SKILL.md +3 -2
  32. package/habilidades/swl-claudemd/SKILL.md +10 -6
  33. package/habilidades/tdd-workflow/SKILL.md +715 -713
  34. package/habilidades/validacion-ci-sistema/SKILL.md +17 -1
  35. package/hooks/calidad-pre-commit.js +5 -1
  36. package/hooks/check-update.js +39 -1
  37. package/hooks/lib/autonomia.js +208 -0
  38. package/hooks/lib/briefing.js +474 -0
  39. package/hooks/lib/propose-step.js +358 -0
  40. package/hooks/session-briefing.js +98 -0
  41. package/hooks/telemetria-skill-routing.js +100 -0
  42. package/instintos/autonomia.yaml +27 -0
  43. package/llms.txt +4 -4
  44. package/manifiestos/hooks-config.json +18 -0
  45. package/manifiestos/modulos.json +25 -3
  46. package/manifiestos/skills-lock.json +17 -17
  47. package/package.json +93 -93
  48. package/plugin.json +371 -371
  49. package/reglas/analizar-directorios-antes-de-escribir.md +228 -0
  50. package/reglas/consultar-vault-primero.md +195 -0
  51. package/reglas/debatir-antes-de-aceptar.md +158 -0
  52. package/reglas/git-coauthor.md +100 -0
  53. package/reglas/monitor-ci.md +309 -0
  54. package/reglas/registro-componentes-nuevos.md +38 -10
  55. package/reglas/sesiones-paralelas.md +180 -0
  56. package/reglas/usar-code-review-graph.md +155 -0
  57. package/reglas/verificar-citas-normativas.md +548 -0
  58. package/scripts/auditar-claudemd.js +38 -0
  59. package/scripts/cli/aprobar-plan.js +73 -0
  60. package/scripts/cli/briefing.js +23 -0
  61. package/scripts/cli/ciclo-evolucion.js +26 -0
  62. package/scripts/cli/configurar-ci.js +40 -0
  63. package/scripts/cli/derivar-feature-list.js +25 -0
  64. package/scripts/cli/detectar-host.js +27 -0
  65. package/scripts/cli/diary-entry.js +69 -0
  66. package/scripts/cli/execution-state.js +18 -0
  67. package/scripts/cli/gateway-notify.js +41 -0
  68. package/scripts/cli/liberar-fase.js +42 -0
  69. package/scripts/cli/loop-telemetry.js +125 -0
  70. package/scripts/cli/mark-evolved.js +56 -0
  71. package/scripts/cli/metricas-dora.js +26 -0
  72. package/scripts/cli/near-duplicate.js +55 -0
  73. package/scripts/cli/notificaciones.js +123 -0
  74. package/scripts/cli/propose-step.js +29 -0
  75. package/scripts/cli/schedule-parse.js +19 -0
  76. package/scripts/cli/sugerir-modelo.js +20 -0
  77. package/scripts/cli/verificar-plan.js +36 -0
  78. package/scripts/cli/verificar-trazabilidad.js +35 -0
  79. package/scripts/derivar-feature-list.js +1 -0
  80. package/scripts/instalador.js +52 -6
  81. package/scripts/lib/auditar-invocaciones-comandos.js +104 -0
  82. package/scripts/lib/ci-reader.js +193 -0
  83. package/scripts/lib/detectar-host-swl.js +175 -0
  84. package/scripts/lib/evidencia-release.js +322 -0
  85. package/scripts/lib/gate-hooks-requires.js +249 -0
  86. package/scripts/lib/gate-licencias.js +212 -0
  87. package/scripts/lib/git-metricas.js +257 -0
  88. package/scripts/lib/metricas-dora.js +204 -0
  89. package/scripts/lib/resolver-plan-fase.js +37 -0
  90. package/scripts/tui/ejecutores.js +1 -1
  91. package/scripts/validar-manifest.js +92 -1
  92. package/scripts/validar.js +13 -0
  93. package/scripts/verificar-evolucion.js +54 -4
  94. package/scripts/verificar-release.js +102 -0
  95. package/scripts/verificar-trazabilidad.js +12 -6
  96. package/reglas/arquitectura.evolved.json +0 -7
  97. 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.0.0
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: core)
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.)