@saulwade/swl-ses 2.5.2 → 2.5.3

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 CHANGED
@@ -1,4 +1,4 @@
1
- # CLAUDE.md — @saulwade/swl-ses v2.5.2
1
+ # CLAUDE.md — @saulwade/swl-ses v2.5.3
2
2
 
3
3
  ## Reglas de máxima prioridad (aplican SIEMPRE, sin excepción)
4
4
 
@@ -63,7 +63,9 @@ NUNCA asumir, sugerir como hecho consumado, ni escribir en ADRs/manifiestos/CHAN
63
63
  - **JSONL para alta frecuencia**: usar `fs.appendFileSync(ruta, JSON.stringify(evento) + '\n')` en hooks de telemetría/auditoría — no `atomicWriteJSON` que reescribe todo
64
64
  - **Fechas de artefactos generados SIEMPRE locales**: `toLocaleDateString('sv')`, NUNCA `toISOString().slice(0,10)` — desde México la tarde ya es "mañana" en UTC (x7 sitios corregidos 2026-07-08)
65
65
  - **Reemplazos con backticks/regex vía `node -e` en bash mangean escapes en silencio** ("aplica" sin aplicar): usar heredoc `node <<'EOF'` + `String.raw` (x3 incidentes 2026-07-08)
66
- - **`plugin.json#agents`/`#skills` son alfabéticos**: insertar en posición — ningún gate valida el orden
66
+ - **`plugin.json#agents`/`#skills` son alfabéticos**: insertar en posición — ningún gate valida el orden
67
+ - **Todo gate de escaneo nuevo lleva test anti-regresión viva** ("el repo real pasa con exit 0") en `npm test`: pre-commit el gate no se escanea a sí mismo (`git ls-files` ignora untracked) y su doc NO escribe el patrón prohibido literal (se auto-detectó y tumbó el publish v2.5.1)
68
+ - **Contrato del CLI (`bin/swl-ses.js`)**: todo subcomando exporta UNA función(opciones) sin efectos al require — test viviente `bin-contrato-comandos.test.js` (3 violaciones cazadas, una en campo)
67
69
  - **YAML inline en frontmatter**: `tools: [Read, Write]`, `skillsInvocables: [skill-a]`. NUNCA CSV string ni mezcla con lista multilínea
68
70
  - **Mensajes de commit**: imperativo en español, formato `<tipo>(<scope>): <descripción>`
69
71
  - **Sin `console.log` en producción** — excepto en `scripts/`, `bin/`, `hooks/`, `gateway/` (CLIs y daemons)
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # swl-ses v2.5.2
1
+ # swl-ses v2.5.3
2
2
 
3
3
  > El paquete anterior `@saulwadeleon/swl-software-engineering-system` está deprecado. Migrar a `@saulwade/swl-ses` (npmjs.org canónico) o `@saul-wade/swl-ses` (mirror en GitHub Packages) — el CLI `swl-ses` no cambia.
4
4
 
package/bin/swl-ses.js CHANGED
@@ -166,6 +166,7 @@ COMANDOS PRINCIPALES:
166
166
  uninstall Desinstala componentes del runtime
167
167
  prune Purga componentes retirados del paquete (dry-run; --confirmar ejecuta)
168
168
  valor Panel de evidencia de valor del harness (intercepciones, defectos, DORA/CI, uso; --json, --dias N)
169
+ install --solo-hooks Activa hooks (telemetría) a nivel proyecto apuntando al scope global — sin duplicar componentes en la UI
169
170
  field-report Reporte de agregados anónimos para compartir con el autor (opt-in, revisión manual)
170
171
  check-update Fuerza consulta inmediata de nueva versión en npm (sin throttle)
171
172
  install-git-hook [--force] Instala pre-commit hook que avisa de nuevas versiones.
@@ -10,7 +10,7 @@ description: >
10
10
  Cargar cuando el usuario reporte "se acabó la cuota", se prepare una
11
11
  sesión Opus larga (>2h), se planifique adopción de MCP servers, o se
12
12
  detecte context-rot recurrente.
13
- version: "1.0.4"
13
+ version: "1.0.5"
14
14
  evolved: false
15
15
  herramientasPermitidas: [Read]
16
16
  exclusiones:
@@ -264,7 +264,9 @@ Sin observar la métrica, no puedes optimizarla.
264
264
 
265
265
  ---
266
266
 
267
- ## Gotchas / Errores comunes no obvios
267
+ ## Gotchas / Errores comunes no obvios
268
+
269
+ - **El exit code de un pipeline es el del ÚLTIMO comando — verificar suites con `cmd | grep` enmascara fallos** [caso real 2026-07-09: `npm run test:all | grep ℹ | head` reportó "verde" durante horas sobre una suite que fallaba; el único runner sin máscara fue el `prepublishOnly` del usuario, que tumbó el publish]: en bash, `a | b` sale con el código de `b` (grep=0 si matcheó algo). Patrón correcto para verificar comandos largos: `cmd > /tmp/x.log 2>&1; echo "exit=$?"` y decidir por el exit explícito; el grep va DESPUÉS, sobre el log. Alternativa: `set -o pipefail` al inicio del script. Aplica a todo: suites, builds, linters, gates.
268
270
 
269
271
  - **Matriz de canales de hooks — stderr con exit 0 es un canal INVISIBLE** [origen: check-update 2026-07-08, el aviso de nuevas versiones se emitió al vacío desde su creación]: en Claude Code, el canal correcto depende del exit code. **exit 0 (éxito)**: solo el stdout llega — como contexto del turno en UserPromptSubmit/SessionStart (o `hookSpecificOutput.additionalContext`); el stderr no lo lee nadie. **exit 2 (bloqueo)**: solo el stderr llega al modelo con la razón del bloqueo; stdout con exit 2 = bloqueo ciego (regla ya conocida, L1 #4 de APRENDIZAJES). Anti-patrón resultante: "hook que funciona perfecto y nadie ve" — todo aviso al usuario desde un hook exitoso DEBE ir a stdout, idealmente con instrucción explícita ("INFORMA AL USUARIO...") para que el modelo lo retransmita. Verificación: correr el hook a mano con un flag de forzado y confirmar en qué canal aparece el mensaje.
270
272
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: release-semver
3
3
  description: Versionado semántico (SemVer). Cuándo bumpar major/minor/patch, changelogs convencionales, estrategia de tags y proceso de release completo.
4
- version: "1.0.3"
4
+ version: "1.0.4"
5
5
  herramientasPermitidas: [Read, Bash]
6
6
  exclusiones:
7
7
  - "No cargar para versionar el sistema SWL — el bump de versión de swl-ses sigue el checklist de 15 ubicaciones documentado en `/swl:release`; este skill cubre SemVer general para proyectos de usuario, no el proceso interno de release del sistema."
@@ -318,7 +318,9 @@ de token inválido.
318
318
  - `semantic-release` ya está configurado en CI — si el release está automatizado, el número de versión se calcula desde los commits sin intervención manual; cargar este skill duplicaría el trabajo.
319
319
  - El proyecto es una herramienta interna sin consumidores que dependan de compatibilidad de versión — SemVer completo compensa cuando hay consumidores que confían en los números de versión para evaluar breaking changes.
320
320
 
321
- ## Gotchas / Errores comunes no obvios
321
+ ## Gotchas / Errores comunes no obvios
322
+
323
+ - **El registry espejo NUNCA publica cuando el canónico falló sus gates** [caso real: v2.5.0 y v2.5.1 quedaron huérfanas en GitHub Packages, 2026-07-08/09]: un publisher dual que publica el mirror desde un directorio temporal preparado (donde `prepublishOnly`/gates NO corren) debe condicionar el paso 2 al éxito del paso 1 — si el canónico falló, el mirror se OMITE con aviso visible. Publicar tras el fallo sube un tarball sin validar y desalinea los registries: la misma versión no puede re-subirse, forzando un "republish de coordinación" (bump PATCH) que es puro costo. Verificar además que el flujo del mirror realmente corre gates en alguna parte — "los pre-publish ya pasaron en el intento 1" es una suposición, no una garantía.
322
324
 
323
325
  - **Tag ligero creado en lugar de anotado para el release**: `git tag v2.1.0` sin la flag `-a` crea un tag ligero que no incluye metadata de autor, fecha ni mensaje. Causa: olvidar la flag `-a` o la costumbre de usar tags ligeros para marcado temporal. Solución: siempre `git tag -a v2.1.0 -m "Release v2.1.0"` para releases — los tags anotados son los que `git describe` y las herramientas de changelog usan correctamente.
324
326
  - **MAJOR evitado por considerar el breaking change "pequeño"**: el equipo sube de `1.4.2` a `1.5.0` un endpoint que cambió su contrato de respuesta. Causa: subestimar el impacto del breaking change para evitar el salto de versión mayor. Solución: si un consumidor tiene que actualizar su código para seguir funcionando, es MAJOR sin importar el tamaño del cambio — el anti-patrón "Nunca saltarse MAJOR por miedo" es explícito en el skill.
package/llms.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  # swl-ses (@saulwade/swl-ses)
2
2
 
3
- > Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo), distribuido como paquete npm y plugin de Claude Code. 61 agentes, 181 habilidades, 47 comandos, 37 reglas base y 49 hooks. Soporta 11 lenguajes y 7 runtimes (Claude Code, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot). Versión 2.5.2.
3
+ > Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo), distribuido como paquete npm y plugin de Claude Code. 61 agentes, 181 habilidades, 47 comandos, 37 reglas base y 49 hooks. Soporta 11 lenguajes y 7 runtimes (Claude Code, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot). Versión 2.5.3.
4
4
 
5
5
  Archivo generado por `node scripts/generar-inventario.js` — no editar a mano. Las cifras se sincronizan con INVENTARIO.md en cada regeneración.
6
6
 
@@ -4458,7 +4458,7 @@
4458
4458
  "habilidades/go-testing/SKILL.md": "b8e31b72b7ef52df10cccae2aa99691ef3ddf7211c1af7909de5d168465e0300",
4459
4459
  "habilidades/graphql-experto/SKILL.md": "f8a70a0cd0a888aa43d4c3bdebc8142e8cb2b37df228f9ed3dbccdab9022f6aa",
