@saulwade/swl-ses 1.5.1 → 1.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.
Files changed (155) hide show
  1. package/CLAUDE.md +225 -209
  2. package/README.md +578 -561
  3. package/agentes/arquitecto-swl.md +33 -1
  4. package/agentes/nemesis-auditor-swl.md +59 -19
  5. package/bin/swl-mcp-server.js +214 -214
  6. package/bin/swl-ses.js +49 -7
  7. package/comandos/swl/.evolved.json +22 -22
  8. package/comandos/swl/contribuir.md +233 -233
  9. package/comandos/swl/nemesis.md +230 -56
  10. package/gateway/lib/event-channel.js +191 -191
  11. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  12. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  13. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  14. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  15. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  16. package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
  17. package/habilidades/eval-framework/SKILL.md +212 -212
  18. package/habilidades/feynman-auditor-swl/SKILL.md +123 -123
  19. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
  20. package/habilidades/harness-claude-code/SKILL.md +299 -299
  21. package/habilidades/infra-github-actions/SKILL.md +166 -166
  22. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  23. package/habilidades/manejo-errores/.evolved.json +8 -8
  24. package/habilidades/meta-skills-estandar/SKILL.md +207 -4
  25. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  26. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  27. package/habilidades/nemesis-evaluacion-json/SKILL.md +266 -0
  28. package/habilidades/nemesis-redistribuir/SKILL.md +341 -0
  29. package/habilidades/node-experto/SKILL.md +94 -4
  30. package/habilidades/patrones-python/SKILL.md +229 -229
  31. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  32. package/habilidades/planear-fase/SKILL.md +319 -319
  33. package/habilidades/protocolo-revision-swl/SKILL.md +350 -276
  34. package/habilidades/release-semver/.evolved.json +8 -8
  35. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -166
  36. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
  37. package/habilidades/tdd-workflow/SKILL.md +121 -4
  38. package/habilidades/testing-python/SKILL.md +340 -340
  39. package/habilidades/web-fetcher-routing/SKILL.md +75 -75
  40. package/hooks/check-update.js +31 -3
  41. package/hooks/claudemd-bloat-detector.js +161 -161
  42. package/hooks/extraccion-aprendizajes.js +11 -0
  43. package/hooks/lib/agent-routing.js +107 -107
  44. package/hooks/lib/auto-consolidator.js +335 -335
  45. package/hooks/lib/error-classifier.js +308 -308
  46. package/hooks/lib/merkle-audit.js +96 -96
  47. package/hooks/lib/provenance-tracker.js +191 -191
  48. package/hooks/lib/rate-limit-tracker.js +253 -253
  49. package/hooks/lib/resource-quota.js +122 -122
  50. package/hooks/lib/retry-jitter.js +165 -165
  51. package/hooks/lib/security-net.js +201 -201
  52. package/hooks/lib/skill-auditor.js +588 -588
  53. package/hooks/lib/sync-status.js +228 -228
  54. package/hooks/lib/taint-tracker.js +107 -107
  55. package/hooks/lib/text-similarity.js +241 -241
  56. package/hooks/lib/toon-compressor.js +245 -245
  57. package/hooks/registro-turnos.js +209 -209
  58. package/hooks/sugerir-regenerar-inventario.js +170 -170
  59. package/hooks/validar-formato-post-subagente.js +140 -140
  60. package/hooks/validar-memoria-hook.js +218 -218
  61. package/instintos/prompt-appendices.yaml +57 -57
  62. package/manifiestos/agent-output-schemas.json +57 -57
  63. package/manifiestos/modulos.json +1324 -1321
  64. package/manifiestos/skills-lock.json +1142 -1114
  65. package/package.json +5 -4
  66. package/plantillas/auditor-veto-template.md +105 -105
  67. package/plantillas/github-workflows/README.md +47 -47
  68. package/plantillas/github-workflows/release-please.yml +44 -44
  69. package/plantillas/github-workflows/swl-ci.yml +107 -107
  70. package/plantillas/github-workflows/swl-security.yml +51 -51
  71. package/plugin.json +355 -351
  72. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  73. package/reglas/arreglar-al-detectar.md +147 -147
  74. package/reglas/fragmentos-compartidos.md +152 -152
  75. package/reglas/harness-claude-code.md +213 -213
  76. package/reglas/registro-componentes-nuevos.md +192 -0
  77. package/reglas/usar-context7.md +226 -226
  78. package/schemas/diary-entry.schema.json +80 -80
  79. package/scripts/actualizar.js +110 -1
  80. package/scripts/audit-tools/audit-history.js +330 -330
  81. package/scripts/audit-tools/bundle-tracker.js +290 -290
  82. package/scripts/audit-tools/canary-monitor.js +352 -352
  83. package/scripts/audit-tools/code-profiler.js +605 -605
  84. package/scripts/audit-tools/dep-doctor.js +320 -320
  85. package/scripts/audit-tools/env-validator.js +206 -206
  86. package/scripts/audit-tools/lib/fs-walk.js +48 -48
  87. package/scripts/audit-tools/lib/output.js +23 -23
  88. package/scripts/audit-tools/migration-checker.js +392 -392
  89. package/scripts/audit-tools/pentest-scanner.js +1436 -1436
  90. package/scripts/benchmark-memoria.js +167 -167
  91. package/scripts/configurar-branch-protection.js +418 -418
  92. package/scripts/derivar-feature-list.js +489 -489
  93. package/scripts/desinstalar.js +105 -24
  94. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  95. package/scripts/doctor.js +27 -0
  96. package/scripts/field-report.js +199 -199
  97. package/scripts/generar-checklists-consolidados.js +273 -273
  98. package/scripts/generar-inventario.js +420 -420
  99. package/scripts/generar-matriz-lenguajes.js +271 -271
  100. package/scripts/instalador.js +55 -4
  101. package/scripts/lib/artefactos-python.js +43 -43
  102. package/scripts/lib/benchmark-metrics.js +160 -160
  103. package/scripts/lib/budget-enforcer.js +252 -252
  104. package/scripts/lib/configurar-ci.js +380 -380
  105. package/scripts/lib/contadores-inventario.js +217 -217
  106. package/scripts/lib/detectar-stack-detallado.js +307 -307
  107. package/scripts/lib/diary-entry.js +234 -234
  108. package/scripts/lib/eval-metrics-store.js +218 -218
  109. package/scripts/lib/eval-quality.js +171 -171
  110. package/scripts/lib/eval-schemas.js +144 -144
  111. package/scripts/lib/eval-self-correct.js +106 -106
  112. package/scripts/lib/eval-validator.js +185 -185
  113. package/scripts/lib/expandir-targets.js +71 -71
  114. package/scripts/lib/jaccard-similarity.js +98 -98
  115. package/scripts/lib/longmemeval-runner.js +125 -125
  116. package/scripts/lib/mcp_config.py +127 -0
  117. package/scripts/lib/npm-version.js +261 -261
  118. package/scripts/lib/paquetes-conocidos.js +50 -50
  119. package/scripts/lib/parsear-opciones.js +3 -0
  120. package/scripts/lib/prompt-builder.js +264 -264
  121. package/scripts/lib/rrf-fusion.js +175 -175
  122. package/scripts/lib/scoring-instintos.js +277 -277
  123. package/scripts/lib/semantic-search.js +252 -252
  124. package/scripts/lib/toml-merge.js +204 -204
  125. package/scripts/lib/transformadores/codex.js +375 -375
  126. package/scripts/lib/transformadores/cursor.js +359 -359
  127. package/scripts/lib/ui.js +148 -22
  128. package/scripts/limpiar-artefactos-python.js +131 -131
  129. package/scripts/mcp-orchestrator.py +8 -18
  130. package/scripts/mcp-pool-manager.py +12 -23
  131. package/scripts/mcp-server/README.md +170 -170
  132. package/scripts/mcp-server/auth.js +105 -105
  133. package/scripts/mcp-server/cache.js +106 -106
  134. package/scripts/mcp-server/telemetry.js +78 -78
  135. package/scripts/migrar-csv-a-array.js +168 -168
  136. package/scripts/migrar-fase-dominio.js +201 -201
  137. package/scripts/publicar.js +511 -511
  138. package/scripts/run-eval.js +141 -141
  139. package/scripts/tui/componentes/selector-multi.js +189 -0
  140. package/scripts/tui/componentes/selector-unico.js +158 -0
  141. package/scripts/tui/ejecutores.js +375 -0
  142. package/scripts/tui/index.js +162 -0
  143. package/scripts/tui/lib/colores.js +129 -0
  144. package/scripts/tui/lib/render.js +264 -0
  145. package/scripts/tui/lib/teclas.js +113 -0
  146. package/scripts/tui/pantallas/inspect.js +173 -0
  147. package/scripts/tui/pantallas/install-wizard.js +334 -0
  148. package/scripts/tui/pantallas/menu-principal.js +52 -0
  149. package/scripts/tui/pantallas/progreso.js +274 -0
  150. package/scripts/tui/pantallas/resumen.js +132 -0
  151. package/scripts/tui/pantallas/uninstall-wizard.js +208 -0
  152. package/scripts/tui/pantallas/update-wizard.js +232 -0
  153. package/scripts/tui/pantallas/welcome.js +187 -0
  154. package/scripts/validar-userland-vacio.js +110 -110
  155. package/scripts/verificar-docs-vs-codigo.js +425 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@saulwade/swl-ses",
