@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/bin/swl-ses.js CHANGED
@@ -190,7 +190,7 @@ GESTIÓN DE COMPONENTES:
190
190
  agents remove <nombre> Remueve un agente individual
191
191
 
192
192
  OPCIONES DE INSTALL:
193
- --target <runtime> Runtime destino: claude|openclaude|copilot|opencode|codex|gemini (default: claude)
193
+ --target <runtime> Runtime destino: claude|openclaude|copilot|opencode|codex|gemini|cursor (default: claude)
194
194
  --profile <perfil> Perfil: core|backend-python|backend-node|frontend-react|frontend-angular|
195
195
  fullstack-python-angular|fullstack-node-react|mobile|devops|completo (default: core)
196
196
  --with <componentes> Incluir componentes adicionales (separados por coma)
@@ -200,10 +200,19 @@ OPCIONES DE INSTALL:
200
200
  --dry-run Mostrar plan sin aplicar cambios
201
201
  --force Sobreescribir archivos existentes sin confirmar
202
202
  --all-langs Instalar reglas de todos los lenguajes (omite detección automática de stack)
203
+ --with-mcp Configura el MCP server swl-memory automáticamente (v1.5.0+)
204
+ --tui Fuerza el modo TUI visual aunque pases otros flags (v1.6.0+)
205
+ --no-tui Desactiva el TUI; usa el asistido lineal clásico (v1.6.0+)
206
+ --verbose Expande el panel de log del Progreso del TUI de 8 a 24 líneas (v1.6.0+)
203
207
  --no-claudemd No modificar el CLAUDE.md del proyecto (solo aplica con --target claude).
204
208
  Por defecto el instalador crea o actualiza un bloque delimitado por
205
209
  <!-- SWL-BEGIN vX.Y.Z --> / <!-- SWL-END --> preservando el resto del archivo.
206
210
 
211
+ MODOS DE INVOCACIÓN (v1.6.0+):
212
+ TTY + sin flags → TUI visual completo (recomendado)
213
+ TTY + --no-tui → Asistido lineal clásico (preguntas en serie)
214
+ No-TTY o con flags → Modo directo sin prompts (CI/scripts)
215
+
207
216
  OPCIONES DE SKILLS/AGENTS:
208
217
  --skill <nombre> Nombre del skill a extraer del repo (con skills add)
209
218
  --agent <nombre> Nombre del agente a extraer del repo (con agents add)
@@ -215,11 +224,14 @@ OPCIONES GENERALES:
215
224
 
216
225
  EJEMPLOS:
217
226
  ${NOMBRE} init
218
- ${NOMBRE} install (modo asistido — recomendado para primera vez)
227
+ ${NOMBRE} install (TUI visual — recomendado para primera vez)
228
+ ${NOMBRE} install --no-tui (asistido lineal clásico)
219
229
  ${NOMBRE} install --target claude --profile backend-python
220
230
  ${NOMBRE} install --target openclaude --profile fullstack-python-angular
221
231
  ${NOMBRE} install --target gemini --profile core
222
232
  ${NOMBRE} install --target copilot --profile fullstack-node-react
233
+ ${NOMBRE} update (TUI visual con multi-select de runtimes)
234
+ ${NOMBRE} update --no-tui (preguntas lineales clásicas)
223
235
  ${NOMBRE} skills list --target claude
224
236
  ${NOMBRE} skills add https://github.com/user/repo --skill mi-skill
225
237
  ${NOMBRE} agents add ./path/local --agent mi-agente