4460
4460
  "habilidades/guardrail-semantico/SKILL.md": "000bc86759c68222a35c65d1fd4bba495e9f8aba9fd48dafd186ac2e378a98fe",
4461
- "habilidades/harness-claude-code/SKILL.md": "a4dd5cab18aae210a058cdeb067a15080248248787564d037db23436e37dd6e0",
4461
+ "habilidades/harness-claude-code/SKILL.md": "69c417be66e356f5fea1a91991efd8ef8dfb2d0b1cd92456750749aa8affa1fb",
4462
4462
  "habilidades/iam-secretos/SKILL.md": "6245a62b3c51e4e9b2caab710d06709e656a2ed84fb9a6de491b6c4767aad890",
4463
4463
  "habilidades/infra-github-actions/SKILL.md": "19a85aca305cbb90bc106f61d4de3f945f5b70ac890ae6f60301b6b4091e3462",
4464
4464
  "habilidades/instalar-sistema/SKILL.md": "91d1f71d7652dd7a8c497838354ad0134e462a013d1d78c2a3ac3b78e528fd4b",
@@ -4521,7 +4521,337 @@
4521
4521
  "habilidades/react-optimizacion/SKILL.md": "4d26faf586b2404db7e48b59548eb33cd41bb0163af966886a83b733afac1f8a",
4522
4522
  "habilidades/redis-experto/SKILL.md": "bd78eb53366e6f3da5c79017ac3942a1b2b0d38b56671aa506d054aef1d1a7e7",
4523
4523
  "habilidades/reducir-entropia/SKILL.md": "8152a0de3c5d5406e3ce5bdeb1530119a31f5788fabdd671e2d2f1e73475d2f8",