3
- "version": "1.5.1",
4
- "description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 60 agentes, 160 habilidades, 44 comandos, 65 reglas y 41 hooks. Soporta 11 lenguajes y 7 runtimes: Claude Code, OpenClaude, OpenCode, Gemini CLI, Cursor, Codex CLI (soporte completo); GitHub Copilot (soporte parcial). 100% en espanol (Mexico). Multi-target install (--target CSV / --all-runtimes), autoconfig MCP en Cursor/Codex con --with-mcp, agentes Codex en TOML, hooks Cursor (17 eventos) y Codex (6 eventos). Gateway bidireccional con relay Telegram y auditoria profunda Nemesis con 8 tools ejecutables.",
3
+ "version": "1.6.0",
4
+ "description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 60 agentes, 162 habilidades, 44 comandos, 66 reglas y 41 hooks. Soporta 11 lenguajes y 7 runtimes: Claude Code, OpenClaude, OpenCode, Gemini CLI, Cursor, Codex CLI (soporte completo); GitHub Copilot (soporte parcial). 100% en espanol (Mexico). Multi-target install (--target CSV / --all-runtimes), autoconfig MCP en Cursor/Codex con --with-mcp, agentes Codex en TOML, hooks Cursor (17 eventos) y Codex (6 eventos). Gateway bidireccional con relay Telegram y auditoria profunda Nemesis con loop evaluator-optimizer opt-in (ADR-0021) y 8 tools ejecutables.",
5
5
  "bin": {
6
6
  "swl-ses": "bin/swl-ses.js",
7
7
  "swl-telegram-bot": "bin/swl-telegram-bot.js",
@@ -28,12 +28,13 @@
28
28
  ],
