@saulwade/swl-ses 2.5.2 → 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 +194 -192
- package/README.md +600 -600
- package/agentes/auto-evolucion-swl.md +27 -3
- package/bin/swl-ses.js +32 -6
- 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 +314 -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/release-semver/SKILL.md +4 -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 +664 -2
- package/manifiestos/modulos.json +19 -14
- package/manifiestos/planning-paths.json +1 -0
- package/manifiestos/skills-lock.json +53 -53
- 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 +106 -7
- package/scripts/lib/activar-hooks-proyecto.js +116 -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/evidencia-valor.js +1 -1
- 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
|
@@ -71,7 +71,7 @@ significativas**.
|
|
|
71
71
|
QUERY="qué hicimos sobre force push a main protegida"
|
|
72
72
|
|
|
73
73
|
# 2. Ejecuta búsqueda y anota top-5 IDs
|
|
74
|
-
|
|
74
|
+
swl-ses memoria-search search --query="$QUERY" --limit=5
|
|
75
75
|
|
|
76
76
|
# 3. Verifica manualmente qué IDs son CORRECTOS (revisión humana,
|
|
77
77
|
# no se inventa). Solo esos van en gold_ids.
|
|
@@ -93,7 +93,7 @@ benchmark es gate de release.
|
|
|
93
93
|
|
|
94
94
|
```bash
|
|
95
95
|
# Ejecutar benchmark con dataset por defecto
|
|
96
|
-
|
|
96
|
+
swl-ses benchmark-memoria
|
|
97
97
|
|
|
98
98
|
# Output esperado:
|
|
99
99
|
# Recall @ 5: 85.0%
|
|
@@ -107,16 +107,16 @@ node scripts/benchmark-memoria.js
|
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
109
|
# Dataset alternativo
|
|
110
|
-
|
|
110
|
+
swl-ses benchmark-memoria --dataset=.planning/benchmark/custom.jsonl
|
|
111
111
|
|
|
112
112
|
# Top-k personalizado (default 20)
|
|
113
|
-
|
|
113
|
+
swl-ses benchmark-memoria --limit=30
|
|
114
114
|
|
|
115
115
|
# Output JSON (para scripts)
|
|
116
|
-
|
|
116
|
+
swl-ses benchmark-memoria --json
|
|
117
117
|
|
|
118
118
|
# Detalle por query (útil para debugging)
|
|
119
|
-
|
|
119
|
+
swl-ses benchmark-memoria --verbose
|
|
120
120
|
```
|
|
121
121
|
|
|
122
122
|
### Tracking histórico opcional
|
|
@@ -126,7 +126,7 @@ agregado a `.planning/evolution/benchmark-memoria.jsonl` (append-only)
|
|
|
126
126
|
para detectar regresión entre releases:
|
|
127
127
|
|
|
128
128
|
```bash
|
|
129
|
-
SWL_BENCHMARK_PERSIST=1
|
|
129
|
+
SWL_BENCHMARK_PERSIST=1 swl-ses benchmark-memoria
|
|
130
130
|
```
|
|
131
131
|
|
|
132
132
|
Comparar entre releases:
|
|
@@ -1,174 +1,174 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: changelog-generator
|
|
3
|
-
description: >
|
|
4
|
-
Generador automático de entradas CHANGELOG.md en formato Keep a Changelog
|
|
5
|
-
desde commits Conventional Commits. Parser determinista que clasifica feat/
|
|
6
|
-
fix/perf/refactor/docs/etc. en categorías user-facing en español, detecta
|
|
7
|
-
breaking changes (marca '!' o trailer 'BREAKING CHANGE:') y reporta nivel
|
|
8
|
-
de conformidad para decidir fallback manual. Cargar en /swl:release Paso 7
|
|
9
|
-
cuando hay commits Conventional, o manualmente para previsualizar el
|
|
10
|
-
changelog antes de un release.
|
|
11
|
-
version: 1.1.
|
|
12
|
-
nivelRiesgo: BAJO
|
|
13
|
-
herramientasPermitidas: [Read, Bash]
|
|
14
|
-
skillsInvocables: [release-semver]
|
|
15
|
-
exclusiones:
|
|
16
|
-
- "No invocar para generar release notes con marketing copy o anuncios para usuarios finales — este skill produce listado técnico-legible, no narrativa."
|
|
17
|
-
- "No invocar si el repo no usa Conventional Commits — el parser detecta <80% conformidad y el caller debe abortar a flujo manual de release-semver."
|
|
18
|
-
- "No invocar para reescribir CHANGELOG histórico — solo agrega entrada de la próxima versión al inicio."
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
# /habilidades/changelog-generator — CHANGELOG automático desde Conventional Commits
|
|
22
|
-
|
|
23
|
-
## Cuándo cargar
|
|
24
|
-
|
|
25
|
-
- Durante `/swl:release` Paso 7 (Generar CHANGELOG), cuando el flujo automático
|
|
26
|
-
está disponible y los commits del rango siguen Conventional Commits.
|
|
27
|
-
- Para previsualizar el changelog candidato antes de bumpear versión:
|
|
28
|
-
`node habilidades/changelog-generator/scripts/parse-commits.js --version X`
|
|
29
|
-
- Cuando un colaborador pide un resumen legible de cambios entre dos refs
|
|
30
|
-
arbitrarias del repo.
|
|
31
|
-
|
|
32
|
-
## Cuándo NO cargar
|
|
33
|
-
|
|
34
|
-
- Repo sin Conventional Commits (<80% de conformidad): el parser detecta y
|
|
35
|
-
reporta; el caller debe usar `Skill("release-semver")` flujo manual.
|
|
36
|
-
- Generación de **release notes** (texto narrativo con contexto de producto):
|
|
37
|
-
este skill produce CHANGELOG técnico-legible; las release notes con marketing
|
|
38
|
-
son tarea aparte (`documentador-swl` con plantilla específica).
|
|
39
|
-
- Reescritura histórica del CHANGELOG (squash de varias versiones, corrección
|
|
40
|
-
de entradas antiguas): solo se agrega entrada de la versión nueva al inicio.
|
|
41
|
-
|
|
42
|
-
## Qué hace el skill
|
|
43
|
-
|
|
44
|
-
1. **Lee commits** desde la última tag (o entre dos refs arbitrarias) con
|
|
45
|
-
`git log --format=...` usando un separador único para parsear subject + body
|
|
46
|
-
sin colisiones.
|
|
47
|
-
2. **Parsea con Conventional Commits 1.0.0**: regex que captura tipo, scope,
|
|
48
|
-
marca `!`, descripción. Soporta tipos extendidos del proyecto SWL:
|
|
49
|
-
`evolucion` (cambios de skills/agentes), además de `feat/fix/perf/refactor/
|
|
50
|
-
docs/style/test/ci/build/chore/revert`. Tolera el prefijo opcional de
|
|
51
|
-
trazabilidad `[T-NN]` / `[REQ-NN]` de la convención de `ejecutar-fase`
|
|
52
|
-
(no altera la semántica CC — el tipo+scope+descripción siguen presentes).
|
|
53
|
-
3. **Detecta breaking changes** por marca `!` después del tipo o trailer
|
|
54
|
-
`BREAKING CHANGE:` en el body. Los breaking siempre van al inicio del
|
|
55
|
-
release, sin importar el tipo original.
|
|
56
|
-
4. **Transforma descripción técnica → legible**:
|
|
57
|
-
- Elimina referencias a issues al final (`(#123)`, `Refs #456`).
|
|
58
|
-
- Capitaliza primera letra.
|
|
59
|
-
- Elimina punto final (Keep a Changelog usa bullets sin punto).
|
|
60
|
-
5. **Agrupa en categorías** con orden canónico:
|
|
61
|
-
1. Breaking changes
|
|
62
|
-
2. Nuevas funcionalidades (feat)
|
|
63
|
-
3. Correcciones (fix)
|
|
64
|
-
4. Mejoras de rendimiento (perf)
|
|
65
|
-
5. Cambios internos (refactor)
|
|
66
|
-
6. Reversiones (revert)
|
|
67
|
-
7. Evoluciones de skills/agentes (evolucion — SWL-specific)
|
|
68
|
-
8. Mantenimiento (docs/style/test/ci/build/chore — colapsadas)
|
|
69
|
-
9. Otros (commits sin prefijo CC válido)
|
|
70
|
-
6. **Reporta conformidad**: ratio commits conformes / total. Si <80%, el
|
|
71
|
-
caller debe decidir si abortar o seguir manualmente.
|
|
72
|
-
|
|
73
|
-
## Helper programático
|
|
74
|
-
|
|
75
|
-
```js
|
|
76
|
-
const {
|
|
77
|
-
parsearCommits,
|
|
78
|
-
leerCommitsGit,
|
|
79
|
-
generarChangelog,
|
|
80
|
-
} = require('./habilidades/changelog-generator/scripts/parse-commits');
|
|
81
|
-
|
|
82
|
-
// 1. Leer commits desde la última tag hasta HEAD
|
|
83
|
-
const commits = leerCommitsGit({ to: 'HEAD' });
|
|
84
|
-
|
|
85
|
-
// 2. Parsear y clasificar
|
|
86
|
-
const { categorias, conformidad, totalCommits, conformes } = parsearCommits(commits);
|
|
87
|
-
|
|
88
|
-
// 3. Si conformidad < 0.8, abortar o avisar al usuario
|
|
89
|
-
if (conformidad < 0.8) {
|
|
90
|
-
console.warn(`Conformidad CC: ${conformes}/${totalCommits}. Revisar "Otros".`);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
// 4. Generar markdown listo para insertar en CHANGELOG.md
|
|
94
|
-
const md = generarChangelog(categorias, {
|
|
95
|
-
version: '1.6.5',
|
|
96
|
-
fecha: '2026-05-22', // opcional, default = hoy
|
|
97
|
-
incluirHash: true, // muestra hash corto al inicio de cada bullet
|
|
98
|
-
});
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
## Uso CLI
|
|
102
|
-
|
|
103
|
-
Previsualizar changelog candidato sin escribir nada:
|
|
104
|
-
|
|
105
|
-
```bash
|
|
106
|
-
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
107
|
-
--version 1.6.5 \
|
|
108
|
-
--format markdown
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
Filtrar por rango específico:
|
|
112
|
-
|
|
113
|
-
```bash
|
|
114
|
-
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
115
|
-
--from v1.6.4 \
|
|
116
|
-
--to HEAD \
|
|
117
|
-
--version 1.6.5
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
Salida JSON estructurado para post-procesamiento:
|
|
121
|
-
|
|
122
|
-
```bash
|
|
123
|
-
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
124
|
-
--from v1.6.4 \
|
|
125
|
-
--format json > /tmp/changelog-candidato.json
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
## Reglas de uso desde /swl:release
|
|
129
|
-
|
|
130
|
-
1. Llamar a `leerCommitsGit` con la última tag detectada en el Paso 1 del
|
|
131
|
-
release.
|
|
132
|
-
2. Verificar `conformidad >= 0.8`. Si menor, presentar al usuario los commits
|
|
133
|
-
bajo "Otros" y pedir decisión: (a) continuar con el changelog, (b) abortar
|
|
134
|
-
y reescribir commits, (c) editar manualmente la categoría "Otros".
|
|
135
|
-
3. Si `--dry-run` está activo en `/swl:release`, mostrar el output de
|
|
136
|
-
`generarChangelog` sin escribir a disco.
|
|
137
|
-
4. Si conformidad OK: leer CHANGELOG.md actual, insertar el bloque generado
|
|
138
|
-
al inicio después del header `# Changelog`, escribir atómicamente.
|
|
139
|
-
5. NO hacer commit aquí — eso lo hace el Paso 8 de `/swl:release`.
|
|
140
|
-
|
|
141
|
-
## Gotchas observables
|
|
142
|
-
|
|
143
|
-
- **Conventional Commits sin scope son válidos**: `fix: corregir X` parsea
|
|
144
|
-
igual que `fix(modulo): corregir X`. El parser no exige scope.
|
|
145
|
-
- **El subject debe ir en una sola línea**: si un commit usa newline en el
|
|
146
|
-
subject, el parser lo trata como completo pero `git log %s` ya lo trunca.
|
|
147
|
-
- **Tipos no estándar van a "Otros"**: si un equipo usa `mejora:`, `cambio:`,
|
|
148
|
-
el parser los marca como no conformes. El usuario debe ajustar la lista
|
|
149
|
-
`CATEGORIAS` en `parse-commits.js` o adoptar tipos estándar.
|
|
150
|
-
- **El skill NO escribe a disco directamente**: solo retorna markdown. El
|
|
151
|
-
caller (`/swl:release` Paso 7) es responsable de leer el CHANGELOG actual,
|
|
152
|
-
insertar al inicio y escribir atómicamente.
|
|
153
|
-
- **Commits revert vienen del propio git**: `git revert` genera mensajes
|
|
154
|
-
`Revert "Subject original"` que el parser categoriza correctamente bajo
|
|
155
|
-
Reversiones (regex matchea `revert:` sin que el usuario lo escriba si usa
|
|
156
|
-
`git revert -e` para editar el mensaje al formato CC).
|
|
157
|
-
- **El hash corto se trunca a 7 chars**: alineado con el formato `git log
|
|
158
|
-
--oneline` estándar.
|
|
159
|
-
|
|
160
|
-
## Origen
|
|
161
|
-
|
|
162
|
-
Adaptado del skill `changelog-generator` de
|
|
163
|
-
`temp/awesome-codex-skills-master/changelog-generator/` (ComposioHQ, MIT) con:
|
|
164
|
-
|
|
165
|
-
- Frontmatter al estándar SWL (es-MX, `nivelRiesgo: BAJO`, `exclusiones`).
|
|
166
|
-
- Parser determinista en Node.js (`parse-commits.js`) — el origen es solo
|
|
167
|
-
documentación; este skill agrega la implementación ejecutable.
|
|
168
|
-
- Tipo `evolucion:` específico de SWL agregado al parser.
|
|
169
|
-
- Soporte para breaking changes `!` y trailer `BREAKING CHANGE:` (origen
|
|
170
|
-
solo menciona el segundo).
|
|
171
|
-
- Reporte de conformidad <80% como gate explícita para fallback manual.
|
|
172
|
-
- Integración con `/swl:release` Paso 7 documentada en `comandos/swl/release.md`.
|
|
173
|
-
|
|
174
|
-
Documentado en ADR-0029 (integración parcial awesome-codex-skills, Opción B).
|
|
1
|
+
---
|
|
2
|
+
name: changelog-generator
|
|
3
|
+
description: >
|
|
4
|
+
Generador automático de entradas CHANGELOG.md en formato Keep a Changelog
|
|
5
|
+
desde commits Conventional Commits. Parser determinista que clasifica feat/
|
|
6
|
+
fix/perf/refactor/docs/etc. en categorías user-facing en español, detecta
|
|
7
|
+
breaking changes (marca '!' o trailer 'BREAKING CHANGE:') y reporta nivel
|
|
8
|
+
de conformidad para decidir fallback manual. Cargar en /swl:release Paso 7
|
|
9
|
+
cuando hay commits Conventional, o manualmente para previsualizar el
|
|
10
|
+
changelog antes de un release.
|
|
11
|
+
version: 1.1.1
|
|
12
|
+
nivelRiesgo: BAJO
|
|
13
|
+
herramientasPermitidas: [Read, Bash]
|
|
14
|
+
skillsInvocables: [release-semver]
|
|
15
|
+
exclusiones:
|
|
16
|
+
- "No invocar para generar release notes con marketing copy o anuncios para usuarios finales — este skill produce listado técnico-legible, no narrativa."
|
|
17
|
+
- "No invocar si el repo no usa Conventional Commits — el parser detecta <80% conformidad y el caller debe abortar a flujo manual de release-semver."
|
|
18
|
+
- "No invocar para reescribir CHANGELOG histórico — solo agrega entrada de la próxima versión al inicio."
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# /habilidades/changelog-generator — CHANGELOG automático desde Conventional Commits
|
|
22
|
+
|
|
23
|
+
## Cuándo cargar
|
|
24
|
+
|
|
25
|
+
- Durante `/swl:release` Paso 7 (Generar CHANGELOG), cuando el flujo automático
|
|
26
|
+
está disponible y los commits del rango siguen Conventional Commits.
|
|
27
|
+
- Para previsualizar el changelog candidato antes de bumpear versión:
|
|
28
|
+
`node habilidades/changelog-generator/scripts/parse-commits.js --version X`
|
|
29
|
+
- Cuando un colaborador pide un resumen legible de cambios entre dos refs
|
|
30
|
+
arbitrarias del repo.
|
|
31
|
+
|
|
32
|
+
## Cuándo NO cargar
|
|
33
|
+
|
|
34
|
+
- Repo sin Conventional Commits (<80% de conformidad): el parser detecta y
|
|
35
|
+
reporta; el caller debe usar `Skill("release-semver")` flujo manual.
|
|
36
|
+
- Generación de **release notes** (texto narrativo con contexto de producto):
|
|
37
|
+
este skill produce CHANGELOG técnico-legible; las release notes con marketing
|
|
38
|
+
son tarea aparte (`documentador-swl` con plantilla específica).
|
|
39
|
+
- Reescritura histórica del CHANGELOG (squash de varias versiones, corrección
|
|
40
|
+
de entradas antiguas): solo se agrega entrada de la versión nueva al inicio.
|
|
41
|
+
|
|
42
|
+
## Qué hace el skill
|
|
43
|
+
|
|
44
|
+
1. **Lee commits** desde la última tag (o entre dos refs arbitrarias) con
|
|
45
|
+
`git log --format=...` usando un separador único para parsear subject + body
|
|
46
|
+
sin colisiones.
|
|
47
|
+
2. **Parsea con Conventional Commits 1.0.0**: regex que captura tipo, scope,
|
|
48
|
+
marca `!`, descripción. Soporta tipos extendidos del proyecto SWL:
|
|
49
|
+
`evolucion` (cambios de skills/agentes), además de `feat/fix/perf/refactor/
|
|
50
|
+
docs/style/test/ci/build/chore/revert`. Tolera el prefijo opcional de
|
|
51
|
+
trazabilidad `[T-NN]` / `[REQ-NN]` de la convención de `ejecutar-fase`
|
|
52
|
+
(no altera la semántica CC — el tipo+scope+descripción siguen presentes).
|
|
53
|
+
3. **Detecta breaking changes** por marca `!` después del tipo o trailer
|
|
54
|
+
`BREAKING CHANGE:` en el body. Los breaking siempre van al inicio del
|
|
55
|
+
release, sin importar el tipo original.
|
|
56
|
+
4. **Transforma descripción técnica → legible**:
|
|
57
|
+
- Elimina referencias a issues al final (`(#123)`, `Refs #456`).
|
|
58
|
+
- Capitaliza primera letra.
|
|
59
|
+
- Elimina punto final (Keep a Changelog usa bullets sin punto).
|
|
60
|
+
5. **Agrupa en categorías** con orden canónico:
|
|
61
|
+
1. Breaking changes
|
|
62
|
+
2. Nuevas funcionalidades (feat)
|
|
63
|
+
3. Correcciones (fix)
|
|
64
|
+
4. Mejoras de rendimiento (perf)
|
|
65
|
+
5. Cambios internos (refactor)
|
|
66
|
+
6. Reversiones (revert)
|
|
67
|
+
7. Evoluciones de skills/agentes (evolucion — SWL-specific)
|
|
68
|
+
8. Mantenimiento (docs/style/test/ci/build/chore — colapsadas)
|
|
69
|
+
9. Otros (commits sin prefijo CC válido)
|
|
70
|
+
6. **Reporta conformidad**: ratio commits conformes / total. Si <80%, el
|
|
71
|
+
caller debe decidir si abortar o seguir manualmente.
|
|
72
|
+
|
|
73
|
+
## Helper programático
|
|
74
|
+
|
|
75
|
+
```js
|
|
76
|
+
const {
|
|
77
|
+
parsearCommits,
|
|
78
|
+
leerCommitsGit,
|
|
79
|
+
generarChangelog,
|
|
80
|
+
} = require('./habilidades/changelog-generator/scripts/parse-commits');
|
|
81
|
+
|
|
82
|
+
// 1. Leer commits desde la última tag hasta HEAD
|
|
83
|
+
const commits = leerCommitsGit({ to: 'HEAD' });
|
|
84
|
+
|
|
85
|
+
// 2. Parsear y clasificar
|
|
86
|
+
const { categorias, conformidad, totalCommits, conformes } = parsearCommits(commits);
|
|
87
|
+
|
|
88
|
+
// 3. Si conformidad < 0.8, abortar o avisar al usuario
|
|
89
|
+
if (conformidad < 0.8) {
|
|
90
|
+
console.warn(`Conformidad CC: ${conformes}/${totalCommits}. Revisar "Otros".`);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// 4. Generar markdown listo para insertar en CHANGELOG.md
|
|
94
|
+
const md = generarChangelog(categorias, {
|
|
95
|
+
version: '1.6.5',
|
|
96
|
+
fecha: '2026-05-22', // opcional, default = hoy
|
|
97
|
+
incluirHash: true, // muestra hash corto al inicio de cada bullet
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Uso CLI
|
|
102
|
+
|
|
103
|
+
Previsualizar changelog candidato sin escribir nada:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
107
|
+
--version 1.6.5 \
|
|
108
|
+
--format markdown
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Filtrar por rango específico:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
115
|
+
--from v1.6.4 \
|
|
116
|
+
--to HEAD \
|
|
117
|
+
--version 1.6.5
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Salida JSON estructurado para post-procesamiento:
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
node habilidades/changelog-generator/scripts/parse-commits.js \
|
|
124
|
+
--from v1.6.4 \
|
|
125
|
+
--format json > /tmp/changelog-candidato.json
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Reglas de uso desde /swl:release
|
|
129
|
+
|
|
130
|
+
1. Llamar a `leerCommitsGit` con la última tag detectada en el Paso 1 del
|
|
131
|
+
release.
|
|
132
|
+
2. Verificar `conformidad >= 0.8`. Si menor, presentar al usuario los commits
|
|
133
|
+
bajo "Otros" y pedir decisión: (a) continuar con el changelog, (b) abortar
|
|
134
|
+
y reescribir commits, (c) editar manualmente la categoría "Otros".
|
|
135
|
+
3. Si `--dry-run` está activo en `/swl:release`, mostrar el output de
|
|
136
|
+
`generarChangelog` sin escribir a disco.
|
|
137
|
+
4. Si conformidad OK: leer CHANGELOG.md actual, insertar el bloque generado
|
|
138
|
+
al inicio después del header `# Changelog`, escribir atómicamente.
|
|
139
|
+
5. NO hacer commit aquí — eso lo hace el Paso 8 de `/swl:release`.
|
|
140
|
+
|
|
141
|
+
## Gotchas observables
|
|
142
|
+
|
|
143
|
+
- **Conventional Commits sin scope son válidos**: `fix: corregir X` parsea
|
|
144
|
+
igual que `fix(modulo): corregir X`. El parser no exige scope.
|
|
145
|
+
- **El subject debe ir en una sola línea**: si un commit usa newline en el
|
|
146
|
+
subject, el parser lo trata como completo pero `git log %s` ya lo trunca.
|
|
147
|
+
- **Tipos no estándar van a "Otros"**: si un equipo usa `mejora:`, `cambio:`,
|
|
148
|
+
el parser los marca como no conformes. El usuario debe ajustar la lista
|
|
149
|
+
`CATEGORIAS` en `parse-commits.js` o adoptar tipos estándar.
|
|
150
|
+
- **El skill NO escribe a disco directamente**: solo retorna markdown. El
|
|
151
|
+
caller (`/swl:release` Paso 7) es responsable de leer el CHANGELOG actual,
|
|
152
|
+
insertar al inicio y escribir atómicamente.
|
|
153
|
+
- **Commits revert vienen del propio git**: `git revert` genera mensajes
|
|
154
|
+
`Revert "Subject original"` que el parser categoriza correctamente bajo
|
|
155
|
+
Reversiones (regex matchea `revert:` sin que el usuario lo escriba si usa
|
|
156
|
+
`git revert -e` para editar el mensaje al formato CC).
|
|
157
|
+
- **El hash corto se trunca a 7 chars**: alineado con el formato `git log
|
|
158
|
+
--oneline` estándar.
|
|
159
|
+
|
|
160
|
+
## Origen
|
|
161
|
+
|
|
162
|
+
Adaptado del skill `changelog-generator` de
|
|
163
|
+
`temp/awesome-codex-skills-master/changelog-generator/` (ComposioHQ, MIT) con:
|
|
164
|
+
|
|
165
|
+
- Frontmatter al estándar SWL (es-MX, `nivelRiesgo: BAJO`, `exclusiones`).
|
|
166
|
+
- Parser determinista en Node.js (`parse-commits.js`) — el origen es solo
|
|
167
|
+
documentación; este skill agrega la implementación ejecutable.
|
|
168
|
+
- Tipo `evolucion:` específico de SWL agregado al parser.
|
|
169
|
+
- Soporte para breaking changes `!` y trailer `BREAKING CHANGE:` (origen
|
|
170
|
+
solo menciona el segundo).
|
|
171
|
+
- Reporte de conformidad <80% como gate explícita para fallback manual.
|
|
172
|
+
- Integración con `/swl:release` Paso 7 documentada en `comandos/swl/release.md`.
|
|
173
|
+
|
|
174
|
+
Documentado en ADR-0029 (integración parcial awesome-codex-skills, Opción B).
|
|
@@ -288,7 +288,8 @@ function generarChangelog(categorias, opts) {
|
|
|
288
288
|
const { version, fecha, incluirHash = true } = opts || {};
|
|
289
289
|
if (!version) throw new Error('generarChangelog: version es obligatoria');
|
|
290
290
|
|
|
291
|
-
|
|
291
|
+
// Fecha LOCAL, no UTC — desde México la tarde ya es "mañana" en toISOString() (clase C1)
|
|
292
|
+
const fechaUsada = fecha || new Date().toLocaleDateString('sv');
|
|
292
293
|
const lineas = [`## [${version}] - ${fechaUsada}`, ''];
|
|
293
294
|
|
|
294
295
|
for (const categoria of ORDEN_CATEGORIAS) {
|
|
@@ -149,6 +149,12 @@ a partir de texto libre. Inspirado en el patrón ExecutionSnapshot de Sim Studio
|
|
|
149
149
|
|
|
150
150
|
### Al completar un agente
|
|
151
151
|
|
|
152
|
+
Los bloques `javascript` de esta sección documentan la API de los módulos con
|
|
153
|
+
el layout del repo madre (`hooks/lib/`); en instalaciones destino viven
|
|
154
|
+
aplanados junto a los hooks instalados. Son referencia de la API, no comandos
|
|
155
|
+
a ejecutar tal cual en proyectos consumidores (para lectura del estado existe
|
|
156
|
+
`swl-ses execution-state`).
|
|
157
|
+
|
|
152
158
|
```javascript
|
|
153
159
|
const es = require('./hooks/lib/execution-state');
|
|
154
160
|
es.completarAgente(process.cwd(), 'implementador-swl', 'api-endpoints', {
|
|
@@ -107,6 +107,10 @@ El default de 2500 restaura el margen útil.
|
|
|
107
107
|
|
|
108
108
|
## Configuración
|
|
109
109
|
|
|
110
|
+
API del módulo con el layout del repo madre (`hooks/lib/`); en instalaciones
|
|
111
|
+
destino vive aplanado junto a los hooks instalados. Es referencia para ajustar
|
|
112
|
+
el hook, no un comando a ejecutar en proyectos consumidores.
|
|
113
|
+
|
|
110
114
|
```js
|
|
111
115
|
const { buildContext } = require('./hooks/lib/context-builder');
|
|
112
116
|
|