4524
- "habilidades/release-semver/SKILL.md": "94bc804b5e51352777d08afc60636cece5bbf76d6d2d5e3bed66acca15b604a0",
4524
+ "habilidades/release-semver/SKILL.md": "a3f291b75ce0ad9ed91a361ea81879f72e06ff0c1d35d2d5a4a1814f9aa3c32e",
4525
+ "habilidades/rust-experto/SKILL.md": "79a2591d50678b72fecdf07b713c3ddbfcecef28667ef28eec0daa9c78b8a18c",
4526
+ "habilidades/rust-patrones/SKILL.md": "c58a1b9467aa9d3056e066a997908ba876c65a0fdae8697f2d36f3569a3acc2a",
4527
+ "habilidades/rust-testing/SKILL.md": "fee2f695d0be176d1cfaff207933969e983782beb075d681baa4ee9b9a0b0031",
4528
+ "habilidades/seguridad-skills-ia/SKILL.md": "af5988b859e7336bb59da30c9380e34240e6cb829f463f6761854a7c427305df",
4529
+ "habilidades/sql-optimizacion/SKILL.md": "2fb04e9aa1154d5ff44eea5dbcd578561ce79649c96fd04f21e4bcb4b5dc8688",
4530
+ "habilidades/sre-patrones/SKILL.md": "96caebd46b0c1e38b6671c0dcd115e454425da180ead5765e5d88ca39b5e8f57",
4531
+ "habilidades/state-inconsistency-auditor-swl/SKILL.md": "7abcac8e33415db401b4ec6358a49d629524f2e2dcdffbe1fa8d8ce681153fba",
4532
+ "habilidades/stripe-pagos/SKILL.md": "0a2398ab2ea456a401315cc7bd10bc75efbe7ddc7d2578e0ade4b550ba7bbb99",
4533
+ "habilidades/structured-outputs/SKILL.md": "b60c51314b01ace68bd9091b10e5063ea119cb86c5da742d44918c61c2f06c01",
4534
+ "habilidades/swift-experto/SKILL.md": "e7eb701f8e97e249f34ab086a50f32acc7b73f1e3173f2f630f67d1f8ddca02e",
4535
+ "habilidades/swift-patrones/SKILL.md": "9317a34e80dfd3725be11b96d4daf3b7a5dc99a931edcd1b8a9bf93683e23ce7",
4536
+ "habilidades/swift-testing/SKILL.md": "97d0fe9334f8da9d84898eeab5d718a8ab061c5f1b84cb3fa9f29d4ff4c608e4",
4537
+ "habilidades/swl-claudemd/SKILL.md": "0cecf17c5394f61fb81ed72b0faa90490fcc03077b1d981476da85952c220e70",
4538
+ "habilidades/swl-dashboard/SKILL.md": "9ad0da0013e428c80664e80ebdfaabff49aa6d976834175f7c2f9c1dd5ee2800",
4539
+ "habilidades/swl-markitdown/SKILL.md": "6d8fd5e59e8ce3f94877cecdd34c83ffee0bcd90ad51bdad809fa77ce1d6a841",
4540
+ "habilidades/swl-revisar-impacto/SKILL.md": "bff7589944a4304046d0e812ba829b21871be080d39bdfe7cc76b112ce74fe53",
4541
+ "habilidades/tailwind-experto/SKILL.md": "42a2bb9f48ee73aff928053de1f7635dba5d3360da18df516c2d03ed4b30ed21",
4542
+ "habilidades/tdd-workflow/SKILL.md": "b67f3467a755a131809e7698f782e128d77e8f8d0f345da7e325041353e6b543",
4543
+ "habilidades/terraform-experto/SKILL.md": "be89eb4d2e14fdab3cb005c5dd46548171c9b783088e87e26f403908cec9a49c",
4544
+ "habilidades/testing-python/SKILL.md": "858eca33f9e1189ff94399b19e9835919ca190c51c1f1fa49531cf56fd2965a4",
4545
+ "habilidades/threat-model-lite/SKILL.md": "5809eda4d3ddf9f8b78689eb21f9f13dcdadd1eab2d801838f1fa02580690f55",
4546
+ "habilidades/tracing-processor/SKILL.md": "caa8f914453b4bc5edd75ebcac32a3633967237d9201eb9fb58223432caac3d5",
4547
+ "habilidades/typescript-avanzado/SKILL.md": "698088688f40116f1f82470933f5fbe1afe79ff1d45a4ac17d86619f95f481bd",
4548
+ "habilidades/typescript-diagnosticos/SKILL.md": "798a564878c60f567082cc87e45d0924494d1790892d613a1a825605f6e4a298",
4549
+ "habilidades/ux-diseno/SKILL.md": "e1bf67fa394905cdc89eb9ac21a47393f4cfe6cea57f0105e40ec5f0bba10b90",
4550
+ "habilidades/validacion-ci-sistema/SKILL.md": "9862d2e4bc00dc85156227592d60a0be1f1a2d1feab4d6ed28fa9510834bf66b",
4551
+ "habilidades/verificacion-evidencia/SKILL.md": "4f88c6872b95c250f8ec27fd57e05da1e6650acf3eeda9a411dc1493073a9da7",
4552
+ "habilidades/verificar-trabajo/SKILL.md": "22fe8740b1bde2aba898be558968feb1a51cbaf968b30255c8b84c9d2fe5bb4f",
4553
+ "habilidades/web-fetcher-routing/SKILL.md": "06d6e3b1a880732a9b0584e1e4c98488e81d0863d53ef3be3eaa147116e2c203",
4554
+ "habilidades/wiki-conocimiento/SKILL.md": "59870d616701f90265fe7d5695ec744390dcd0875ebd989309cf37e3a34aba87",
4555
+ "habilidades/wireframes-flujos/SKILL.md": "7655d0941b5a6ac0d922517b349ff71a4febdb09ca4c8f7c09c6183ddff23743",
4556
+ "habilidades/workflow-claude-code/SKILL.md": "179e4c4e6ee657bbc2632bded91ed11e96d7edeab402be1e72a5394764767c69",
4557
+ "reglas/accesibilidad.md": "21914b99f001d3bfc38a39f609bbafe4c58846d3617fea68a7156a29dc58d9f6",
4558
+ "reglas/analisis-previo-tareas-grandes.md": "d0d6b6675e6af79acfaabdada0560e50d43e9632970966dcea617fb53b69d75b",
4559
+ "reglas/analizar-directorios-antes-de-escribir.md": "588ca1a538b075163512b243d016f191e1050db9f7cc78c0590e92f8bf91a0cb",
4560
+ "reglas/api-diseno.md": "7d703f898a113c273e7404b95441afb66c87784d5973bc6149675a63226bc71f",
4561
+ "reglas/arquitectura.md": "ad3fa4c4e9ec9dae8c6065fb041993bde56377022ec015e7ccbaea3b9a352bd6",
4562
+ "reglas/arreglar-al-detectar.md": "5332d76fba3efc3979dda90a8efa8bb715833aa424e5954cb9687fd63c2085ae",
4563
+ "reglas/auditorias-documentales-estructurales.md": "1cf2c6f30a34fd15c5197d121f77339fa787ce5da4d34a9c5ae14b333bcae7ae",
4564
+ "reglas/brevedad-output.md": "094b981711cef8b6111db47d0a79260f48f773f6582927a235d74fabb062489f",
4565
+ "reglas/cloud-infra.md": "eb46c31abfa0f000408d7552b1bf1d67acc8f98daaac7f5286fee8b5935ac71b",
4566
+ "reglas/consultar-vault-primero.md": "19c751d1ff2752000d5bde8ce503f5afc14c34c8e997df9c8d9dd02b7ab41ae1",
4567
+ "reglas/debatir-antes-de-aceptar.md": "f5d8b498238fb87dbc985b82889af4bee88f81709d5034446056c9885bac9c32",
4568
+ "reglas/docs.md": "29ea33a5b097f5a0f5c7b779af02ef0d0d71c9c3960918798ea8121f1fb65f51",
4569
+ "reglas/estilo-codigo.md": "655741422b6f74caf4b54c6a0be28f7b9445d4011ea32fe9a65c58781fd305b1",
4570
+ "reglas/fragmentos-compartidos.md": "4002f0e16378b071aefafa1717179e52874244ee973085c71d1b6d1302f5102a",
4571
+ "reglas/git-coauthor.md": "1f1733d13866771d86bc15f55f5009330b3e274fa31f9a241b226c3888f6fd57",
4572
+ "reglas/git-workflow.md": "9d7c4312ac3d8ab4f8f5a667ec8f067496f531375c285f50cc4c4e760e580432",
4573
+ "reglas/gobernanza.md": "5280106f8d475358bf92c08ef74ba483440e63a4d5b8deb8f60f4116126adae0",
4574
+ "reglas/hooks.md": "66d010b169e7617aa50b28c29f9d8e0ad22379c08b79ba357978bd7c32eeece6",
4575
+ "reglas/intent-engineering.md": "2f6795ec03ced68725ac0ee830d96d9259c418dafd80d1782ddc6db42634388d",
4576
+ "reglas/markitdown.md": "0cfb395b9a4ed704767b5b4eab90f5f2bffba14ec80be189918f32d781abd330",
4577
+ "reglas/memoria-consolidada.md": "dddb566f829e192fe28edcbb53da5b9720c7a1c70b62615571ff8950381ad708",
4578
+ "reglas/monitor-ci.md": "a22628c6072002204df6dbb5faa69aa217ae835fe2d06062a4ee50f224085c81",
4579
+ "reglas/patrones.md": "d70e9fd42674c03b1dd9d21f5d69188332ba6a7a5b80134580110c812e8cf710",
4580
+ "reglas/performance.md": "0d2506b516984728c346b65fbc319d30e4a8157d7ea6fa34cdf5403cc0e7b6c3",
4581
+ "reglas/pruebas.md": "75f97384f7306a7afb043167701a4163068a7c0e0d7cb6bf4fe60ff5cf6a8247",
4582
+ "reglas/registro-componentes-nuevos.md": "42b1d16a1bf57ce52b7a2715fc3acff78e683ab3851ba7a71e30d0b9cff36903",
4583
+ "reglas/seguridad-agentes.md": "606162508959b2f673e2382cd53fd0b1039b7551e0d2ee60d573426b6578c73f",
4584
+ "reglas/seguridad.md": "403a398328121936cb7c34deaded7300c8741ee0e3dd54e8b4a38d9c4d936b40",
4585
+ "reglas/sesiones-paralelas.md": "ecb98b47870d53ff6b79421e5db4a7c2ed189a8d63e9e3c671888d3ec220b7de",
4586
+ "reglas/sin-duplicacion-reglas-globales.md": "7bd1695a81cd5f1bd673a617cd05e7612070e8817e226a71ab80102454de0b79",
4587
+ "reglas/skills-estandar.md": "aa0f096fc34dde87a7f15bed79837e57d7102da2fc1022e8e39026b028f907d8",
4588
+ "reglas/testing.md": "e0e85a952dbf5598b49ccc540cc41d332b29355aedd3d20f0252febe1e2e4faa",
4589
+ "reglas/tests-cleanup.md": "07c0d2344c7937b480deeeeca83f9b2e31de904a17d41fcfffbce555b933c690",
4590
+ "reglas/usar-code-review-graph.md": "a8e39c9e0dd2485079e7685a8094865711ee423ba05517b88960c8f908541d17",
4591
+ "reglas/usar-context7.md": "cb8ed33b421d06e6e4e6d4de44acd6fe810f84369ef66f91111cf88ffd0457a3",
4592
+ "reglas/usar-sistema-swl.md": "c33a267ee995a958fc2a590686acf297bcd75ed3bd5eb0533ec4da55e2893051",
4593
+ "reglas/verificar-citas-normativas.md": "51ca9c6c2d3bb653c2da792aea61054442fcb8bef25eb29cd7e491adb2ceb8e3"
4594
+ },
4595
+ "2.5.3": {
4596
+ "agentes/_intent-spec.md": "58df2403a0ebc66d487423732080e615698325f300b98fd9f7734fb4ae55a6a2",
4597
+ "agentes/_propose-step.md": "298c946f947b557088cedb3fd2631fda756a91510a39e0a3c95a9610e6d3eeba",
4598
+ "agentes/abogado-diablo-swl.md": "9a22a7b545f6b1e95df949568373a58bd31878ec6a16c2a1bc5ef38f74e09238",
4599
+ "agentes/accesibilidad-wcag-swl.md": "24006fae669fb20fe10af9940fad32f787eadf0ac29ae098d9c987c9e51021ad",
4600
+ "agentes/arquitecto-swl.md": "48993081af28f19a390f2729d4f3824abe6a7ac8b6c4c73e6547b149b249dac0",
4601
+ "agentes/auto-evolucion-swl.md": "7d8a5c0b146f09514247679eb376adebb3f4d11ceab28b792160ce0eac2ffbc5",
4602
+ "agentes/backend-api-swl.md": "97939a5dcef33b178946ca4b35f9676280ccb6c1bd297bf9d443a38315180392",
4603
+ "agentes/backend-csharp-swl.md": "3237e94e41884d70b0b010a818dc7e3e38d59b766106601e29dd8f43f1838411",
4604
+ "agentes/backend-go-swl.md": "17d689bd29eff9192eed64cf54f0d1799c473b8ecec24c086a529bf1da93c6b3",
4605
+ "agentes/backend-java-swl.md": "17aa34a8cb86cb47b7cad84c44c57e1228473188baf522b67baa717ea93f1590",
4606
+ "agentes/backend-node-swl.md": "634d1d57564ef44991cfbbb4a6428956e0a23b3f1d945a50a235b68b7eaa1ba5",
4607
+ "agentes/backend-python-swl.md": "b6eaf68a738b0e5ae6d6613954b3181d46fad942ba4bdc8d309fd5c792d015d0",
4608
+ "agentes/backend-rust-swl.md": "fdb2bb491a00a60e6ab20671be4a4e7e837f452d47e2952493435d6e32752426",
4609
+ "agentes/backend-workers-swl.md": "e35e478e38d6c1a51f633eef6c7c2ca467243c7366347ec4e45022fea031485c",
4610
+ "agentes/cloud-infra-swl.md": "7cef2e280776379fc589c0e3e33627c07a2e1a5c19ea4036ccf7bf350966193d",
4611
+ "agentes/consolidador-swl.md": "7d6ced625a3d899350de33dd5727cd3c89c3a63da8901d78495b8ccec8464e92",
4612
+ "agentes/datos-swl.md": "6a81b554260edf409d1ae855d9bf4a9a00e3a9f2f111b3433e556345e5529b96",
4613
+ "agentes/depurador-swl.md": "27eeae99f4b3f26860c18949e7fb7ea7537995845f6bec8dbfe54897407cbc0f",
4614
+ "agentes/devops-ci-swl.md": "84d3c84010b9b47ca332e0e6f0d5da17375a25fef8ddbc85638e0e6ab56d756d",
4615
+ "agentes/disenador-ui-swl.md": "031d87e99b87e576454d40f48ee32677bc17aee68e155db866ef8a6d56918557",
4616
+ "agentes/documentador-swl.md": "80abaadcbb752e868776e6548904732e9212398be7a45df83b0636bd16531bd3",
4617
+ "agentes/frontend-angular-swl.md": "4a5ce572812ef5f67547413be9edfb3667a0791ebcdfbb807ed708e5bba02748",
4618
+ "agentes/frontend-css-swl.md": "4a8ab0555d5fa6c95abea8e734f93d964010c28d63377de89c7e282754fe2222",
4619
+ "agentes/frontend-react-swl.md": "b15d0d13e09e21aa1f17ea57f182aa1fcd88aa9a6fc4c5b0d7938570d66de2fd",
4620
+ "agentes/frontend-swl.md": "d05c83c133512338e6bdd2523d974fbbfa48d62358d0523e76981c22c4c9ea8a",
4621
+ "agentes/frontend-tailwind-swl.md": "2ebe3f459d93e4465dbdd31f56f4e5d7c22f828fba4cf118c5db2711e25e0371",
4622
+ "agentes/gh-fix-ci-swl.md": "ac670180c562a98aaeaec87e48034652c8d52af6ed8eca7813f3c8a39e4977a0",
4623
+ "agentes/implementador-swl.md": "9d1f1d71ec843bbbd31623cfdf0104b2fe05fd78269f33692a008b6ce4ebf584",
4624
+ "agentes/investigador-swl.md": "20f28f81926f59f3dd2f0805e5459259ebd6249568a0f2c6616687186266a90a",
4625
+ "agentes/investigador-ux-swl.md": "73b1c3324f1213d5d6e88c584b54c5a7c310838b55ed137a0a80d279210545c5",
4626
+ "agentes/llm-apps-swl.md": "86ea63545d97375447b012ee26369422d2115af3b20585c9749543dfe1811264",
4627
+ "agentes/migrador-swl.md": "bd40365cc17a4096c3c8139c29cb11298f4ee24a54b415dd24294ce45b39024d",
4628
+ "agentes/mobile-android-swl.md": "8c177f66b7a78c81f26b49c54aba65a7f9803e4902158ef2f7827f6ccd03f06f",
4629
+ "agentes/mobile-cross-swl.md": "77ecc39fdb88f17a44e2e703fa7f0ba5887e1dd840b3590a11bdc019ece4fc58",
4630
+ "agentes/mobile-ios-swl.md": "e8234ee3647ff774ba278587c3e0bb85823b6d604f03799ea415826e4a13a8e5",
4631
+ "agentes/mobile-testing-swl.md": "86d8d5f407d5d2d439f0154087dac6c383e74d4af0a3aa8c4487ad902ca67f0f",
4632
+ "agentes/nemesis-auditor-swl.md": "ef0eddf5936a6b0f4169b694c0f759e6d4d1ef4824e10739cd09330eece3731c",
4633
+ "agentes/notificador-swl.md": "78e68755e266977c93f8e4c9b119c62a2824c9928d64695d7de720144101547f",
4634
+ "agentes/observabilidad-swl.md": "860cc205da0dcb2eeb481d493e5b6d635d085c4c70e9d3e3e8a9a1a1c2049fc2",
4635
+ "agentes/orquestador-swl.md": "d3167c6eb3de4e84e387f46047d4ba6e4eece32f29a4dc88614a27f80f09f3b0",
4636
+ "agentes/pagos-swl.md": "2a20b5526897d09e003e2d64f024a5b4ba31e0d42504ba2356705af376d95c10",
4637
+ "agentes/perfilador-usuario-swl.md": "9db8999e9a15c95c818cd5cbbc955153ce2e12cea2d5065ed31e118e4a31709e",
4638
+ "agentes/planificador-swl.md": "3c20b17b8de75581c15eb5639a9aa2b7cf5ec485a87a517138c01825432a57a0",
4639
+ "agentes/producto-prd-swl.md": "04610ec4ebd7709afb6a618003a9e81f051c723a6bceacd012fc786ed0a98616",
4640
+ "agentes/red-team-swl.md": "84bd31dd7796c6f376b3418a795677f23fa63a2968df57c9059d1a68dc9e015d",
4641
+ "agentes/release-manager-swl.md": "7e8ca0f3191f825638d1bcd75dd0b7996feb194fac22233414b65afa772bae38",
4642
+ "agentes/rendimiento-swl.md": "24069e09a91f635a39455edc3c65cc20ef8818e6f7c2edfc3f6c8439c620c0bd",
4643
+ "agentes/resolutor-build-swl.md": "502333f6fccc9a0f614ebc3d18e687a0fa10674a1e1c45f31be05af62c8e501f",
4644
+ "agentes/revisor-angular-swl.md": "b013fcf9af9f53072aabaecd9c1d9f8947a9330a1981e0962c6963a2bce5bea0",
4645
+ "agentes/revisor-codigo-swl.md": "73a615c62c9dcb14002bc9f4a51b80742c9fad29dd65714dbf1dfc7b2e13905a",
4646
+ "agentes/revisor-csharp-swl.md": "11802e8bde11f499412e71f31f0b42f4fa66b587d62247297e99e2f4050268d9",
4647
+ "agentes/revisor-go-swl.md": "1038cad186ea7db2d47eb86be4c41d72216ef41202fd11260f3d24a2c77490d6",
4648
+ "agentes/revisor-java-swl.md": "1dc3bc9d311cee4d15c16307765a7db26ee0c4c36086be3d16a4e0ba31c3f61d",
4649
+ "agentes/revisor-kotlin-swl.md": "050ac7f903fb02b087e5cec730d637404a44384b21f1632e147c2f5f5b1c9933",
4650
+ "agentes/revisor-nextjs-swl.md": "d04b77677e8d27749aed527f3f86228e8add00e4f05bda3289fe006188d90c5b",
4651
+ "agentes/revisor-php-swl.md": "f15a13fd11e64ddfab59af4886c947c410624f8c083bde7cc3f1bde0208e3769",
4652
+ "agentes/revisor-react-swl.md": "c39ac757c529fc84633edd47bdaceba2dcbcb2a9f9c2bc65b8dfcc8cd8eb441b",
4653
+ "agentes/revisor-rust-swl.md": "f84c36d280a3b57d141538ef7e9fd47013695c6563add05d30e852e41df6ad7f",
4654
+ "agentes/revisor-seguridad-swl.md": "7418ee59f51d9b13eecc5035365b4a36589ebdcb4e79b736138c9f7c62c50b1a",
4655
+ "agentes/revisor-swift-swl.md": "fd5275103beadf5694826738ff1e33a80aaca94c197921aabf1cddc4e0fd8b24",
4656
+ "agentes/revisor-typescript-swl.md": "ce1a1d1780248cfba579cee0177fcb38d679e9a65152efad60723ac08053f252",
4657
+ "agentes/sre-swl.md": "9d2c4af8966cad8acbaad95aecae2284096df3faa126f11e9716e83a8f08fc7c",
4658
+ "agentes/tdd-qa-swl.md": "965a53422d4895c4686d7c1811f1c528e0191e0cafabdfc8c85e3d5c604eea37",
4659
+ "comandos/swl/actualizar.md": "f117df8229b10ecdf28a136e911df0379625f6600d86a56e2ab671c704204105",
4660
+ "comandos/swl/adoptar-proyecto.md": "1791d295edd993a01a17c107b8565e3d4126785993caa56c2ef6b6db9834e0b0",
4661
+ "comandos/swl/aprender.md": "4423090d813aa16a3de3ae86af57b17c24fce9b4250e158609003217bfed533d",
4662
+ "comandos/swl/aprobar-plan.md": "72b7c4e5ba033ad2ed18db589eca9e24cebc40bb2f26676fb2f02e4e9a4a194e",
4663
+ "comandos/swl/auditar-deps.md": "6fbe283ce326f90f09fa812c7e4f56b4debcb46ad1aebb4cf0856eed8ffff46c",
4664
+ "comandos/swl/autoresearch.md": "8964576a5bf2f2ad3119a692192c46e6f84338b758f80f8b5e9415df73f3a3f8",
4665
+ "comandos/swl/ayuda.md": "320dcfbb40522468b7e3358937d7e33287ffd56254a1815b12151af8266d742a",
4666
+ "comandos/swl/brainstorm.md": "81379eddb6194314ca9192842ea3012dbd8ed5d13dec5453541da6a0ddd3fa67",
4667
+ "comandos/swl/briefing.md": "a5d330736de160c9cf7da208921066c8a170ede310c4748000af331d5c4d9ecc",
4668
+ "comandos/swl/checkpoint.md": "91af22712265c8945c224718d0287ac21efad8aced174cea1a0a6c4cc7c70c91",
4669
+ "comandos/swl/claudemd.md": "5bae75e77485989f9d9ff09f597fe0010db912e8c34187be6e459b0bbc09c9f1",
4670
+ "comandos/swl/compactar.md": "06baecf464627a45481813bb204dadd560fa45a8a09a2bc47480e6dc0f8cd9f7",
4671
+ "comandos/swl/configurar-ci.md": "ba7b25d80146b38bb4b81885673438fbc2aa72531781046a04781bb9c99d1732",
4672
+ "comandos/swl/contexto.md": "0e664d1d84f995eed4e02925e88c4b137f8f2892193d3be050a5a581443ade76",
4673
+ "comandos/swl/contribuir.md": "37fd17e3dc8cd8b51a0997df66c527eeb41f92abcd63ef032a5da8df4f70ed0f",
4674
+ "comandos/swl/crear-skill.md": "6689efac053de2c80f05182f34c8ddb7ec4f81dba9f3479166cf7bf9f003d71b",
4675
+ "comandos/swl/cron.md": "414d88ea3af453b90386421e1f569cd720b3414afd049afe96fff085d9870667",
4676
+ "comandos/swl/deuda-codigo.md": "b65cad0f234dcb348f3f403828e79ace57ee1a39084e3d79e4dadc6c41e1ba1d",
4677
+ "comandos/swl/discutir-fase.md": "5f691cf22cede099fb98edaa27ae6628c25777102ad21427cb601846a38cdc50",
4678
+ "comandos/swl/ejecutar-fase.md": "eea239bc28a7c8566c3337496e7cef04997585f6061cdc152a1fe7a7f4850f29",
4679
+ "comandos/swl/evaluar-skill.md": "544a3b79d4e219bed22cdd266ebdbb91906f6ff71f5987f7ef5723cf39f7d5af",
4680
+ "comandos/swl/evolucionar.md": "62c0b06930d3b9d8cb876f6bc84a0a919d2193c69e6c2df7b89860c54b08b845",
4681
+ "comandos/swl/exportar-vault.md": "23156a79b69e2d85e0e5039dac3f1692780c3ac91ba6c1f715302b8e6eaed26c",
4682
+ "comandos/swl/fix.md": "061929a8131024ea213e633c93b26c761392f5ecca9bf7772d46d6f148c2c55f",
4683
+ "comandos/swl/gateway.md": "a995dfb3f3423ed01f541c26770ec4c4a9baab659e8f4e4b5bfea0b29adbdecc",
4684
+ "comandos/swl/inbox.md": "d688b03288a55a30666a8481a9a6f9563840f7a06c7c365c50f72c064d058370",
4685
+ "comandos/swl/instalar.md": "530925d89ada0503f39fb8af8fc2370e048003c830db3885033d1a8550112474",
4686
+ "comandos/swl/instintos.md": "34557efe6c7afcb843714c87b0b6f1c107285f0e081c7b158f4907746b78719a",
4687
+ "comandos/swl/mapear-codebase.md": "bc831928549709c2aefb7cd3bea04266f813bedffb961b893ee4012e4231fac0",
4688
+ "comandos/swl/mcp-status.md": "42d8e4169d1d8b49ba11c84fabe0615b213c9e6f3655a5a84cf726558098bc6f",
4689
+ "comandos/swl/modelo.md": "471b47f907836d8069570b94a9cf39c8dd91fcf85d6107329db353e63a3438ff",
4690
+ "comandos/swl/nemesis.md": "37ce36153d46cd666412c35ed65f296676f2db4375c4060edd4a04b2e1d95cf7",
4691
+ "comandos/swl/notificaciones.md": "34da7d2c298160a85a3c5d64ea9ac6c4e060ec1be3ca1a4e3f8124c31cfb0d1f",
4692
+ "comandos/swl/nuevo-proyecto.md": "adece543737d10ac6ad99d8cb2d1d89a7eca43126a650ec513ef672cfcf52d50",
4693
+ "comandos/swl/planear-fase.md": "fb6a224a6a7d005ca0d0846cfc86e2c33560ab0a76a244c089b41f68dfe27da2",
4694
+ "comandos/swl/plugins.md": "03f5703ab400612bd36f6f65ba7bf0a4ecb9795435580ba5de2020c860a9200b",
4695
+ "comandos/swl/predecir.md": "ca4b95967825d12f9e86b250704c187d161b227bf12b9701bfe2b90744996e95",
4696
+ "comandos/swl/reflect-skills.md": "b15e5ae63267d67eeef260092fb0f4b8dab210544bdf60053b0f86923b961ddb",
4697
+ "comandos/swl/release.md": "fe33d65910719e5f9ff24fe3ddb677a2744fea15db9f30baebc5e95d63ca558b",
4698
+ "comandos/swl/revisar-impacto.md": "662ee411af7b63671eff5a910de4a24ea7971c87241d8648cd6fb6c2403668e0",
4699
+ "comandos/swl/revisar.md": "7b17679c0cadd2fca7a015c302459f7ca127dcae02a74c990cddcddcb4c15f85",
4700
+ "comandos/swl/seguridad.md": "b249a1dea25b2cb7ce43bb2199b07bde57387db13c0bcb2b646a617c007d611f",
4701
+ "comandos/swl/sesiones.md": "6674e6f488f0f308d53d099c8c5347d2fdf7729edb4d6ac855488e0cd93a3c0e",
4702
+ "comandos/swl/skill-search.md": "e0dc8622080ec56da2b98c1ca9f44771daf2d8870fc620edc7ea64a28b7594a5",
4703
+ "comandos/swl/status.md": "9aa6eb0e9bbf5e12d5cf5df5c6aed3b6faecc75196cd5a46d55aac457a28465e",
4704
+ "comandos/swl/verificar.md": "748b57c9a3b9f53eaa6cc2f1cc2692af646caf0d2e0403077b246800613b78c9",
4705
+ "comandos/swl/wiki.md": "68ae8163fa8493ff5d01b8ab281f18ae0939981cc2a88ec3b759f83efc6dfac4",
4706
+ "habilidades/accesibilidad-a11y/SKILL.md": "500372c367122b4d06e04254326a19b196e29d1d7d760b7a4873f136ee19a4ab",
4707
+ "habilidades/agent-browser/SKILL.md": "77cc3d490439ad9a3df02d6b44c45af4436c24768e8f4554ed09b57af1bb0d57",
4708
+ "habilidades/agent-deep-links/SKILL.md": "4fb8150dc13c0d07381701d110c259a452d6b04f981b08e0478e24c38ea9dcab",
4709
+ "habilidades/agentes-como-servicio/SKILL.md": "91e14245d031bfec52b657931fa370fb161f4ae7a7743bc73325f8a420861be6",
4710
+ "habilidades/ai-runtime-security/SKILL.md": "820e59760f7ef29761ffd9d75677e638a5df16fba8ee9fa16813f8e4a6a0828c",
4711
+ "habilidades/angular-avanzado/SKILL.md": "9002c549e1c5aa00726d35a332a1760192927856871e1f7b18c949075da0fc3b",
4712
+ "habilidades/angular-moderno/SKILL.md": "b769f81111ecf114e37e19e7a848aa9ba3e77f5b91bfa8399c7f14c1ddbed11c",
4713
+ "habilidades/api-rest-diseno/SKILL.md": "22898f30ca8e2aa696f9a75f58829eb4d8e7f5e4eb303ee8a981cc93406d9d02",
4714
+ "habilidades/aprender-de-git-diff/SKILL.md": "5be6d2288a3522833935e48d160f27c40e2695d0930869f25bca73a121ba2eb0",
4715
+ "habilidades/aprendizaje-continuo/SKILL.md": "8ea665d256ef1aae364b895c60e7dc193d10ea2d123833b464d54ac01c8658e6",
4716
+ "habilidades/async-python/SKILL.md": "7ebecd6741bc522214bc0ad2e1c29277d174d9e12b4436e66a2e34a88a2bf843",
4717
+ "habilidades/auth-patrones/SKILL.md": "796ddc3ab468b10d1ba8b767fc24b167368c975475d62fc3b5d2523fe28292ea",
4718
+ "habilidades/auto-evolucion-protocolo/SKILL.md": "d31d508d7bec1ed266e03f5cef60e1f11b661e45f7b4f43f77b06333e211ed1b",
4719
+ "habilidades/autoresearch/SKILL.md": "8ae3bc7530d405fc56556a761f4d3591855e79ed69078551e1ea884741fba244",
4720
+ "habilidades/azure-cloud/SKILL.md": "8ae0d4822703c197d25785d23ab37e844788d437b202d08503b00b296da84f76",
4721
+ "habilidades/backend-async-postgres-testing/SKILL.md": "6f400277bb86ccede57f647303a8e46963d591040686e1f59eb34eed5e1f801d",
4722
+ "habilidades/backend-error-design/SKILL.md": "3be8263e2f2a5682ff2243088bbdc9ae7e5e7df59495d39d6fed4ba246e641dc",
4723
+ "habilidades/backend-mcp-servidor/SKILL.md": "1db631547e77b61894d5329931369fc8271c03a1383e444117be8d9763481f83",
4724
+ "habilidades/backend-production-resilience/SKILL.md": "c2a4c429a370421833701e7e8d74d9413d21bf014ae45985c8c6d7259fc1a5ff",
4725
+ "habilidades/benchmark-memoria/SKILL.md": "d2974eef1b2f96af911d342b212b3b4affeb24a1fcbf97db9943d156de282f8c",
4726
+ "habilidades/brainstorming/SKILL.md": "dd2044784fa2cf1726d1a46b309717111249386c717545bbce5e78ddd7484cb1",
4727
+ "habilidades/browser-interaction-patterns/SKILL.md": "3a5ed2f97ad531fdd01d3ffe011e9bdf307e72b614d7372219d789d978164a8e",
4728
+ "habilidades/browser-research-domains/SKILL.md": "a5d16612a06cf24b13802543f789dae4a4a1c161af820edcb939f09278b7b81b",
4729
+ "habilidades/build-errors-cpp/SKILL.md": "048d45d249a15fbc35aa31222bdc9618e5aec2719bf856a59ac84e7fa273cd6f",
4730
+ "habilidades/build-errors-csharp/SKILL.md": "0ca5f92455a11a3c1185fea09b7a0cdd0d8270fe37ac7832688fe2757ea98ff0",
4731
+ "habilidades/build-errors-go/SKILL.md": "5564a566719d5f32fdb8e452624fdddeab118f9afde4b471ff8615e2a6d6ba5e",
4732
+ "habilidades/build-errors-java/SKILL.md": "40191e6120fe98d55dfdbac67350dd112810baba6ffcfc2902ae687e350fbe53",
4733
+ "habilidades/build-errors-kotlin/SKILL.md": "60e3033c492597b62e5359930f95a706a0c679f9a8ca52467eaebe011c826da1",
4734
+ "habilidades/build-errors-nextjs/SKILL.md": "1893d7452af514a8676279cc082fdef3790d136b2334429a7e3f1f668ea87343",
4735
+ "habilidades/build-errors-php/SKILL.md": "398391c87885aa52654e27066b5bdb2bd3c8e3e68eecd939df02b3367df9c21f",
4736
+ "habilidades/build-errors-python/SKILL.md": "73f65c7456c21216fde3c2df3c31a1cb5ec1999e79d9c917afd1bc11eb1bcecb",
4737
+ "habilidades/build-errors-rust/SKILL.md": "6192378e69787658fada7f3e191fe54b1401e234a50f943701c6b088bf509a51",
4738
+ "habilidades/build-errors-swift/SKILL.md": "fabc54050e42abbfdf3402b887b628c47dd0acc37062a8ceaf4494720f7797c7",
4739
+ "habilidades/build-errors-typescript/SKILL.md": "d0372ad6d5e6cfaa5ef487622b947a7ed4797b4cb94cc309be79c9857694b370",
4740
+ "habilidades/calidad-anti-patrones-universales/SKILL.md": "5047fc360759b8d894b3e5c20a344cae46562c8131267c5a59f9d8f8839ef178",
4741
+ "habilidades/calidad-contract-testing/SKILL.md": "dc91fc323fa1f721a5957ad72f5403987c8e49ee0dc059e987bb131e4492f292",
4742
+ "habilidades/calidad-mutation-testing/SKILL.md": "aa8e10f5b4bc8ed9c2faefb55d5db881f5009537e11c6b12eedd4e07dc25eabc",
4743
+ "habilidades/changelog-generator/SKILL.md": "192e17bd2fb16d1769a2497bcd2ef150dfd34a7872474cf340ce43d1a55a6a7d",
4744
+ "habilidades/checklist-calidad/SKILL.md": "4bd1ebfeaf36032cd8078900f60de8a77f55a3a5bbbacec132eab52aadb88fb7",
4745
+ "habilidades/checklist-seguridad/SKILL.md": "839b133a97677b0e9675776a99b6a6351133b65fd99ad6d851dbd84073996348",
4746
+ "habilidades/checkpoints-verificacion/SKILL.md": "58fd866b5bec6bb8c06c1a179a4c4cc90f3c55b5b578296f3af15254f44da02b",
4747
+ "habilidades/ci-cd-pipelines/SKILL.md": "a5a3ccaa688401b1730e972d77f435581315590299d23856ad5434780873cc80",
4748
+ "habilidades/cloud-aws/SKILL.md": "ec428fbc973830351543f7cbfa30bad6785c1f0f30bf3f194effcac5985beadc",
4749
+ "habilidades/compactacion-contexto/SKILL.md": "76a2fe8be6a5a58ae18e982bb1c1e6dfb7ed0b42e9c2733da1e7467d424e70e9",
4750
+ "habilidades/contenedores-docker/SKILL.md": "1c9542639dfd8bc2590bc8476ee029f44d707e769ea4d86b0f6f836e428cb070",
4751
+ "habilidades/context-builder/SKILL.md": "4a90f85c5f6e664171552d39dce55b9bd1ccd92eaf52913f41d71899dc096b32",
4752
+ "habilidades/control-profundidad/SKILL.md": "5fa212558af44aa4831f0faba3e2c87c77cd5b4bac3d3e194360c8fac40ac4bd",
4753
+ "habilidades/csharp-experto/SKILL.md": "8e8dcdbe80dfdecdcf125e4f466b1e09a8414e471367dc0e108c4c02198acd80",
4754
+ "habilidades/csharp-patrones/SKILL.md": "6886137e008f73cdd5740daead367058a0bdd1b9dacdda8b1b8d0386216dd3cf",
4755
+ "habilidades/csharp-testing/SKILL.md": "af5ddd9b89d3c35151fc4e45add2900fca10f3ab27b6ca29bd0a0e70c74d0df4",
4756
+ "habilidades/css-moderno/SKILL.md": "9ec83d8a94a9347aadd0437af5454e88f1684d5b0f7e2b1089433571ccb5ba84",
4757
+ "habilidades/datos-etl/SKILL.md": "a4f2b3228ab8a93d82aa9aee2a3662ed51ea858b0fb05d3e9345c12f5965a8cf",
4758
+ "habilidades/dbml-experto/SKILL.md": "bf43ba9e88b6f91db799fb7d1a30bfe0e973456804d8f851203c1d5e67d58505",
4759
+ "habilidades/dependencias-auditoria/SKILL.md": "6f6907bfa8facfd5ca9fa44f0eee05484fc7e0cb66ae09b8ac209013de0c95f2",
4760
+ "habilidades/deprecacion-migracion/SKILL.md": "e10a61c5b3ce9703b7fd3d06dbac0b35f89b3f8b91055d8420eefafa3541ff9c",
4761
+ "habilidades/design-tokens/SKILL.md": "b3bab149fe65f9e4a3a720775e1a7fc0032740487434f9012f2960fd8acff158",
4762
+ "habilidades/devsecops-pipeline-security/SKILL.md": "97ab5382c4a803af0b4c0aaf664911695bc1e6c85f910821325acc3f51bc53bb",
4763
+ "habilidades/diagrama-arquitectura/SKILL.md": "1771d492438f0fa0d6b3c81cad6e8dc88410698ac7014cf809172906b62ed906",
4764
+ "habilidades/discutir-fase/SKILL.md": "bf00fabdc8c1559e0e03dc0ae68054ae5433b82d213717d87d518431b5a64e67",
4765
+ "habilidades/diseno-herramientas-agente/SKILL.md": "416bcf1e4955ac9ba65ff6c122e142c123b7db340aa58dde3ae203cb819ad641",
4766
+ "habilidades/diseno-responsivo/SKILL.md": "6aa294c3b201a6bb256acb111e0230ff414c270bcd16d12540a0230855e4f235",
4767
+ "habilidades/django-experto/SKILL.md": "8dea1bac9c2cf000d95127740c790958aba5e10fd8bbed99a9dcdd9ce2f93e04",
4768
+ "habilidades/doc-sync/SKILL.md": "12a1a665f00b8ba0d4762930d78336a37ca006c68ff1e737ba2116d46efce4d8",
4769
+ "habilidades/doubt-driven-review/SKILL.md": "658499f654e257bd4632380d249c72ce2d3765d3f2c5d9e7999d1d2054f79ee9",
4770
+ "habilidades/drift-detection/SKILL.md": "d4ebac36efbd93bcf4487542151812242730da85cf2724a80b1522589813b9a1",
4771
+ "habilidades/ejecutar-fase/SKILL.md": "d4b03003484f7d4986e5418f40f58da72be849026e8f7603c81eb24d77515646",
4772
+ "habilidades/ejecutar-task-iterativo/SKILL.md": "af59419363aaec817a7f32470802c73df0c206d1506f22e6f94f5d6096b4056b",
4773
+ "habilidades/estilo-sin-ai-isms/SKILL.md": "a581d82dedba9bbb73927b5f69006421a28c75958d5e6cf7f3fb069b5c95613d",
4774
+ "habilidades/estructura-proyecto-claude/SKILL.md": "cc5081068b343d95fb0c932a1ade7ea051328f76535046dd8c2dd7d89367bc74",
4775
+ "habilidades/eval-framework/SKILL.md": "18edc007967aea17a9dcb051dc9c75dd999d96d0c0255d91947c254255bcd2e1",
4776
+ "habilidades/evaluacion-agentes/SKILL.md": "17c08cfae68e423507851a1baabd54edcd6f58e6e2a93ea5250cf81943174035",
4777
+ "habilidades/event-driven/SKILL.md": "fa7627b0178403702200b9e6501c401ccd537481c1e88742bdb7054052f28c42",
4778
+ "habilidades/extraccion-documentos/SKILL.md": "3af2c23b4d1019d5c3cf0f7c98fad7f253d863ad04dade2c23da816c49d74bc9",
4779
+ "habilidades/extractor-de-aprendizajes/SKILL.md": "feaa6adda35c9b04f5134511ce39e9559657b994a4e15b03d4052f7a1bdadcb0",
4780
+ "habilidades/fastapi-experto/SKILL.md": "d657e80b9edc733966c44c3755cca3ca19a825243cd0bff6eaab4bc046a963b2",
4781
+ "habilidades/feynman-auditor-swl/SKILL.md": "7fb1e239d7096f9d58b88d77acd08afba9ceccab8316ec0808dd6463866c530a",
4782
+ "habilidades/frontend-avanzado/SKILL.md": "4e7c8b402da138a56890a745fc508e77a2d549ff7e37467344efbc07692db28c",
4783
+ "habilidades/gcp-cloud/SKILL.md": "d4f4db699f9cea2ae9fefc7c7b4acc88d8272cb9f41137c8728eec52c17ea9d1",
4784
+ "habilidades/generacion-mermaid/SKILL.md": "8cd0f8ec045ab25f9dd9d52402f816f61ebb24a02223028325bfd6edd6275c3f",
4785
+ "habilidades/git-worktrees-paralelo/SKILL.md": "90120d9554df3e32419e41e8b13825fe0e8aa46f67f093d93737f39b4b52151d",
4786
+ "habilidades/go-experto/SKILL.md": "acde2520a9927b6557741fd37254e9852e481f48dbcd5041832008a23fe2f626",
4787
+ "habilidades/go-patrones/SKILL.md": "5bd991417068df614191b7583dab3e3d8761d66e74fad885572a62ea98a1bbf2",
4788
+ "habilidades/go-testing/SKILL.md": "b8e31b72b7ef52df10cccae2aa99691ef3ddf7211c1af7909de5d168465e0300",
4789
+ "habilidades/graphql-experto/SKILL.md": "f8a70a0cd0a888aa43d4c3bdebc8142e8cb2b37df228f9ed3dbccdab9022f6aa",
4790
+ "habilidades/guardrail-semantico/SKILL.md": "000bc86759c68222a35c65d1fd4bba495e9f8aba9fd48dafd186ac2e378a98fe",
4791
+ "habilidades/harness-claude-code/SKILL.md": "69c417be66e356f5fea1a91991efd8ef8dfb2d0b1cd92456750749aa8affa1fb",
4792
+ "habilidades/iam-secretos/SKILL.md": "6245a62b3c51e4e9b2caab710d06709e656a2ed84fb9a6de491b6c4767aad890",
4793
+ "habilidades/infra-github-actions/SKILL.md": "19a85aca305cbb90bc106f61d4de3f945f5b70ac890ae6f60301b6b4091e3462",
4794
+ "habilidades/instalar-sistema/SKILL.md": "91d1f71d7652dd7a8c497838354ad0134e462a013d1d78c2a3ac3b78e528fd4b",
4795
+ "habilidades/java-experto/SKILL.md": "cf545788d601fd10a0153e46b8aff67b5f8af0ebc2a753117337e4288faf27bf",
4796
+ "habilidades/java-patrones/SKILL.md": "76d387de2566bd79663a0b2fbfe36b49e4505635167844a4c3c4ce5012de8f64",
4797
+ "habilidades/java-testing/SKILL.md": "5cfc5aa4c86b347023a4c3ed96130b5cc706f8aaa6fa78ad71afbddfa4e6127b",
4798
+ "habilidades/kotlin-compose/SKILL.md": "71c35fef252d475b60908341797ad5c10c4a007225334bda5821843a17013c59",
4799
+ "habilidades/kotlin-experto/SKILL.md": "f1973adbb2614e6dc42521abc6fec17ff9441faac200d48388e9aa333bda7124",
4800
+ "habilidades/kotlin-testing/SKILL.md": "225e23c552dea40f46f8f2bfac7bf91c73e16ff05de59e828645b006963e5021",
4801
+ "habilidades/kubernetes-orquestacion/SKILL.md": "4b06e923d1f95a5dd32f113389798eee660a1b1baafae3722bebbc61dabe9f3b",
4802
+ "habilidades/langchain-langraph/SKILL.md": "f8e5c6242a81849a9d19a4e5a6bbf8d6cf0c5a77737a9f62881b5bf72f953fde",
4803
+ "habilidades/legacy-code-rescue/SKILL.md": "9cf5e64ed05a9ed03cfd10685042350994313a17fc7b2b62bd5cdcfd29ff1fce",
4804
+ "habilidades/likec4-experto/SKILL.md": "0dc5eb07a5413bdba2205c9b577d00dc978d0bc540f526abc9536cf4aa5ef055",
4805
+ "habilidades/manejo-errores/SKILL.md": "1c230410505f57e4e3125ef26116a3e72edb13ed63136517c0ef4a712245c9d6",
4806
+ "habilidades/mapear-codebase/SKILL.md": "b0bcec7dfb20591de7bf77ca8c09f734ddbc7c07e19429691c4cd881090dfbf6",
4807
+ "habilidades/memoria-busqueda/SKILL.md": "606e0cdb920166733462dc108fd87e6cce1d173b0b7a9f115fda4f9dd088312e",
4808
+ "habilidades/meta-reglas-extendido/SKILL.md": "28eff34384fc397140cd4e9218779745eded189275d561713c4662d125ad5fbc",
4809
+ "habilidades/meta-skills-estandar/SKILL.md": "05de8248e0eae78f83e1970e30e83d84c633727162538c6304a7a287bc2d6985",
4810
+ "habilidades/microservicios/SKILL.md": "9bcc75168a97fc2f43ab6f08fe21985ebdcb4771d1150746254439042f1af5ce",
4811
+ "habilidades/mobile-flutter/SKILL.md": "4364d61c4bf6bf02e29a7a2c2942475ab71a0ae9df6d9eb2de9f774132da562e",
4812
+ "habilidades/mobile-react-native/SKILL.md": "97d47a359e7f4b6d2ef833e4e1b904bc9d3905e8b4676b4a5aadef1a1d7082d2",
4813
+ "habilidades/mongodb-experto/SKILL.md": "924eb3779c5a7f6de7517397d42ea7ca16c550e534a712524c49f1cc7bf8b7e9",
4814
+ "habilidades/monitoring-alertas/SKILL.md": "641d42946c1eebf8ae42b273f150d2257cbbfdd649f3135bfa282774016aefa8",
4815
+ "habilidades/nemesis-evaluacion-json/SKILL.md": "34c9b9b763706632f5741a5267e8b474a6c6666a685112a7ebd864ea4a077af9",
4816
+ "habilidades/nemesis-redistribuir/SKILL.md": "b2ed30b2f2c57239f0bc1a228da14e4d7d3256bbd5f577a44bb6a035042093c1",
4817
+ "habilidades/nestjs-experto/SKILL.md": "adaace2a47e5b6f40801d751fa5e7197f2ecb84da94942b10562520c944df0cc",
4818
+ "habilidades/nextjs-experto/SKILL.md": "fa0305930d2ef7d3ae5ee60f015de1486163c3e7ee58f76e6b447f62eb3fa59f",
4819
+ "habilidades/nextjs-patrones/SKILL.md": "d97850fb296d80965f995fd4f709c3cbeb5cf01ef0c1da775bcb022c65f0ea0b",
4820
+ "habilidades/nextjs-testing/SKILL.md": "30d1bc2a006c8da886b9cfcd43c28b52159fdd6cf63101296785edbc90099d88",
4821
+ "habilidades/node-experto/SKILL.md": "44705c5fa9615e1ddc86f62b4cf3041d183f08f11fe134695a8b5cf5a00f5cc8",
4822
+ "habilidades/notificaciones-multicanal/SKILL.md": "d707ca749ce1d73066e99dc25fe7905b7dd0ea99059549e28de3a5af2ff37bb8",
4823
+ "habilidades/nuevo-proyecto/SKILL.md": "8b07d548b6dabe945674ca4571f53146265737ae9241f2903cfc5ef00287f92a",
4824
+ "habilidades/orquestacion-async/SKILL.md": "ef6db48bb8220f9c5ab3ddfb4a289ddda0ac25d4990b6fc879bbe32a2bdc390a",
4825
+ "habilidades/patrones-python/SKILL.md": "b1ef79daf505cb7790f93bb1db694ac35bb542a2a4603717de74d2533e9ef52e",
4826
+ "habilidades/perfil-usuario/SKILL.md": "6887b812f57b357ef289e6f66efe17e4e92b4ce4458e5492a8f7b426fdd08deb",
4827
+ "habilidades/performance-baseline/SKILL.md": "a471b230da1fe20ab0b36a1495b4c2e2dd17c5b8bab02e2a464dff290ef21044",
4828
+ "habilidades/php-experto/SKILL.md": "4bfe0222719b2f0c699391155063fd8f1093b2e4f1bc229bc24eafc6c3cbe142",
4829
+ "habilidades/php-patrones/SKILL.md": "238265a70101654dd983e186e9399d62e63152beb22ff120bd4738d4015486b6",
4830
+ "habilidades/php-testing/SKILL.md": "79172361b329873593ed14ade150a6660e403c78f87dd9a1fbdd1135a3682d3d",
4831
+ "habilidades/planear-fase/SKILL.md": "252d4c6da07c4b90f4fcccc5f91b2a178da72c0dc5a7214883d302709520c8a1",
4832
+ "habilidades/postgresql-experto/SKILL.md": "3943a191fd4ace75136cd82985f3ca337c941b35f01828850d6487d22181ce9a",
4833
+ "habilidades/prevencion-racionalizacion/SKILL.md": "3978236740c4861b879270993d423f1f0d3e5adf3cd29de40a1db026f95b2da2",
4834
+ "habilidades/prevencion-sobreingenieria/SKILL.md": "747566a77da85a851ad9e14e4f1a839df9873bdcc44d92963df2c9deb6ca604d",
4835
+ "habilidades/privacy-memoria/SKILL.md": "747e3a4b43faf68c5491226b28b7bc447e85a257d0a1cf9e8be09f426a3400f5",
4836
+ "habilidades/proceso-autoverificacion-evidencias/SKILL.md": "92be7ce4fbda1f241a556738a7eeeeb784f0ba1eb6a6eeca927a4c0d43ff17d3",
4837
+ "habilidades/proceso-confianza-pre-implementacion/SKILL.md": "a4df4d11e1bb56ce92212dc5cfb2801aed2fbc68afe8b200a695b757e9823b4d",
4838
+ "habilidades/proceso-ddia-fundamentos/SKILL.md": "b51e2a2f71e220c0fc2557ec7e425ff6505dfc31a9720a6c6a0d0e8cb0b51baf",
4839
+ "habilidades/proceso-ddia-streaming/SKILL.md": "59ae94da3e656871416c0b47944bf4fae02215c4d3cf7e2f826f206483341515",
4840
+ "habilidades/proceso-debate-adversarial/SKILL.md": "0a9fe26d605c8891fde6a0372a57c8575ee36bd0b74db72d2a1e9e0a18a768d9",
4841
+ "habilidades/proceso-discovery-machote/SKILL.md": "8b6de90ddc971dbdf9d86745792d0149e8d44de5b3c24e9b1399ff643f146972",
4842
+ "habilidades/proceso-dynamic-workflows/SKILL.md": "56b4410405d6060f8a0bcc28736799eead5748b208a7a1abc5a8eca1d2e540c8",
4843
+ "habilidades/proceso-ingenieria-requerimientos/SKILL.md": "ca484be02f9706450f063d26ac6fd180bb63fc74bf3f53d7549933bae6991ac9",
4844
+ "habilidades/proceso-intent-engineering/SKILL.md": "38cfc73217d54b61e93685dd7bf5f5cb6433e1fc6bccbc0f5a076764ada0418d",
4845
+ "habilidades/proceso-modular-split/SKILL.md": "2ede321545b53721ddeda31f186843d97274b9adbd52f52ca33cb8db143b4ad2",
4846
+ "habilidades/prompt-engineering/SKILL.md": "b104ef8326950f0b456b115d2a83d6c67a085ff235db9d410bd5e9c913fe5db4",
4847
+ "habilidades/protocolo-revision-swl/SKILL.md": "456232d1ca1f40fae9dd51fb6da1a9aefec641a93450688e32df4884a67097e8",
4848
+ "habilidades/rag-arquitectura/SKILL.md": "163dc5a65dbfd38935a0d0388338c35898fdd095d33bce671b7fdc349f1f0d1b",
4849
+ "habilidades/rails-experto/SKILL.md": "c80d012804c070bcaf3b6b7a749f67d6f7b5bfa9a32246a743ecca5a494c34e7",
4850
+ "habilidades/react-experto/SKILL.md": "90ab3df1f9e2b590362bd0088d3f1e700b22f40e15adee85f814adbfbad4255d",
4851
+ "habilidades/react-optimizacion/SKILL.md": "4d26faf586b2404db7e48b59548eb33cd41bb0163af966886a83b733afac1f8a",
4852
+ "habilidades/redis-experto/SKILL.md": "bd78eb53366e6f3da5c79017ac3942a1b2b0d38b56671aa506d054aef1d1a7e7",
4853
+ "habilidades/reducir-entropia/SKILL.md": "8152a0de3c5d5406e3ce5bdeb1530119a31f5788fabdd671e2d2f1e73475d2f8",
4854
+ "habilidades/release-semver/SKILL.md": "a3f291b75ce0ad9ed91a361ea81879f72e06ff0c1d35d2d5a4a1814f9aa3c32e",
4525
4855
  "habilidades/rust-experto/SKILL.md": "79a2591d50678b72fecdf07b713c3ddbfcecef28667ef28eec0daa9c78b8a18c",
4526
4856
  "habilidades/rust-patrones/SKILL.md": "c58a1b9467aa9d3056e066a997908ba876c65a0fdae8697f2d36f3569a3acc2a",
4527
4857
  "habilidades/rust-testing/SKILL.md": "fee2f695d0be176d1cfaff207933969e983782beb075d681baa4ee9b9a0b0031",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "lockfileVersion": 1,
3
- "generatedAt": "2026-07-09T19:58:34.042Z",
3
+ "generatedAt": "2026-07-09T21:51:05.079Z",
4
4
  "skillsCount": 181,
5
- "lockHash": "sha256:60e8d0c732526f1329974a4bae2894a493e92a6b506ce192ca7cd5b04f2609da",
5
+ "lockHash": "sha256:016f7b1362443918147698bca6428463dcc70770d3acb61b84bb65267b195cf4",
6
6
  "skills": [
7
7
  {
8
8
  "nombre": "accesibilidad-a11y",
@@ -602,9 +602,9 @@
602
602
  {
603
603
  "nombre": "harness-claude-code",
604
604
  "path": "habilidades/harness-claude-code/SKILL.md",
605
- "hash": "sha256:90a45cb0d932ccd38bbb2fc09ef86149d640dd073ab6d21a841db33a6baf41db",
606
- "bytes": 17714,
607
- "version": "\"1.0.4\""
605
+ "hash": "sha256:d4c7d4283a35fb5d1dcfcf18d2c0f45dca012bbc518fa2f5df8c3a88517069b0",
606
+ "bytes": 18370,
607
+ "version": "\"1.0.5\""
608
608
  },
609
609
  {
610
610
  "nombre": "iam-secretos",
@@ -1043,9 +1043,9 @@
1043
1043
  {
1044
1044
  "nombre": "release-semver",
1045
1045
  "path": "habilidades/release-semver/SKILL.md",
1046
- "hash": "sha256:37d4ef6228c83dfc5333188c85c7e910949d3bdcd3f49a5a2b8dd21a4835539d",
1047
- "bytes": 17761,
1048
- "version": "\"1.0.3\""
1046
+ "hash": "sha256:c77cc73cc1f6ef635f9f79d9d008c5ee05f5de557b5f94ffa85b67575b2e9a33",
1047
+ "bytes": 18514,
1048
+ "version": "\"1.0.4\""
1049
1049
  },
1050
1050
  {
1051
1051
  "nombre": "rust-experto",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@saulwade/swl-ses",
3
- "version": "2.5.2",
3
+ "version": "2.5.3",
4
4
  "description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 61 agentes, 181 habilidades, 47 comandos, 77 reglas y 49 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. v1.8.0 unifica los directorios runtime de .planning/ al ingles (evolution/, auto-evolution/, user-profile/, archive/), manteniendo fases/ en espanol, con guard validar-planning-paths y allowlist canonica (ADR-0031). Hereda de v1.7.4: skill calidad-anti-patrones-universales + scripts/lib/pr-analyzer.js + 3 sub-secciones en estilo-sin-ai-isms.",
5
5
  "bin": {
6
6
  "swl-ses": "bin/swl-ses.js",
package/plugin.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "swl-ses",
3
- "version": "2.5.2",
3
+ "version": "2.5.3",
4
4
  "description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot. 61 agentes, 181 habilidades, 47 comandos, 77 reglas y 49 hooks. 76 librerias. 11 lenguajes. Soporta Claude Code, Copilot, OpenCode, Codex y Gemini CLI. Loop evaluator-optimizer en /swl:nemesis (ADR-0021). v1.8.0 unifica los directorios runtime de .planning/ al ingles (evolution/, auto-evolution/, user-profile/, archive/), manteniendo fases/ en espanol, con guard validar-planning-paths y allowlist canonica (ADR-0031). Hereda de v1.7.4: skill calidad-anti-patrones-universales + scripts/lib/pr-analyzer.js + 3 sub-secciones en estilo-sin-ai-isms.",
5
5
  "author": "Saul Wade Leon",
6
6
  "license": "MIT",
@@ -84,6 +84,27 @@ function nombreLegibleEvolucion(rutaAbs) {
84
84
  * El comportamiento sin TUI no cambia.
85
85
  */
86
86
  async function install(opciones) {
87
+ // Camino "solo hooks" (DT-HOOKS-SOLO-PROYECTO): registra en el settings.json
88
+ // del PROYECTO los hooks del scope GLOBAL ya instalado, sin copiar ningún
89
+ // componente — evita duplicar agentes/comandos en la UI de Claude Code
90
+ // (que lee ambos scopes) solo para encender la telemetría.
91
+ if (opciones['solo-hooks'] || opciones.solo_hooks) {
92
+ const { activarHooksProyecto } = require('./lib/activar-hooks-proyecto');
93
+ const r = activarHooksProyecto({ target: opciones.target || 'claude' });
94
+ if (!r.ok) {
95
+ console.error(`\n✘ --solo-hooks: ${r.error}`);
96
+ process.exitCode = 1;
97
+ return r;
98
+ }
99
+ console.log('\n✔ Hooks activados a nivel proyecto SIN copiar componentes:');
100
+ console.log(` settings: ${r.settingsPath}`);
101
+ console.log(` hooks de: ${r.hooksDirGlobal} (scope global — update global los refresca aquí también)`);
102
+ console.log(` registrados: ${r.registrados} | externos preservados: ${r.preservados}`);
103
+ console.log('\n La telemetría (.planning/evolution/nudges.jsonl, skill-metrics.json)');
104
+ console.log(' empieza a acumularse desde la siguiente sesión de Claude en este proyecto.');
105
+ return r;
106
+ }
107
+
87
108
  // Leer manifest .swl-ses si existe — sus valores son defaults que el CLI puede sobreescribir
88
109
  const manifest = leerManifest(process.cwd());
89
110
  if (manifest && !opciones.target && !opciones.profile) {
@@ -0,0 +1,104 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * activar-hooks-proyecto.js — Camino "solo hooks" (DT-HOOKS-SOLO-PROYECTO).
5
+ *
6
+ * Registra en el `.claude/settings.json` del PROYECTO los hooks del scope
7
+ * GLOBAL ya instalado, sin copiar ningún componente. Cierra el dilema del
8
+ * install local: los hooks solo funcionan registrados a nivel proyecto
9
+ * (ADR-0009), pero el install local completo duplica agentes/comandos en la
10
+ * UI de Claude Code (lee ambos scopes). Con este camino:
11
+ *
12
+ * - Los comandos del settings apuntan con ruta ABSOLUTA al hooks/ global
13
+ * (esGlobal: true en registrarHooks) → cero archivos copiados.
14
+ * - `swl-ses update` del global refresca los hooks de TODOS los proyectos
15
+ * activados así, gratis (apuntan a los mismos archivos).
16
+ * - Hooks externos (no-SWL) del settings del proyecto se preservan
17
+ * (garantía de registrarHooks).
18
+ *
19
+ * Uso: `swl-ses install --target claude --solo-hooks` (en la raíz del
20
+ * proyecto). Requiere instalación global previa del runtime.
21
+ */
22
+
23
+ const fs = require('fs');
24
+ const path = require('path');
25
+
26
+ const RUNTIMES_SOPORTADOS = new Set(['claude', 'openclaude']);
27
+
28
+ /**
29
+ * @param {object} opciones
30
+ * @param {string} [opciones.target='claude'] Runtime (claude|openclaude — formato de settings de Claude Code)
31
+ * @param {string} [opciones.dirProyecto=cwd] Raíz del proyecto destino
32
+ * @param {string} [opciones.hooksDirGlobal] Override del hooks/ global (tests)
33
+ * @param {object} [opciones.deps] Inyección para tests: { registrarHooks, registrarOptimizaciones, cargarHooksConfig, scopesReales, obtenerRuntime }
34
+ * @returns {{ok: boolean, error?: string, settingsPath?: string, hooksDirGlobal?: string, registrados?: number, preservados?: number}}
35
+ */
36
+ function activarHooksProyecto(opciones = {}) {
37
+ const target = opciones.target || 'claude';
38
+ if (!RUNTIMES_SOPORTADOS.has(target)) {
39
+ return { ok: false, error: `--solo-hooks soporta por ahora targets con settings formato Claude Code (claude, openclaude); recibido: "${target}".` };
40
+ }
41
+
42
+ const deps = opciones.deps || {};
43
+ const hs = require('./hooks-settings');
44
+ const registrarHooks = deps.registrarHooks || hs.registrarHooks;
45
+ const registrarOptimizaciones = deps.registrarOptimizaciones || hs.registrarOptimizaciones;
46
+ const cargarHooksConfig = deps.cargarHooksConfig || hs.cargarHooksConfig;
47
+
48
+ // 1. Localizar el hooks/ del scope GLOBAL del runtime.
49
+ let hooksDirGlobal = opciones.hooksDirGlobal;
50
+ if (!hooksDirGlobal) {
51
+ try {
52
+ const dr = require('./detectar-runtime');
53
+ const obtenerRuntime = deps.obtenerRuntime || dr.obtenerRuntime;
54
+ const scopesReales = deps.scopesReales || dr.scopesReales;
55
+ const runtime = obtenerRuntime(target);
56
+ const global = scopesReales(runtime).find(s => s.esGlobal);
57
+ if (!global) return { ok: false, error: `No se pudo resolver el scope global del runtime "${target}".` };
58
+ hooksDirGlobal = path.join(global.dir, 'hooks');
59
+ } catch (err) {
60
+ return { ok: false, error: `No se pudo detectar el runtime "${target}": ${err.message}` };
61
+ }
62
+ }
63
+ if (!fs.existsSync(hooksDirGlobal)) {
64
+ return { ok: false, error: `No hay instalación global con hooks en ${hooksDirGlobal}. Instala primero el global: npx -y @saulwade/swl-ses@latest install --target ${target} --global --perfil completo` };
65
+ }
66
+
67
+ // 2. Hooks disponibles = archivos del global ∩ hooks-config del paquete.
68
+ const hooksConfig = cargarHooksConfig();
69
+ const hookFiles = fs.readdirSync(hooksDirGlobal)
70
+ .filter(f => f.endsWith('.js') && hooksConfig[f]);
71
+ if (hookFiles.length === 0) {
72
+ return { ok: false, error: `El hooks/ global (${hooksDirGlobal}) no contiene hooks reconocidos por hooks-config.json — instalación global corrupta o muy antigua; corre update primero.` };
73
+ }
74
+
75
+ // 3. Registrar en el settings.json del PROYECTO, apuntando al global.
76
+ const dirProyecto = opciones.dirProyecto || process.cwd();
77
+ const dirClaude = path.join(dirProyecto, '.claude');
78
+ fs.mkdirSync(dirClaude, { recursive: true });
79
+ const settingsPath = path.join(dirClaude, 'settings.json');
80
+
81
+ const r = registrarHooks({
82
+ settingsPath,
83
+ hooksDir: hooksDirGlobal,
84
+ esGlobal: true, // semántica: comandos con ruta ABSOLUTA al hooksDir (que es el global)
85
+ hookFiles,
86
+ });
87
+
88
+ let optimizaciones = 0;
89
+ try {
90
+ const opt = registrarOptimizaciones(settingsPath);
91
+ optimizaciones = (opt && opt.registradas) || 0;
92
+ } catch { /* opcional — no bloquea la activación */ }
93
+
94
+ return {
95
+ ok: true,
96
+ settingsPath,
97
+ hooksDirGlobal,
98
+ registrados: r.registrados,
99
+ preservados: r.preservados,
100
+ optimizaciones,
101
+ };
102
+ }
103
+
104
+ module.exports = { activarHooksProyecto, RUNTIMES_SOPORTADOS };
@@ -59,7 +59,7 @@ function hooksRegistradosEnProyecto(raiz) {
59
59
  } catch { return false; }
60
60
  }
61
61
 
62
- const HINT_ACTIVACION = 'hooks sin registrar a nivel proyecto (el install --global no los registra por diseño, ADR-0009) — activar con: npx -y @saulwade/swl-ses@latest install --target claude --perfil core (SIN --global, en la raíz del proyecto)';
62
+ const HINT_ACTIVACION = 'hooks sin registrar a nivel proyecto (el install --global no los registra por diseño, ADR-0009) — activar SIN duplicar componentes con: npx -y @saulwade/swl-ses@latest install --target claude --solo-hooks (en la raíz del proyecto)';
63
63
 
64
64
  function leerNudges(raiz, { ventanaDias = 30, hoy = new Date() } = {}) {
65
65
  const ruta = path.join(raiz, '.planning', 'evolution', 'nudges.jsonl');