29
29
  "scripts": {
30
30
  "postinstall": "echo '\n swl-software-engineering-system instalado.\n Ejecuta: npx swl-ses init\n'",
31
- "test": "node --test tests/lib/*.test.js tests/scripts/*.test.js tests/scripts/lib/*.test.js tests/hooks/*.test.js tests/gateway/*.test.js tests/bin/*.test.js tests/transformadores/*.test.js tests/mcp-server/*.test.js",
31
+ "test": "node --test tests/lib/*.test.js tests/scripts/*.test.js tests/scripts/lib/*.test.js tests/scripts/tui/*.test.js tests/hooks/*.test.js tests/gateway/*.test.js tests/bin/*.test.js tests/transformadores/*.test.js tests/mcp-server/*.test.js",
32
32
  "test:validate": "node scripts/validar.js",
33
33
  "test:manifest": "node scripts/validar-manifest.js",
34
+ "test:docs": "node scripts/verificar-docs-vs-codigo.js",
34
35
  "test:smoke": "node scripts/smoke-test.js",
35
36
  "test:aislamiento": "node scripts/validar-tests-aislamiento.js",
36
- "test:all": "npm test && node scripts/validar.js && node scripts/validar-manifest.js",
37
+ "test:all": "npm test && node scripts/validar.js && node scripts/validar-manifest.js && node scripts/verificar-docs-vs-codigo.js",
37
38
  "test:userland": "node scripts/validar-userland-vacio.js",
38
39
  "test:release": "npm run test:all && npm run test:userland && npm run test:smoke",
39
40
  "doctor": "node scripts/doctor.js",
@@ -1,105 +1,105 @@
1
- # Plantilla: Auditor con Veto Items + Cap Enforcement
2
-
3
- Plantilla reusable para revisores SWL que aplican el patrón "veto items + cap
4
- enforcement". Ver `reglas/gobernanza.md` sección "Veto items y cap enforcement".
5
-
6
- ---
7
-
8
- ## Cuándo usar esta plantilla
9
-
10
- Cuando crees o actualices un revisor (`revisor-*-swl.md`) que:
11
-
12
- - Audita cumplimiento de reglas globales del sistema (`reglas/*.md`).
13
- - Necesita comunicar al lector cuáles violaciones son **no negociables**.
14
- - Debe evitar que un score promedio "redondeado" oculte un problema crítico.
15
-
16
- ---
17
-
18
- ## Estructura a copiar (insertar antes de "Formato de reporte obligatorio")
19
-
20
- ```markdown
21
- ## Veto items — cap enforcement a [LÍMITE]
22
-
23
- Ciertos hallazgos son **no negociables**. Si encuentras CUALQUIERA de los
24
- siguientes, el `score` del reporte queda **CAP a [LÍMITE] como máximo absoluto**,
25
- independientemente de qué tan limpio esté el resto del código. Patrón adaptado
26
- del modelo de auditor con veto items (ver `reglas/gobernanza.md`).
27
-
28
- **Lista de veto items**:
29
-
30
- 1. **[Nombre del veto]**: [descripción específica + regla que viola].
31
- 2. ...
32
- N. ...
33
-
34
- **Reglas del cap**:
35
-
36
- - Encontrar 1 veto item → `score ≤ [LÍMITE]`. Veredicto automático:
37
- `RECHAZADO` o `APROBADO CON CORRECCIONES` (nunca `APROBADO` limpio).
38
- - Encontrar 2+ veto items → `score ≤ [LÍMITE_ESTRICTO]`. Bloqueo absoluto.
39
- - El veto NO se puede negociar bajando severidad.
40
- - El cap se levanta SOLO cuando se demuestra remediación (commit + test) y el
41
- revisor re-ejecuta la auditoría.
42
-
43
- Reportar al inicio del reporte con bloque dedicado:
44
-
45
- \`\`\`
46
- ### VETO ITEMS DETECTADOS
47
- - [VI-1] <descripción>: \`archivo:linea\` — <evidencia>
48
- - [VI-N] <descripción>: \`archivo:linea\` — <evidencia>
49
- → score CAP a [VALOR] ([N] veto items). Veredicto: [VEREDICTO].
50
- \`\`\`
51
-
52
- Si no se detecta ninguno: \`### VETO ITEMS DETECTADOS\n- Ninguno\`.
53
- ```
54
-
55
- ---
56
-
57
- ## Reglas para definir veto items
58
-
59
- Antes de declarar un veto item, verifica:
60
-
61
- 1. **¿Existe una regla global que lo respalde?** Si no, no es veto. Crear o
62
- actualizar la regla primero (`reglas/<dominio>.md`).
63
- 2. **¿Es objetivamente detectable?** Un veto debe ser binario (presente o
64
- ausente). Criterios subjetivos como "código feo" no califican.
65
- 3. **¿Su presencia justifica bloquear el merge?** Si el equipo puede aprobar
66
- el código sin corregirlo, no es veto — es hallazgo regular.
67
- 4. **¿Es proporcional al dominio del revisor?** Un revisor de seguridad no
68
- declara vetos de estilo. Cada revisor solo veta lo de su dominio.
69
- 5. **¿Está la lista cerrada?** Una lista de 50 veto items es señal de mala
70
- curación. Lo razonable: 8-15 items por revisor.
71
-
72
- ---
73
-
74
- ## Escalas recomendadas
75
-
76
- | Tipo de reporte | Cap con 1 veto | Cap con 2+ vetos |
77
- |-----------------|---------------|-----------------|
78
- | Score 0-100 (CVSSv3-like) | 60/100 | 30/100 |
79
- | Score 0-10 promedio por dimensión | 6.0/10 | 3.0/10 |
80
- | Score 0-1 (probabilístico) | 0.6 | 0.3 |
81
-
82
- ---
83
-
84
- ## Ejemplos en agentes existentes
85
-
86
- - `agentes/revisor-seguridad-swl.md` — 10 veto items de OWASP Top 10 + secrets + CVEs
87
- - `agentes/revisor-codigo-swl.md` — 10 veto items mapeando a `reglas/estilo-codigo.md`
88
- y `reglas/arquitectura.md`
89
-
90
- ---
91
-
92
- ## Cómo el ejecutor responde a un cap
93
-
94
- Si recibes un reporte con veto items detectados:
95
-
96
- 1. **NO negocies la severidad**. El cap está justificado por regla global.
97
- 2. **Aplica las correcciones específicas** que el revisor indica con
98
- archivo:línea.
99
- 3. **Agrega un test que pruebe la corrección** (regression test). Sin test,
100
- el veto puede regresar.
101
- 4. **Solicita re-revisión** al mismo revisor. Si el veto desapareció, el cap
102
- se levanta y el score se recalcula sin penalización.
103
- 5. **Si NO puedes corregir** (limitación externa, blocker técnico): documenta
104
- en `.planning/AUDITORIA.md` y escala al humano. NUNCA marques el trabajo
105
- como completado con vetos abiertos.
1
+ # Plantilla: Auditor con Veto Items + Cap Enforcement
2
+
3
+ Plantilla reusable para revisores SWL que aplican el patrón "veto items + cap
4
+ enforcement". Ver `reglas/gobernanza.md` sección "Veto items y cap enforcement".
5
+
6
+ ---
7
+
8
+ ## Cuándo usar esta plantilla
9
+
10
+ Cuando crees o actualices un revisor (`revisor-*-swl.md`) que:
11
+
12
+ - Audita cumplimiento de reglas globales del sistema (`reglas/*.md`).
13
+ - Necesita comunicar al lector cuáles violaciones son **no negociables**.
14
+ - Debe evitar que un score promedio "redondeado" oculte un problema crítico.
15
+
16
+ ---
17
+
18
+ ## Estructura a copiar (insertar antes de "Formato de reporte obligatorio")
19
+
20
+ ```markdown
21
+ ## Veto items — cap enforcement a [LÍMITE]
22
+
23
+ Ciertos hallazgos son **no negociables**. Si encuentras CUALQUIERA de los
24
+ siguientes, el `score` del reporte queda **CAP a [LÍMITE] como máximo absoluto**,
25
+ independientemente de qué tan limpio esté el resto del código. Patrón adaptado
26
+ del modelo de auditor con veto items (ver `reglas/gobernanza.md`).
27
+
28
+ **Lista de veto items**:
29
+
30
+ 1. **[Nombre del veto]**: [descripción específica + regla que viola].
31
+ 2. ...
32
+ N. ...
33
+
34
+ **Reglas del cap**:
35
+
36
+ - Encontrar 1 veto item → `score ≤ [LÍMITE]`. Veredicto automático:
37
+ `RECHAZADO` o `APROBADO CON CORRECCIONES` (nunca `APROBADO` limpio).
38
+ - Encontrar 2+ veto items → `score ≤ [LÍMITE_ESTRICTO]`. Bloqueo absoluto.
39
+ - El veto NO se puede negociar bajando severidad.
40
+ - El cap se levanta SOLO cuando se demuestra remediación (commit + test) y el
41
+ revisor re-ejecuta la auditoría.
42
+
43
+ Reportar al inicio del reporte con bloque dedicado:
44
+
45
+ \`\`\`
46
+ ### VETO ITEMS DETECTADOS
47
+ - [VI-1] <descripción>: \`archivo:linea\` — <evidencia>
48
+ - [VI-N] <descripción>: \`archivo:linea\` — <evidencia>
49
+ → score CAP a [VALOR] ([N] veto items). Veredicto: [VEREDICTO].
50
+ \`\`\`
51
+
52
+ Si no se detecta ninguno: \`### VETO ITEMS DETECTADOS\n- Ninguno\`.
53
+ ```
54
+
55
+ ---
56
+
57
+ ## Reglas para definir veto items
58
+
59
+ Antes de declarar un veto item, verifica:
60
+
61
+ 1. **¿Existe una regla global que lo respalde?** Si no, no es veto. Crear o
62
+ actualizar la regla primero (`reglas/<dominio>.md`).
63
+ 2. **¿Es objetivamente detectable?** Un veto debe ser binario (presente o
64
+ ausente). Criterios subjetivos como "código feo" no califican.
65
+ 3. **¿Su presencia justifica bloquear el merge?** Si el equipo puede aprobar
66
+ el código sin corregirlo, no es veto — es hallazgo regular.
67
+ 4. **¿Es proporcional al dominio del revisor?** Un revisor de seguridad no
68
+ declara vetos de estilo. Cada revisor solo veta lo de su dominio.
69
+ 5. **¿Está la lista cerrada?** Una lista de 50 veto items es señal de mala
70
+ curación. Lo razonable: 8-15 items por revisor.
71
+
72
+ ---
73
+
74
+ ## Escalas recomendadas
75
+
76
+ | Tipo de reporte | Cap con 1 veto | Cap con 2+ vetos |
77
+ |-----------------|---------------|-----------------|
78
+ | Score 0-100 (CVSSv3-like) | 60/100 | 30/100 |
79
+ | Score 0-10 promedio por dimensión | 6.0/10 | 3.0/10 |
80
+ | Score 0-1 (probabilístico) | 0.6 | 0.3 |
81
+
82
+ ---
83
+
84
+ ## Ejemplos en agentes existentes
85
+
86
+ - `agentes/revisor-seguridad-swl.md` — 10 veto items de OWASP Top 10 + secrets + CVEs
87
+ - `agentes/revisor-codigo-swl.md` — 10 veto items mapeando a `reglas/estilo-codigo.md`
88
+ y `reglas/arquitectura.md`
89
+
90
+ ---
91
+
92
+ ## Cómo el ejecutor responde a un cap
93
+
94
+ Si recibes un reporte con veto items detectados:
95
+
96
+ 1. **NO negocies la severidad**. El cap está justificado por regla global.
97
+ 2. **Aplica las correcciones específicas** que el revisor indica con
98
+ archivo:línea.
99
+ 3. **Agrega un test que pruebe la corrección** (regression test). Sin test,
100
+ el veto puede regresar.
101
+ 4. **Solicita re-revisión** al mismo revisor. Si el veto desapareció, el cap
102
+ se levanta y el score se recalcula sin penalización.
103
+ 5. **Si NO puedes corregir** (limitación externa, blocker técnico): documenta
104
+ en `.planning/AUDITORIA.md` y escala al humano. NUNCA marques el trabajo
105
+ como completado con vetos abiertos.
@@ -1,47 +1,47 @@
1
- # Plantillas de GitHub Actions — swl-ses
2
-
3
- Tres workflows listos para copiar a `.github/workflows/` de cualquier proyecto.
4
-
5
- ## Cómo instalar
6
-
7
- La forma recomendada es via el comando interactivo:
8
-
9
- ```bash
10
- /swl:configurar-ci init
11
- ```
12
-
13
- O manualmente: copiar los archivos de esta carpeta a `.github/workflows/` de tu proyecto.
14
-
15
- ## Workflows disponibles
16
-
17
- ### `swl-security.yml` — Revisión de seguridad con Claude
18
-
19
- Corre en cada PR a `main`. Analiza el diff con `anthropics/claude-code-security-review`
20
- y comenta hallazgos directamente en el PR.
21
-
22
- **Requiere**: secret `CLAUDE_API_KEY` en GitHub Settings → Secrets and variables → Actions.
23
-
24
- ### `swl-ci.yml` — CI estándar
25
-
26
- Corre en push y PRs a `main`. Detecta Node.js automáticamente. Incluye secciones
27
- comentadas para Python, Rust y Go — activar las que correspondan al proyecto.
28
-
29
- - Matrix Node 22 + 24
30
- - `npm ci` → lint → type-check (si hay tsconfig.json) → tests
31
- - `concurrency: cancel-in-progress: true`
32
-
33
- **No requiere** secrets adicionales.
34
-
35
- ### `release-please.yml` — Releases automáticos
36
-
37
- Tras merge a `main`, crea un Release PR con el bump de versión y CHANGELOG
38
- generados desde conventional commits. Al mergear el Release PR, crea el tag
39
- y el GitHub Release.
40
-
41
- **No requiere** secrets adicionales (usa `GITHUB_TOKEN`). Requiere conventional commits.
42
-
43
- Ver `docs/RELEASE-PLEASE-MIGRATION.md` para comparativa con el flujo manual actual.
44
-
45
- ## Skill de referencia
46
-
47
- Para guía completa de setup, troubleshooting y gotchas: `Skill("infra-github-actions")`.
1
+ # Plantillas de GitHub Actions — swl-ses
2
+
3
+ Tres workflows listos para copiar a `.github/workflows/` de cualquier proyecto.
4
+
5
+ ## Cómo instalar
6
+
7
+ La forma recomendada es via el comando interactivo:
8
+
9
+ ```bash
10
+ /swl:configurar-ci init
11
+ ```
12
+
13
+ O manualmente: copiar los archivos de esta carpeta a `.github/workflows/` de tu proyecto.
14
+
15
+ ## Workflows disponibles
16
+
17
+ ### `swl-security.yml` — Revisión de seguridad con Claude
18
+
19
+ Corre en cada PR a `main`. Analiza el diff con `anthropics/claude-code-security-review`
20
+ y comenta hallazgos directamente en el PR.
21
+
22
+ **Requiere**: secret `CLAUDE_API_KEY` en GitHub Settings → Secrets and variables → Actions.
23
+
24
+ ### `swl-ci.yml` — CI estándar
25
+
26
+ Corre en push y PRs a `main`. Detecta Node.js automáticamente. Incluye secciones
27
+ comentadas para Python, Rust y Go — activar las que correspondan al proyecto.
28
+
29
+ - Matrix Node 22 + 24
30
+ - `npm ci` → lint → type-check (si hay tsconfig.json) → tests
31
+ - `concurrency: cancel-in-progress: true`
32
+
33
+ **No requiere** secrets adicionales.
34
+
35
+ ### `release-please.yml` — Releases automáticos
36
+
37
+ Tras merge a `main`, crea un Release PR con el bump de versión y CHANGELOG
38
+ generados desde conventional commits. Al mergear el Release PR, crea el tag
39
+ y el GitHub Release.
40
+
41
+ **No requiere** secrets adicionales (usa `GITHUB_TOKEN`). Requiere conventional commits.
42
+
43
+ Ver `docs/RELEASE-PLEASE-MIGRATION.md` para comparativa con el flujo manual actual.
44
+
45
+ ## Skill de referencia
46
+
47
+ Para guía completa de setup, troubleshooting y gotchas: `Skill("infra-github-actions")`.
@@ -1,44 +1,44 @@
1
- name: release-please
2
-
3
- # Plantilla distribuida por swl-ses.
4
- # Copiar este archivo a .github/workflows/ de tu proyecto.
5
- # Para setup automatizado: /swl:configurar-ci --with-release-please
6
- #
7
- # Release Please automatiza:
8
- # - Crea un "Release PR" con el bump de versión y CHANGELOG generado
9
- # automáticamente al detectar commits convencionales en main.
10
- # - Al mergear el Release PR, crea el tag git y el GitHub Release.
11
- #
12
- # Requiere conventional commits (feat:, fix:, chore(release):, etc.)
13
- # No requiere secrets adicionales — usa el GITHUB_TOKEN automático.
14
- #
15
- # Referencia oficial: https://github.com/googleapis/release-please-action
16
- # Versión en uso: v4
17
-
18
- on:
19
- push:
20
- branches:
21
- - main
22
-
23
- # release-please necesita escribir en el repo y abrir PRs.
24
- permissions:
25
- contents: write
26
- pull-requests: write
27
-
28
- name: release-please
29
-
30
- jobs:
31
- release-please:
32
- runs-on: ubuntu-latest
33
- steps:
34
- - uses: googleapis/release-please-action@v4
35
- with:
36
- # GITHUB_TOKEN es suficiente en la mayoría de repos.
37
- # Si el repo es de organización y las Actions no tienen permiso
38
- # de crear PRs, crear un PAT y usar secrets.MY_RELEASE_TOKEN.
39
- token: ${{ secrets.GITHUB_TOKEN }}
40
- # Estrategia de release. Opciones comunes:
41
- # "node" — para proyectos Node.js con package.json
42
- # "python" — para pyproject.toml / setup.cfg
43
- # "simple" — para cualquier stack (actualiza VERSION file)
44
- release-type: node
1
+ name: release-please
2
+
3
+ # Plantilla distribuida por swl-ses.
4
+ # Copiar este archivo a .github/workflows/ de tu proyecto.
5
+ # Para setup automatizado: /swl:configurar-ci --with-release-please
6
+ #
7
+ # Release Please automatiza:
8
+ # - Crea un "Release PR" con el bump de versión y CHANGELOG generado
9
+ # automáticamente al detectar commits convencionales en main.
10
+ # - Al mergear el Release PR, crea el tag git y el GitHub Release.
11
+ #
12
+ # Requiere conventional commits (feat:, fix:, chore(release):, etc.)
13
+ # No requiere secrets adicionales — usa el GITHUB_TOKEN automático.
14
+ #
15
+ # Referencia oficial: https://github.com/googleapis/release-please-action
16
+ # Versión en uso: v4
17
+
18
+ on:
19
+ push:
20
+ branches:
21
+ - main
22
+
23
+ # release-please necesita escribir en el repo y abrir PRs.
24
+ permissions:
25
+ contents: write
26
+ pull-requests: write
27
+
28
+ name: release-please
29
+
30
+ jobs:
31
+ release-please:
32
+ runs-on: ubuntu-latest
33
+ steps:
34
+ - uses: googleapis/release-please-action@v4
35
+ with:
36
+ # GITHUB_TOKEN es suficiente en la mayoría de repos.
37
+ # Si el repo es de organización y las Actions no tienen permiso
38
+ # de crear PRs, crear un PAT y usar secrets.MY_RELEASE_TOKEN.
39
+ token: ${{ secrets.GITHUB_TOKEN }}
40
+ # Estrategia de release. Opciones comunes:
41
+ # "node" — para proyectos Node.js con package.json
42
+ # "python" — para pyproject.toml / setup.cfg
43
+ # "simple" — para cualquier stack (actualiza VERSION file)
44
+ release-type: node
@@ -1,107 +1,107 @@
1
- name: CI
2
-
3
- # Plantilla distribuida por swl-ses.
4
- # Copiar este archivo a .github/workflows/ de tu proyecto.
5
- # Para setup automatizado: /swl:configurar-ci init
6
- #
7
- # Este workflow corre en push y PRs a main.
8
- # Detecta automáticamente Node.js; los stacks adicionales están comentados.
9
- # Activar las secciones que correspondan a tu proyecto.
10
- #
11
- # Para extender con Python, Rust o Go: descomentar las secciones al final
12
- # y combinar con el job principal o crear jobs separados según convenga.
13
-
14
- on:
15
- push:
16
- branches: [main]
17
- pull_request:
18
- branches: [main]
19
-
20
- # Cancela runs anteriores del mismo PR para evitar deploys simultáneos.
21
- concurrency:
22
- group: ${{ github.workflow }}-${{ github.ref }}
23
- cancel-in-progress: true
24
-
25
- jobs:
26
- test:
27
- runs-on: ubuntu-latest
28
- strategy:
29
- fail-fast: false
30
- matrix:
31
- # Node 22 (LTS) + Node 24 (current). Ajustar si el proyecto requiere
32
- # solo una versión.
33
- node-version: [22, 24]
34
-
35
- steps:
36
- - uses: actions/checkout@v5
37
-
38
- - name: Configurar Node.js ${{ matrix.node-version }}
39
- uses: actions/setup-node@v5
40
- with:
41
- node-version: ${{ matrix.node-version }}
42
- cache: npm
43
-
44
- # ── Node.js / JavaScript / TypeScript ────────────────────────────────
45
-
46
- - name: Instalar dependencias
47
- if: hashFiles('package.json') != ''
48
- run: npm ci
49
-
50
- - name: Lint
51
- if: hashFiles('package.json') != ''
52
- # Ajustar el script según cómo esté configurado en package.json.
53
- # Alternativas comunes: "lint", "lint:check", "eslint"
54
- run: npm run lint --if-present
55
-
56
- - name: Verificar tipos (TypeScript)
57
- if: hashFiles('tsconfig.json') != ''
58
- run: npx tsc --noEmit
59
-
60
- - name: Ejecutar tests
61
- if: hashFiles('package.json') != ''
62
- run: npm test
63
-
64
- # ── Python ────────────────────────────────────────────────────────────
65
- # Descomentar si el proyecto tiene código Python.
66
- #
67
- # - name: Configurar Python
68
- # if: hashFiles('pyproject.toml', 'setup.py', 'requirements.txt') != ''
69
- # uses: actions/setup-python@v5
70
- # with:
71
- # python-version: "3.11"
72
- # cache: pip
73
- #
74
- # - name: Instalar dependencias Python
75
- # if: hashFiles('pyproject.toml') != ''
76
- # run: pip install -e ".[dev]"
77
- #
78
- # - name: Lint Python (ruff)
79
- # run: ruff check .
80
- #
81
- # - name: Tests Python
82
- # run: pytest --cov-fail-under=80
83
-
84
- # ── Rust ─────────────────────────────────────────────────────────────
85
- # Descomentar si el proyecto tiene código Rust.
86
- #
87
- # - name: Configurar Rust
88
- # if: hashFiles('Cargo.toml') != ''
89
- # uses: dtolnay/rust-toolchain@stable
90
- #
91
- # - name: Lint Rust (clippy)
92
- # run: cargo clippy -- -D warnings
93
- #
94
- # - name: Tests Rust
95
- # run: cargo test
96
-
97
- # ── Go ───────────────────────────────────────────────────────────────
98
- # Descomentar si el proyecto tiene código Go.
99
- #
100
- # - name: Configurar Go
101
- # if: hashFiles('go.mod') != ''
102
- # uses: actions/setup-go@v5
103
- # with:
104
- # go-version: stable
105
- #
106
- # - name: Tests Go
107
- # run: go test ./...
1
+ name: CI
2
+
3
+ # Plantilla distribuida por swl-ses.
4
+ # Copiar este archivo a .github/workflows/ de tu proyecto.
5
+ # Para setup automatizado: /swl:configurar-ci init
6
+ #
7
+ # Este workflow corre en push y PRs a main.
8
+ # Detecta automáticamente Node.js; los stacks adicionales están comentados.
9
+ # Activar las secciones que correspondan a tu proyecto.
10
+ #
11
+ # Para extender con Python, Rust o Go: descomentar las secciones al final
12
+ # y combinar con el job principal o crear jobs separados según convenga.
13
+
14
+ on:
15
+ push:
16
+ branches: [main]
17
+ pull_request:
18
+ branches: [main]
19
+
20
+ # Cancela runs anteriores del mismo PR para evitar deploys simultáneos.
21
+ concurrency:
22
+ group: ${{ github.workflow }}-${{ github.ref }}
23
+ cancel-in-progress: true
24
+
25
+ jobs:
26
+ test:
27
+ runs-on: ubuntu-latest
28
+ strategy:
29
+ fail-fast: false
30
+ matrix:
31
+ # Node 22 (LTS) + Node 24 (current). Ajustar si el proyecto requiere
32
+ # solo una versión.
33
+ node-version: [22, 24]
34
+
35
+ steps:
36
+ - uses: actions/checkout@v5
37
+
38
+ - name: Configurar Node.js ${{ matrix.node-version }}
39
+ uses: actions/setup-node@v5
40
+ with:
41
+ node-version: ${{ matrix.node-version }}
42
+ cache: npm
43
+
44
+ # ── Node.js / JavaScript / TypeScript ────────────────────────────────
45
+
46
+ - name: Instalar dependencias
47
+ if: hashFiles('package.json') != ''
48
+ run: npm ci
49
+
50
+ - name: Lint
51
+ if: hashFiles('package.json') != ''
52
+ # Ajustar el script según cómo esté configurado en package.json.
53
+ # Alternativas comunes: "lint", "lint:check", "eslint"
54
+ run: npm run lint --if-present
55
+
56
+ - name: Verificar tipos (TypeScript)
57
+ if: hashFiles('tsconfig.json') != ''
58
+ run: npx tsc --noEmit
59
+
60
+ - name: Ejecutar tests
61
+ if: hashFiles('package.json') != ''
62
+ run: npm test
63
+
64
+ # ── Python ────────────────────────────────────────────────────────────
65
+ # Descomentar si el proyecto tiene código Python.
66
+ #
67
+ # - name: Configurar Python
68
+ # if: hashFiles('pyproject.toml', 'setup.py', 'requirements.txt') != ''
69
+ # uses: actions/setup-python@v5
70
+ # with:
71
+ # python-version: "3.11"
72
+ # cache: pip
73
+ #
74
+ # - name: Instalar dependencias Python
75
+ # if: hashFiles('pyproject.toml') != ''
76
+ # run: pip install -e ".[dev]"
77
+ #
78
+ # - name: Lint Python (ruff)
79
+ # run: ruff check .
80
+ #
81
+ # - name: Tests Python
82
+ # run: pytest --cov-fail-under=80
83
+
84
+ # ── Rust ─────────────────────────────────────────────────────────────
85
+ # Descomentar si el proyecto tiene código Rust.
86
+ #
87
+ # - name: Configurar Rust
88
+ # if: hashFiles('Cargo.toml') != ''
89
+ # uses: dtolnay/rust-toolchain@stable
90
+ #
91
+ # - name: Lint Rust (clippy)
92
+ # run: cargo clippy -- -D warnings
93
+ #
94
+ # - name: Tests Rust
95
+ # run: cargo test
96
+
97
+ # ── Go ───────────────────────────────────────────────────────────────
98
+ # Descomentar si el proyecto tiene código Go.
99
+ #
100
+ # - name: Configurar Go
101
+ # if: hashFiles('go.mod') != ''
102
+ # uses: actions/setup-go@v5
103
+ # with:
104
+ # go-version: stable
105
+ #
106
+ # - name: Tests Go
107
+ # run: go test ./...