@@ -312,14 +324,44 @@ function main() {
312
324
 
313
325
  const opciones = parsearOpciones(args.slice(1));
314
326
 
315
- // Modo asistido: `install` sin flags → flujo interactivo
316
- // (Si el usuario pasa cualquier flag relevante, se asume que sabe lo que hace.)
317
- if (comando === 'install') {
318
- const flagsIrrelevantesParaAsistido = ['verbose'];
327
+ // Modo asistido / TUI: `install` o `update` sin flags relevantes modo visual.
328
+ //
329
+ // Niveles de fallback:
330
+ // 1. TTY + sin flags (excepto --tui): lanzar TUI completo (scripts/tui/index.js)
331
+ // 2. TTY + --no-tui: lanzar install-asistido clásico (preguntarOpcion lineal)
332
+ // 3. No TTY (CI/pipe): flujo clásico con flags por defecto sin asistido
333
+ //
334
+ // El usuario puede forzar el TUI incluso con flags pasando --tui.
335
+ if (comando === 'install' || comando === 'update') {
336
+ const flagsIrrelevantesParaAsistido = ['verbose', 'tui'];
319
337
  const flagsEspecificados = Object.keys(opciones).filter(
320
338
  k => k !== '_args' && !flagsIrrelevantesParaAsistido.includes(k)
321
339
  );
322
- if (flagsEspecificados.length === 0) {
340
+ const stdinTty = !!process.stdin.isTTY;
341
+ const optoutTui = opciones['no-tui'] || opciones.no_tui;
342
+ const forzarTui = opciones.tui;
343
+ const sinFlags = flagsEspecificados.length === 0;
344
+
345
+ if ((sinFlags || forzarTui) && stdinTty && !optoutTui) {
346
+ try {
347
+ const { iniciarTui } = require('../scripts/tui');
348
+ iniciarTui({ operacionInicial: comando }).then(() => {
349
+ process.exit(0);
350
+ }).catch(err => {
351
+ console.error(`Error en TUI: ${err.message}`);
352
+ if (opciones.verbose) console.error(err.stack);
353
+ process.exit(1);
354
+ });
355
+ return;
356
+ } catch (err) {
357
+ console.error(`Error cargando TUI: ${err.message}`);
358
+ if (opciones.verbose) console.error(err.stack);
359
+ // Caer al asistido clásico como fallback
360
+ }
361
+ }
362
+
363
+ if (comando === 'install' && sinFlags && !forzarTui) {
364
+ // Fallback al asistido lineal (sin TUI) — preserva la UX de versiones previas
323
365
  try {
324
366
  const asistido = require('../scripts/comandos/install-asistido');
325
367
  asistido.main().catch(err => {
@@ -1,23 +1,23 @@
1
- {
2
- "release.md": {
3
- "evolved": true,
4
- "evolvedFrom": "5.4.0",
5
- "evolvedAt": "2026-04-11",
6
- "evolvedBy": "aprender",
7
- "evolvedNote": "mejora de metodología: checklist obligatoria de archivos de versión en paso 6"
8
- },
9
- "aprender.md": {
10
- "evolved": true,
11
- "evolvedFrom": "5.12.3",
12
- "evolvedAt": "2026-04-25",
13
- "evolvedBy": "aprender",
14
- "evolvedNote": "Paso 2 — filtro crítico obligatorio sobre reportes de sub-agentes Explore para evitar sobre-ingeniería al analizar papers académicos"
15
- },
16
- "verificar.md": {
17
- "evolved": true,
18
- "evolvedFrom": "5.12.3",
19
- "evolvedAt": "2026-04-26",
20
- "evolvedBy": "evolucionar",
21
- "evolvedNote": "flag --until-converge para iterar verificar→corregir→re-verificar hasta 0 hallazgos CRÍTICO+ALTO+MAYOR (max-iter=5, --no-prompt CI, detección adversarial ≥5 hallazgos nuevos)"
22
- }
1
+ {
2
+ "release.md": {
3
+ "evolved": true,
4
+ "evolvedFrom": "5.4.0",
5
+ "evolvedAt": "2026-04-11",
6
+ "evolvedBy": "aprender",
7
+ "evolvedNote": "mejora de metodología: checklist obligatoria de archivos de versión en paso 6"
8
+ },
9
+ "aprender.md": {
10
+ "evolved": true,
11
+ "evolvedFrom": "5.12.3",
12
+ "evolvedAt": "2026-04-25",
13
+ "evolvedBy": "aprender",
14
+ "evolvedNote": "Paso 2 — filtro crítico obligatorio sobre reportes de sub-agentes Explore para evitar sobre-ingeniería al analizar papers académicos"
15
+ },
16
+ "verificar.md": {
17
+ "evolved": true,
18
+ "evolvedFrom": "5.12.3",
19
+ "evolvedAt": "2026-04-26",
20
+ "evolvedBy": "evolucionar",
21
+ "evolvedNote": "flag --until-converge para iterar verificar→corregir→re-verificar hasta 0 hallazgos CRÍTICO+ALTO+MAYOR (max-iter=5, --no-prompt CI, detección adversarial ≥5 hallazgos nuevos)"
22
+ }
23
23
  }
@@ -1,233 +1,233 @@
1
- ---
2
- name: swl:contribuir
3
- description: Contribuye evoluciones de _userland/ al core de swl-ses creando un PR en GitHub. Filtra por dominio (solo ingeniería de software general), evalúa calidad con PluginEval (score ≥80 requerido) y crea el PR vía gh CLI. Flags: --skill=[nombre], --agente=[nombre], --dry-run.
4
- allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
5
- ---
6
-
7
- # /swl:contribuir — Contribuir evoluciones al core de swl-ses
8
-
9
- Eres el facilitador de contribuciones del sistema SWL. Tu responsabilidad es tomar evoluciones que un usuario creó en `_userland/` y, si pasan los filtros de calidad y dominio, crear un Pull Request contra el repositorio oficial de swl-ses.
10
-
11
- **Principio**: las evoluciones específicas de un proyecto se quedan en `_userland/` — solo evoluciones de dominio general pasan al core. Un skill de "configuración de Stripe para mi SaaS" no sube; un skill de "patrones de testing de APIs de pago" sí.
12
-
13
- ## Cuándo usar este comando
14
-
15
- - Cuando el usuario evolucionó un agente o skill en `_userland/` y quiere compartirlo con la comunidad
16
- - Después de `/swl:evolucionar` cuando el cambio aplica a cualquier proyecto de software
17
- - Cuando se creó un skill nuevo con `/swl:crear-skill` que resuelve un problema general de ingeniería
18
-
19
- ## Prerrequisitos
20
-
21
- 1. **GitHub CLI (`gh`) autenticado** — verificar con `gh auth status`
22
- 2. **Evolución marcada** — el artefacto debe tener `evolved: true` en frontmatter o existir en `_userland/`
23
- 3. **Repositorio swl-ses accesible** — se necesita permiso de fork/PR
24
-
25
- ## Flags soportados
26
-
27
- ```
28
- --skill=[nombre] Contribuir solo el skill indicado de _userland/habilidades/
29
- --agente=[nombre] Contribuir solo el agente indicado de _userland/agentes/
30
- --dry-run Ejecutar validaciones y evaluación sin crear PR
31
- ```
32
-
33
- Si no se pasa flag, escanea todo `_userland/` buscando candidatos.
34
-
35
- ## Paso 0 — Verificar prerrequisitos
36
-
37
- Verificar que `gh` está instalado y autenticado:
38
-
39
- ```bash
40
- gh auth status
41
- ```
42
-
43
- Si falla:
44
- - **No instalado**: indicar al usuario que instale GitHub CLI (ver MANUAL_USO.md § Dependencias externas)
45
- - **No autenticado**: indicar al usuario que ejecute `! gh auth login` desde el prompt de Claude Code
46
-
47
- DETENER si `gh auth status` no reporta una cuenta autenticada.
48
-
49
- ## Paso 1 — Escanear candidatos en _userland/
50
-
51
- Buscar artefactos en `_userland/habilidades/` y `_userland/agentes/`:
52
-
53
- ```bash
54
- # Skills con SKILL.md
55
- for dir in _userland/habilidades/*/; do
56
- [ -f "$dir/SKILL.md" ] && echo "skill: $(basename $dir)"
57
- done
58
-
59
- # Agentes con .md
60
- for f in _userland/agentes/*.md; do
61
- [ -f "$f" ] && echo "agente: $(basename $f .md)"
62
- done
63
- ```
64
-
65
- Si se pasó `--skill` o `--agente`, filtrar a solo ese candidato.
66
-
67
- Si no hay candidatos, informar:
68
- ```
69
- No se encontraron evoluciones en _userland/ para contribuir.
70
- Usa /swl:evolucionar o /swl:crear-skill para generar evoluciones primero.
71
- ```
72
-
73
- ## Paso 2 — Filtro de dominio
74
-
75
- Para cada candidato, leer su contenido y evaluar compatibilidad de dominio.
76
-
77
- **Pregunta de filtro**: *¿Le sirve esto a un ingeniero de software en cualquier proyecto de software?*
78
-
79
- **Dominios aceptados** (ingeniería de software general):
80
- - SDLC, backend, frontend, QA, DevOps, seguridad, arquitectura
81
- - Testing, CI/CD, monitoreo, observabilidad
82
- - Patrones de diseño, refactoring, revisión de código
83
- - APIs, bases de datos, infraestructura cloud
84
-
85
- **Dominios rechazados** (verticales específicos):
86
- - ML/AI productivo, ciencia de datos, bioinformática
87
- - Finanzas, contabilidad, legal
88
- - Dominio de negocio específico del proyecto
89
-
90
- Para cada candidato rechazado, explicar por qué:
91
- ```
92
- RECHAZADO: [nombre] — dominio "[dominio detectado]" no es ingeniería de software general.
93
- Las evoluciones específicas de dominio se mantienen en _userland/ del proyecto.
94
- ```
95
-
96
- ## Paso 3 — Evaluación PluginEval
97
-
98
- Para cada candidato que pasó el filtro de dominio, ejecutar evaluación de calidad.
99
-
100
- Cargar:
101
- ```
102
- Skill("evaluacion-agentes")
103
- ```
104
-
105
- Ejecutar evaluación completa (2 capas). El score mínimo para contribuir es **80/100** (badge Oro).
106
-
107
- - **Score ≥ 80**: APROBADO — continuar al siguiente paso
108
- - **Score 60-79**: RECHAZADO con recomendaciones de mejora
109
- - **Score < 60**: RECHAZADO — necesita trabajo significativo
110
-
111
- ```
112
- EVALUACIÓN: [nombre]
113
- Capa 1 (estática): [N] errores, [N] advertencias
114
- Capa 2 (semántica): [score]/100 — badge [badge]
115
- Veredicto: [APROBADO | RECHAZADO]
116
- [Si rechazado: top 3 mejoras recomendadas]
117
- ```
118
-
119
- Si `--dry-run`: presentar resultados de evaluación y TERMINAR.
120
-
121
- ## Paso 4 — Preparar contribución
122
-
123
- Para cada candidato aprobado:
124
-
125
- 1. **Guardar ruta del workspace original** antes de cambiar de directorio:
126
- ```bash
127
- WORKSPACE_DIR=$(pwd)
128
- ```
129
-
130
- 2. **Crear fork** (si no existe) del repo oficial de swl-ses y obtener el nombre del fork:
131
- ```bash
132
- gh repo fork saul-wade/swl-ses --clone=false
133
- FORK_REPO=$(gh api user --jq '.login')/swl-ses
134
- ```
135
-
136
- 3. **Clonar el fork** y crear branch descriptivo:
137
- ```bash
138
- gh repo clone "$FORK_REPO" /tmp/swl-ses-contrib
139
- cd /tmp/swl-ses-contrib
140
- git checkout -b contrib/[tipo]-[nombre]
141
- ```
142
-
143
- 4. **Copiar artefacto** desde el workspace original al clon del fork:
144
- - Skills: `$WORKSPACE_DIR/_userland/habilidades/[nombre]/` → `habilidades/[nombre]/`
145
- - Agentes: `$WORKSPACE_DIR/_userland/agentes/[nombre].md` → `agentes/[nombre].md`
146
-
147
- 4. **Ajustar frontmatter** — agregar campos de contribución:
148
- ```yaml
149
- contributed: true
150
- contributed-from: "_userland"
151
- contributed-at: "[fecha YYYY-MM-DD]"
152
- contributed-by: "[usuario gh]"
153
- plugineval-score: [score]
154
- ```
155
-
156
- 5. **Registrar en plugin.json** si es necesario
157
-
158
- ## Paso 5 — Crear Pull Request
159
-
160
- Crear el PR con template estructurado:
161
-
162
- ```bash
163
- git add .
164
- git commit -m "contrib([tipo]): agrega [nombre] desde _userland
165
-
166
- Evaluado con PluginEval: [score]/100 (badge [badge]).
167
- Dominio: ingeniería de software general.
168
-
169
- Co-Authored-By: swl-ses <noreply@swl-ses>"
170
-
171
- git push origin contrib/[tipo]-[nombre]
172
-
173
- gh pr create \
174
- --repo saul-wade/swl-ses \
175
- --title "contrib([tipo]): [nombre]" \
176
- --body "$(cat <<'EOF'
177
- ## Contribución desde _userland
178
-
179
- **Tipo**: [skill | agente]
180
- **Nombre**: [nombre]
181
- **Dominio**: [dominio detectado]
182
- **PluginEval**: [score]/100 — badge [badge]
183
-
184
- ## Descripción
185
-
186
- [Descripción extraída del artefacto]
187
-
188
- ## Evidencia de calidad
189
-
190
- - Capa 1 (estática): [N] errores, [N] advertencias
191
- - Capa 2 (semántica): [score]/100
192
- - Filtro de dominio: APROBADO (ingeniería de software general)
193
-
194
- ## Checklist
195
-
196
- - [ ] Score PluginEval ≥ 80
197
- - [ ] Dominio: ingeniería de software general
198
- - [ ] Sin credenciales hardcodeadas
199
- - [ ] Frontmatter válido
200
- - [ ] No duplica skill/agente existente
201
-
202
- ---
203
- Generado por `/swl:contribuir` — swl-ses v[versión]
204
- EOF
205
- )"
206
- ```
207
-
208
- ## Paso 6 — Reporte final
209
-
210
- ```
211
- === Contribución completada ===
212
-
213
- Candidatos escaneados: [N]
214
- Filtro de dominio: [N] aprobados, [N] rechazados
215
- Evaluación PluginEval: [N] aprobados (≥80), [N] rechazados
216
- PRs creados: [N]
217
-
218
- [Para cada PR creado:]
219
- → [nombre]: [URL del PR]
220
-
221
- Los PRs serán revisados por los mantenedores de swl-ses.
222
- ```
223
-
224
- ## Reglas de comportamiento
225
-
226
- - NUNCA crear un PR sin que el candidato haya pasado AMBOS filtros (dominio + PluginEval ≥ 80).
227
- - NUNCA contribuir artefactos que contengan credenciales, tokens o datos del proyecto del usuario.
228
- - NUNCA modificar artefactos del core existente — solo agregar nuevos.
229
- - Si el artefacto duplica funcionalidad de uno existente en el core, RECHAZAR y sugerir `/swl:evolucionar` en su lugar.
230
- - Si `gh auth status` falla, DETENER inmediatamente — no intentar autenticación automática.
231
- - En `--dry-run`, el reporte debe ser completo y accionable sin crear ningún PR.
232
- - Los artefactos contribuidos mantienen su autoría original (campo `contributed-by`).
233
- - SIEMPRE verificar que el nombre del artefacto no colisione con uno existente en el core antes de crear el PR.
1
+ ---
2
+ name: swl:contribuir
3
+ description: Contribuye evoluciones de _userland/ al core de swl-ses creando un PR en GitHub. Filtra por dominio (solo ingeniería de software general), evalúa calidad con PluginEval (score ≥80 requerido) y crea el PR vía gh CLI. Flags: --skill=[nombre], --agente=[nombre], --dry-run.
4
+ allowed_tools: ["Read", "Write", "Edit", "Bash", "Glob", "Grep", "Agent"]
5
+ ---
6
+
7
+ # /swl:contribuir — Contribuir evoluciones al core de swl-ses
8
+
9
+ Eres el facilitador de contribuciones del sistema SWL. Tu responsabilidad es tomar evoluciones que un usuario creó en `_userland/` y, si pasan los filtros de calidad y dominio, crear un Pull Request contra el repositorio oficial de swl-ses.
10
+
11
+ **Principio**: las evoluciones específicas de un proyecto se quedan en `_userland/` — solo evoluciones de dominio general pasan al core. Un skill de "configuración de Stripe para mi SaaS" no sube; un skill de "patrones de testing de APIs de pago" sí.
12
+
13
+ ## Cuándo usar este comando
14
+
15
+ - Cuando el usuario evolucionó un agente o skill en `_userland/` y quiere compartirlo con la comunidad
16
+ - Después de `/swl:evolucionar` cuando el cambio aplica a cualquier proyecto de software
17
+ - Cuando se creó un skill nuevo con `/swl:crear-skill` que resuelve un problema general de ingeniería
18
+
19
+ ## Prerrequisitos
20
+
21
+ 1. **GitHub CLI (`gh`) autenticado** — verificar con `gh auth status`
22
+ 2. **Evolución marcada** — el artefacto debe tener `evolved: true` en frontmatter o existir en `_userland/`
23
+ 3. **Repositorio swl-ses accesible** — se necesita permiso de fork/PR
24
+
25
+ ## Flags soportados
26
+
27
+ ```
28
+ --skill=[nombre] Contribuir solo el skill indicado de _userland/habilidades/
29
+ --agente=[nombre] Contribuir solo el agente indicado de _userland/agentes/
30
+ --dry-run Ejecutar validaciones y evaluación sin crear PR
31
+ ```
32
+
33
+ Si no se pasa flag, escanea todo `_userland/` buscando candidatos.
34
+
35
+ ## Paso 0 — Verificar prerrequisitos
36
+
37
+ Verificar que `gh` está instalado y autenticado:
38
+
39
+ ```bash
40
+ gh auth status
41
+ ```
42
+
43
+ Si falla:
44
+ - **No instalado**: indicar al usuario que instale GitHub CLI (ver MANUAL_USO.md § Dependencias externas)
45
+ - **No autenticado**: indicar al usuario que ejecute `! gh auth login` desde el prompt de Claude Code
46
+
47
+ DETENER si `gh auth status` no reporta una cuenta autenticada.
48
+
49
+ ## Paso 1 — Escanear candidatos en _userland/
50
+
51
+ Buscar artefactos en `_userland/habilidades/` y `_userland/agentes/`:
52
+
53
+ ```bash
54
+ # Skills con SKILL.md
55
+ for dir in _userland/habilidades/*/; do
56
+ [ -f "$dir/SKILL.md" ] && echo "skill: $(basename $dir)"
57
+ done
58
+
59
+ # Agentes con .md
60
+ for f in _userland/agentes/*.md; do
61
+ [ -f "$f" ] && echo "agente: $(basename $f .md)"
62
+ done
63
+ ```
64
+
65
+ Si se pasó `--skill` o `--agente`, filtrar a solo ese candidato.
66
+
67
+ Si no hay candidatos, informar:
68
+ ```
69
+ No se encontraron evoluciones en _userland/ para contribuir.
70
+ Usa /swl:evolucionar o /swl:crear-skill para generar evoluciones primero.
71
+ ```
72
+
73
+ ## Paso 2 — Filtro de dominio
74
+
75
+ Para cada candidato, leer su contenido y evaluar compatibilidad de dominio.
76
+
77
+ **Pregunta de filtro**: *¿Le sirve esto a un ingeniero de software en cualquier proyecto de software?*
78
+
79
+ **Dominios aceptados** (ingeniería de software general):
80
+ - SDLC, backend, frontend, QA, DevOps, seguridad, arquitectura
81
+ - Testing, CI/CD, monitoreo, observabilidad
82
+ - Patrones de diseño, refactoring, revisión de código
83
+ - APIs, bases de datos, infraestructura cloud
84
+
85
+ **Dominios rechazados** (verticales específicos):
86
+ - ML/AI productivo, ciencia de datos, bioinformática
87
+ - Finanzas, contabilidad, legal
88
+ - Dominio de negocio específico del proyecto
89
+
90
+ Para cada candidato rechazado, explicar por qué:
91
+ ```
92
+ RECHAZADO: [nombre] — dominio "[dominio detectado]" no es ingeniería de software general.
93
+ Las evoluciones específicas de dominio se mantienen en _userland/ del proyecto.
94
+ ```
95
+
96
+ ## Paso 3 — Evaluación PluginEval
97
+
98
+ Para cada candidato que pasó el filtro de dominio, ejecutar evaluación de calidad.
99
+
100
+ Cargar:
101
+ ```
102
+ Skill("evaluacion-agentes")
103
+ ```
104
+
105
+ Ejecutar evaluación completa (2 capas). El score mínimo para contribuir es **80/100** (badge Oro).
106
+
107
+ - **Score ≥ 80**: APROBADO — continuar al siguiente paso
108
+ - **Score 60-79**: RECHAZADO con recomendaciones de mejora
109
+ - **Score < 60**: RECHAZADO — necesita trabajo significativo
110
+
111
+ ```
112
+ EVALUACIÓN: [nombre]
113
+ Capa 1 (estática): [N] errores, [N] advertencias
114
+ Capa 2 (semántica): [score]/100 — badge [badge]
115
+ Veredicto: [APROBADO | RECHAZADO]
116
+ [Si rechazado: top 3 mejoras recomendadas]
117
+ ```
118
+
119
+ Si `--dry-run`: presentar resultados de evaluación y TERMINAR.
120
+
121
+ ## Paso 4 — Preparar contribución
122
+
123
+ Para cada candidato aprobado:
124
+
125
+ 1. **Guardar ruta del workspace original** antes de cambiar de directorio:
126
+ ```bash
127
+ WORKSPACE_DIR=$(pwd)
128
+ ```
129
+
130
+ 2. **Crear fork** (si no existe) del repo oficial de swl-ses y obtener el nombre del fork:
131
+ ```bash
132
+ gh repo fork saul-wade/swl-ses --clone=false
133
+ FORK_REPO=$(gh api user --jq '.login')/swl-ses
134
+ ```
135
+
136
+ 3. **Clonar el fork** y crear branch descriptivo:
137
+ ```bash
138
+ gh repo clone "$FORK_REPO" /tmp/swl-ses-contrib
139
+ cd /tmp/swl-ses-contrib
140
+ git checkout -b contrib/[tipo]-[nombre]
141
+ ```
142
+
143
+ 4. **Copiar artefacto** desde el workspace original al clon del fork:
144
+ - Skills: `$WORKSPACE_DIR/_userland/habilidades/[nombre]/` → `habilidades/[nombre]/`
145
+ - Agentes: `$WORKSPACE_DIR/_userland/agentes/[nombre].md` → `agentes/[nombre].md`
146
+
147
+ 4. **Ajustar frontmatter** — agregar campos de contribución:
148
+ ```yaml
149
+ contributed: true
150
+ contributed-from: "_userland"
151
+ contributed-at: "[fecha YYYY-MM-DD]"
152
+ contributed-by: "[usuario gh]"
153
+ plugineval-score: [score]
154
+ ```
155
+
156
+ 5. **Registrar en plugin.json** si es necesario
157
+
158
+ ## Paso 5 — Crear Pull Request
159
+
160
+ Crear el PR con template estructurado:
161
+
162
+ ```bash
163
+ git add .
164
+ git commit -m "contrib([tipo]): agrega [nombre] desde _userland
165
+
166
+ Evaluado con PluginEval: [score]/100 (badge [badge]).
167
+ Dominio: ingeniería de software general.
168
+
169
+ Co-Authored-By: swl-ses <noreply@swl-ses>"
170
+
171
+ git push origin contrib/[tipo]-[nombre]
172
+
173
+ gh pr create \
174
+ --repo saul-wade/swl-ses \
175
+ --title "contrib([tipo]): [nombre]" \
176
+ --body "$(cat <<'EOF'
177
+ ## Contribución desde _userland
178
+
179
+ **Tipo**: [skill | agente]
180
+ **Nombre**: [nombre]
181
+ **Dominio**: [dominio detectado]
182
+ **PluginEval**: [score]/100 — badge [badge]
183
+
184
+ ## Descripción
185
+
186
+ [Descripción extraída del artefacto]
187
+
188
+ ## Evidencia de calidad
189
+
190
+ - Capa 1 (estática): [N] errores, [N] advertencias
191
+ - Capa 2 (semántica): [score]/100
192
+ - Filtro de dominio: APROBADO (ingeniería de software general)
193
+
194
+ ## Checklist
195
+
196
+ - [ ] Score PluginEval ≥ 80
197
+ - [ ] Dominio: ingeniería de software general
198
+ - [ ] Sin credenciales hardcodeadas
199
+ - [ ] Frontmatter válido
200
+ - [ ] No duplica skill/agente existente
201
+
202
+ ---
203
+ Generado por `/swl:contribuir` — swl-ses v[versión]
204
+ EOF
205
+ )"
206
+ ```
207
+
208
+ ## Paso 6 — Reporte final
209
+
210
+ ```
211
+ === Contribución completada ===
212
+
213
+ Candidatos escaneados: [N]
214
+ Filtro de dominio: [N] aprobados, [N] rechazados
215
+ Evaluación PluginEval: [N] aprobados (≥80), [N] rechazados
216
+ PRs creados: [N]
217
+
218
+ [Para cada PR creado:]
219
+ → [nombre]: [URL del PR]
220
+
221
+ Los PRs serán revisados por los mantenedores de swl-ses.
222
+ ```
223
+
224
+ ## Reglas de comportamiento
225
+
226
+ - NUNCA crear un PR sin que el candidato haya pasado AMBOS filtros (dominio + PluginEval ≥ 80).
227
+ - NUNCA contribuir artefactos que contengan credenciales, tokens o datos del proyecto del usuario.
228
+ - NUNCA modificar artefactos del core existente — solo agregar nuevos.
229
+ - Si el artefacto duplica funcionalidad de uno existente en el core, RECHAZAR y sugerir `/swl:evolucionar` en su lugar.
230
+ - Si `gh auth status` falla, DETENER inmediatamente — no intentar autenticación automática.
231
+ - En `--dry-run`, el reporte debe ser completo y accionable sin crear ningún PR.
232
+ - Los artefactos contribuidos mantienen su autoría original (campo `contributed-by`).
233
+ - SIEMPRE verificar que el nombre del artefacto no colisione con uno existente en el core antes de crear el PR.