@saulwade/swl-ses 2.1.0 → 2.2.1
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 +199 -196
- package/README.md +597 -579
- package/agentes/arquitecto-swl.md +0 -5
- package/agentes/backend-python-swl.md +0 -5
- package/agentes/implementador-swl.md +0 -5
- package/agentes/nemesis-auditor-swl.md +0 -5
- package/agentes/orquestador-swl.md +0 -5
- package/agentes/planificador-swl.md +0 -5
- package/agentes/revisor-codigo-swl.md +0 -5
- package/bin/swl-ses.js +63 -0
- package/comandos/swl/adoptar-proyecto.md +12 -14
- package/comandos/swl/aprender.md +30 -47
- package/comandos/swl/aprobar-plan.md +23 -35
- package/comandos/swl/autoresearch.md +12 -14
- package/comandos/swl/briefing.md +5 -8
- package/comandos/swl/checkpoint.md +10 -15
- package/comandos/swl/claudemd.md +12 -12
- package/comandos/swl/configurar-ci.md +20 -19
- package/comandos/swl/cron.md +10 -12
- package/comandos/swl/ejecutar-fase.md +10 -8
- package/comandos/swl/evolucionar.md +6 -11
- package/comandos/swl/inbox.md +10 -10
- package/comandos/swl/modelo.md +7 -9
- package/comandos/swl/notificaciones.md +19 -116
- package/comandos/swl/nuevo-proyecto.md +9 -14
- package/comandos/swl/release.md +19 -5
- package/comandos/swl/revisar-impacto.md +0 -5
- package/comandos/swl/status.md +333 -348
- package/comandos/swl/verificar.md +817 -813
- package/habilidades/agent-browser/SKILL.md +0 -5
- package/habilidades/angular-moderno/SKILL.md +0 -5
- package/habilidades/api-rest-diseno/SKILL.md +0 -5
- package/habilidades/aprendizaje-continuo/SKILL.md +0 -5
- package/habilidades/auth-patrones/SKILL.md +0 -5
- package/habilidades/build-errors-nextjs/SKILL.md +0 -5
- package/habilidades/changelog-generator/SKILL.md +174 -179
- package/habilidades/checklist-seguridad/SKILL.md +0 -5
- package/habilidades/contenedores-docker/SKILL.md +0 -5
- package/habilidades/datos-etl/SKILL.md +0 -5
- package/habilidades/doc-sync/SKILL.md +0 -5
- package/habilidades/extractor-de-aprendizajes/SKILL.md +0 -5
- package/habilidades/fastapi-experto/SKILL.md +0 -5
- package/habilidades/frontend-avanzado/SKILL.md +0 -5
- package/habilidades/iam-secretos/SKILL.md +0 -5
- package/habilidades/manejo-errores/SKILL.md +0 -5
- package/habilidades/mapear-codebase/SKILL.md +0 -5
- package/habilidades/meta-skills-estandar/SKILL.md +0 -5
- package/habilidades/monitoring-alertas/SKILL.md +0 -5
- package/habilidades/nextjs-experto/SKILL.md +0 -5
- package/habilidades/nextjs-testing/SKILL.md +0 -5
- package/habilidades/node-experto/SKILL.md +0 -5
- package/habilidades/orquestacion-async/SKILL.md +0 -5
- package/habilidades/patrones-python/SKILL.md +227 -232
- package/habilidades/planear-fase/SKILL.md +336 -341
- package/habilidades/postgresql-experto/SKILL.md +0 -5
- package/habilidades/prevencion-sobreingenieria/SKILL.md +0 -5
- package/habilidades/protocolo-revision-swl/SKILL.md +0 -5
- package/habilidades/react-experto/SKILL.md +0 -5
- package/habilidades/release-semver/SKILL.md +0 -5
- package/habilidades/swl-claudemd/SKILL.md +10 -11
- package/habilidades/tdd-workflow/SKILL.md +710 -715
- package/habilidades/testing-python/SKILL.md +335 -340
- package/habilidades/verificar-trabajo/SKILL.md +0 -5
- package/hooks/lib/evolution-tracker.js +191 -35
- package/hooks/lib/propose-step.js +1 -0
- package/llms.txt +1 -1
- package/manifiestos/canonical-hashes.json +656 -0
- package/manifiestos/modulos.json +3 -0
- package/manifiestos/skills-lock.json +71 -71
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/auditar-claudemd.js +38 -0
- package/scripts/cli/aprobar-plan.js +73 -0
- package/scripts/cli/briefing.js +23 -0
- package/scripts/cli/ciclo-evolucion.js +26 -0
- package/scripts/cli/configurar-ci.js +40 -0
- package/scripts/cli/derivar-feature-list.js +25 -0
- package/scripts/cli/detectar-host.js +27 -0
- package/scripts/cli/diary-entry.js +69 -0
- package/scripts/cli/execution-state.js +18 -0
- package/scripts/cli/gateway-notify.js +41 -0
- package/scripts/cli/liberar-fase.js +42 -0
- package/scripts/cli/loop-telemetry.js +125 -0
- package/scripts/cli/mark-evolved.js +56 -0
- package/scripts/cli/metricas-dora.js +26 -0
- package/scripts/cli/near-duplicate.js +55 -0
- package/scripts/cli/notificaciones.js +123 -0
- package/scripts/cli/propose-step.js +29 -0
- package/scripts/cli/schedule-parse.js +19 -0
- package/scripts/cli/sugerir-modelo.js +20 -0
- package/scripts/cli/verificar-plan.js +36 -0
- package/scripts/cli/verificar-trazabilidad.js +35 -0
- package/scripts/derivar-feature-list.js +1 -0
- package/scripts/generar-canonical-hashes.js +147 -0
- package/scripts/instalador.js +126 -53
- package/scripts/lib/audit-evolved.js +71 -0
- package/scripts/lib/auditar-invocaciones-comandos.js +104 -0
- package/scripts/lib/canonical-hash.js +94 -0
- package/scripts/lib/evolved-fuente.js +138 -0
- package/scripts/lib/resolver-plan-fase.js +37 -0
- package/scripts/remediar-evolved-instaladas.js +239 -0
- package/scripts/validar.js +27 -0
- package/scripts/verificar-evolucion.js +36 -0
- package/scripts/verificar-release.js +33 -0
- package/scripts/verificar-trazabilidad.js +1 -1
- package/agentes/.evolved.json +0 -9
- package/comandos/swl/.evolved.json +0 -23
- package/habilidades/auth-patrones/.evolved.json +0 -9
- package/habilidades/extractor-de-aprendizajes/.evolved.json +0 -9
- package/habilidades/instalar-sistema/.evolved.json +0 -9
- package/habilidades/manejo-errores/.evolved.json +0 -9
- package/habilidades/node-experto/.evolved.json +0 -9
- package/habilidades/release-semver/.evolved.json +0 -9
package/manifiestos/modulos.json
CHANGED
|
@@ -1043,6 +1043,9 @@
|
|
|
1043
1043
|
"hooks/inbox-aviso.js",
|
|
1044
1044
|
"hooks/session-briefing.js",
|
|
1045
1045
|
"hooks/lib/briefing.js",
|
|
1046
|
+
"hooks/lib/evolution-tracker.js",
|
|
1047
|
+
"hooks/lib/atomic-write.js",
|
|
1048
|
+
"scripts/lib/canonical-hash.js",
|
|
1046
1049
|
"hooks/lib/propose-step.js",
|
|
1047
1050
|
"hooks/lib/autonomia.js",
|
|
1048
1051
|
"hooks/aiisms-detector.js",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"lockfileVersion": 1,
|
|
3
|
-
"generatedAt": "2026-06-
|
|
3
|
+
"generatedAt": "2026-06-15T01:34:05.511Z",
|
|
4
4
|
"skillsCount": 182,
|
|
5
|
-
"lockHash": "sha256:
|
|
5
|
+
"lockHash": "sha256:f6706fea37eb39050b10e8137d2cdcd9cba757cf8557f4f5291c6e05cb8ee60a",
|
|
6
6
|
"skills": [
|
|
7
7
|
{
|
|
8
8
|
"nombre": "accesibilidad-a11y",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
{
|
|
15
15
|
"nombre": "agent-browser",
|
|
16
16
|
"path": "habilidades/agent-browser/SKILL.md",
|
|
17
|
-
"hash": "sha256:
|
|
18
|
-
"bytes":
|
|
17
|
+
"hash": "sha256:74c4feb71c40c6df18444503c2d468603e1a454c218a1bdf379e7309b053104b",
|
|
18
|
+
"bytes": 14228,
|
|
19
19
|
"version": "\"1.2.0\""
|
|
20
20
|
},
|
|
21
21
|
{
|
|
@@ -49,15 +49,15 @@
|
|
|
49
49
|
{
|
|
50
50
|
"nombre": "angular-moderno",
|
|
51
51
|
"path": "habilidades/angular-moderno/SKILL.md",
|
|
52
|
-
"hash": "sha256:
|
|
53
|
-
"bytes":
|
|
52
|
+
"hash": "sha256:2521b000c48a08228fb3510a7bf5d5471787ed8ce7e8296ae77e588f3823f5c2",
|
|
53
|
+
"bytes": 10472,
|
|
54
54
|
"version": "\"1.0.1\""
|
|
55
55
|
},
|
|
56
56
|
{
|
|
57
57
|
"nombre": "api-rest-diseno",
|
|
58
58
|
"path": "habilidades/api-rest-diseno/SKILL.md",
|
|
59
|
-
"hash": "sha256:
|
|
60
|
-
"bytes":
|
|
59
|
+
"hash": "sha256:2cba1d7fcc941055195b7171b04fbe76ecaf4b49bb7291520432dd743455fc43",
|
|
60
|
+
"bytes": 9890,
|
|
61
61
|
"version": "\"1.0.1\""
|
|
62
62
|
},
|
|
63
63
|
{
|
|
@@ -70,8 +70,8 @@
|
|
|
70
70
|
{
|
|
71
71
|
"nombre": "aprendizaje-continuo",
|
|
72
72
|
"path": "habilidades/aprendizaje-continuo/SKILL.md",
|
|
73
|
-
"hash": "sha256:
|
|
74
|
-
"bytes":
|
|
73
|
+
"hash": "sha256:24e975a8e8aa64cd33fdf0389c018dec1e0f2cc2450fbca5682751021f3a4479",
|
|
74
|
+
"bytes": 8399,
|
|
75
75
|
"version": "\"1.0.1\""
|
|
76
76
|
},
|
|
77
77
|
{
|
|
@@ -84,8 +84,8 @@
|
|
|
84
84
|
{
|
|
85
85
|
"nombre": "auth-patrones",
|
|
86
86
|
"path": "habilidades/auth-patrones/SKILL.md",
|
|
87
|
-
"hash": "sha256:
|
|
88
|
-
"bytes":
|
|
87
|
+
"hash": "sha256:a83322aec1665df10ed242d28d6c1812f388a4a7750f494cb18615e3318c1a7a",
|
|
88
|
+
"bytes": 18195,
|
|
89
89
|
"version": "\"1.2.0\""
|
|
90
90
|
},
|
|
91
91
|
{
|
|
@@ -203,8 +203,8 @@
|
|
|
203
203
|
{
|
|
204
204
|
"nombre": "build-errors-nextjs",
|
|
205
205
|
"path": "habilidades/build-errors-nextjs/SKILL.md",
|
|
206
|
-
"hash": "sha256:
|
|
207
|
-
"bytes":
|
|
206
|
+
"hash": "sha256:e5e83518a4af0ec2cfdb94cd7e310f486480789ac6c5cb980f47b394a09872cb",
|
|
207
|
+
"bytes": 14676,
|
|
208
208
|
"version": "\"1.1.0\""
|
|
209
209
|
},
|
|
210
210
|
{
|
|
@@ -266,8 +266,8 @@
|
|
|
266
266
|
{
|
|
267
267
|
"nombre": "changelog-generator",
|
|
268
268
|
"path": "habilidades/changelog-generator/SKILL.md",
|
|
269
|
-
"hash": "sha256:
|
|
270
|
-
"bytes":
|
|
269
|
+
"hash": "sha256:1d2cad1dac64cf5bdb9d169013cd481a8447a2e844792123f88de4c6008f6d65",
|
|
270
|
+
"bytes": 7811,
|
|
271
271
|
"version": "1.1.0"
|
|
272
272
|
},
|
|
273
273
|
{
|
|
@@ -280,8 +280,8 @@
|
|
|
280
280
|
{
|
|
281
281
|
"nombre": "checklist-seguridad",
|
|
282
282
|
"path": "habilidades/checklist-seguridad/SKILL.md",
|
|
283
|
-
"hash": "sha256:
|
|
284
|
-
"bytes":
|
|
283
|
+
"hash": "sha256:700214ccffff4c5b9f14b0b0ad54df30d5929ee5e5993aa4e971ead268503b7d",
|
|
284
|
+
"bytes": 18988,
|
|
285
285
|
"version": "\"1.2.0\""
|
|
286
286
|
},
|
|
287
287
|
{
|
|
@@ -315,8 +315,8 @@
|
|
|
315
315
|
{
|
|
316
316
|
"nombre": "contenedores-docker",
|
|
317
317
|
"path": "habilidades/contenedores-docker/SKILL.md",
|
|
318
|
-
"hash": "sha256:
|
|
319
|
-
"bytes":
|
|
318
|
+
"hash": "sha256:ee5b8d451f6e704d9cea50be5ff51b87ed2f6079f4378085e864f2e8298384b8",
|
|
319
|
+
"bytes": 9330,
|
|
320
320
|
"version": "\"1.0.1\""
|
|
321
321
|
},
|
|
322
322
|
{
|
|
@@ -364,8 +364,8 @@
|
|
|
364
364
|
{
|
|
365
365
|
"nombre": "datos-etl",
|
|
366
366
|
"path": "habilidades/datos-etl/SKILL.md",
|
|
367
|
-
"hash": "sha256:
|
|
368
|
-
"bytes":
|
|
367
|
+
"hash": "sha256:ec871e2241c0c50beae88dbbb15903488e654b1c238553390a4309030bc9edb9",
|
|
368
|
+
"bytes": 9333,
|
|
369
369
|
"version": "\"1.0.1\""
|
|
370
370
|
},
|
|
371
371
|
{
|
|
@@ -441,8 +441,8 @@
|
|
|
441
441
|
{
|
|
442
442
|
"nombre": "doc-sync",
|
|
443
443
|
"path": "habilidades/doc-sync/SKILL.md",
|
|
444
|
-
"hash": "sha256:
|
|
445
|
-
"bytes":
|
|
444
|
+
"hash": "sha256:4da3e0b05d120fef21071d62cede54a69045cb01a66425545559acc6c0472dea",
|
|
445
|
+
"bytes": 34511,
|
|
446
446
|
"version": "\"1.3.0\""
|
|
447
447
|
},
|
|
448
448
|
{
|
|
@@ -518,15 +518,15 @@
|
|
|
518
518
|
{
|
|
519
519
|
"nombre": "extractor-de-aprendizajes",
|
|
520
520
|
"path": "habilidades/extractor-de-aprendizajes/SKILL.md",
|
|
521
|
-
"hash": "sha256:
|
|
522
|
-
"bytes":
|
|
521
|
+
"hash": "sha256:a84b4e2278298602a8d8f1e0f4e359ae3ab14b419e708e396d71b92decd64c4a",
|
|
522
|
+
"bytes": 23431,
|
|
523
523
|
"version": "\"1.0.6\""
|
|
524
524
|
},
|
|
525
525
|
{
|
|
526
526
|
"nombre": "fastapi-experto",
|
|
527
527
|
"path": "habilidades/fastapi-experto/SKILL.md",
|
|
528
|
-
"hash": "sha256:
|
|
529
|
-
"bytes":
|
|
528
|
+
"hash": "sha256:bebaf70751231833c004212787487b1ac4d9dec8cdca58c383790fb5f0261195",
|
|
529
|
+
"bytes": 25546,
|
|
530
530
|
"version": "\"1.3.1\""
|
|
531
531
|
},
|
|
532
532
|
{
|
|
@@ -546,8 +546,8 @@
|
|
|
546
546
|
{
|
|
547
547
|
"nombre": "frontend-avanzado",
|
|
548
548
|
"path": "habilidades/frontend-avanzado/SKILL.md",
|
|
549
|
-
"hash": "sha256:
|
|
550
|
-
"bytes":
|
|
549
|
+
"hash": "sha256:04b0517806d09a748445c8ebb6d4f22cd91d41bf81c3c04bd07c6af42c318c79",
|
|
550
|
+
"bytes": 12303,
|
|
551
551
|
"version": "\"1.1.0\""
|
|
552
552
|
},
|
|
553
553
|
{
|
|
@@ -616,8 +616,8 @@
|
|
|
616
616
|
{
|
|
617
617
|
"nombre": "iam-secretos",
|
|
618
618
|
"path": "habilidades/iam-secretos/SKILL.md",
|
|
619
|
-
"hash": "sha256:
|
|
620
|
-
"bytes":
|
|
619
|
+
"hash": "sha256:ba18cd048f3c957dc51a85b88205e6849a25864cdd1af1eb5e91edfa856dd931",
|
|
620
|
+
"bytes": 14364,
|
|
621
621
|
"version": "\"1.1.0\""
|
|
622
622
|
},
|
|
623
623
|
{
|
|
@@ -707,15 +707,15 @@
|
|
|
707
707
|
{
|
|
708
708
|
"nombre": "manejo-errores",
|
|
709
709
|
"path": "habilidades/manejo-errores/SKILL.md",
|
|
710
|
-
"hash": "sha256:
|
|
711
|
-
"bytes":
|
|
710
|
+
"hash": "sha256:f51a3c1add4fa8121a477e1366f9c003f25acfa021cd36b68e9c89ac15133426",
|
|
711
|
+
"bytes": 23220,
|
|
712
712
|
"version": "\"1.2.0\""
|
|
713
713
|
},
|
|
714
714
|
{
|
|
715
715
|
"nombre": "mapear-codebase",
|
|
716
716
|
"path": "habilidades/mapear-codebase/SKILL.md",
|
|
717
|
-
"hash": "sha256:
|
|
718
|
-
"bytes":
|
|
717
|
+
"hash": "sha256:216b194a8929abe3340d344632a1d9a739ad5d4cfc76b64a7e0b227a2ba3cf9b",
|
|
718
|
+
"bytes": 13289,
|
|
719
719
|
"version": "\"1.1.0\""
|
|
720
720
|
},
|
|
721
721
|
{
|
|
@@ -728,8 +728,8 @@
|
|
|
728
728
|
{
|
|
729
729
|
"nombre": "meta-skills-estandar",
|
|
730
730
|
"path": "habilidades/meta-skills-estandar/SKILL.md",
|
|
731
|
-
"hash": "sha256:
|
|
732
|
-
"bytes":
|
|
731
|
+
"hash": "sha256:02d1eb9c9395f22a766f4d4eb83ce3c4c4d687600fad0c721fb471ab9a1caa2d",
|
|
732
|
+
"bytes": 23161,
|
|
733
733
|
"version": "\"1.1.1\""
|
|
734
734
|
},
|
|
735
735
|
{
|
|
@@ -763,8 +763,8 @@
|
|
|
763
763
|
{
|
|
764
764
|
"nombre": "monitoring-alertas",
|
|
765
765
|
"path": "habilidades/monitoring-alertas/SKILL.md",
|
|
766
|
-
"hash": "sha256:
|
|
767
|
-
"bytes":
|
|
766
|
+
"hash": "sha256:1e48ff5024454b2173a4b31d713394fce96be47df23fff09aaa2c973c858e0c1",
|
|
767
|
+
"bytes": 11618,
|
|
768
768
|
"version": "\"1.0.1\""
|
|
769
769
|
},
|
|
770
770
|
{
|
|
@@ -791,8 +791,8 @@
|
|
|
791
791
|
{
|
|
792
792
|
"nombre": "nextjs-experto",
|
|
793
793
|
"path": "habilidades/nextjs-experto/SKILL.md",
|
|
794
|
-
"hash": "sha256:
|
|
795
|
-
"bytes":
|
|
794
|
+
"hash": "sha256:18da55140e6f97d7a8497732c4136bda0d0a77307d5293feea0af41d415bf8c5",
|
|
795
|
+
"bytes": 15900,
|
|
796
796
|
"version": "\"1.1.1\""
|
|
797
797
|
},
|
|
798
798
|
{
|
|
@@ -805,15 +805,15 @@
|
|
|
805
805
|
{
|
|
806
806
|
"nombre": "nextjs-testing",
|
|
807
807
|
"path": "habilidades/nextjs-testing/SKILL.md",
|
|
808
|
-
"hash": "sha256:
|
|
809
|
-
"bytes":
|
|
808
|
+
"hash": "sha256:e89ffdaf85f34845f9edd3a99768f39a0264513e9581c61286895837e4c2d0fa",
|
|
809
|
+
"bytes": 19157,
|
|
810
810
|
"version": "\"1.1.0\""
|
|
811
811
|
},
|
|
812
812
|
{
|
|
813
813
|
"nombre": "node-experto",
|
|
814
814
|
"path": "habilidades/node-experto/SKILL.md",
|
|
815
|
-
"hash": "sha256:
|
|
816
|
-
"bytes":
|
|
815
|
+
"hash": "sha256:a8ede8fcf5eeb72f37fd0d55b4228cab464d0aee08e3eff9bf0a00118e05bb90",
|
|
816
|
+
"bytes": 25949,
|
|
817
817
|
"version": "\"1.1.0\""
|
|
818
818
|
},
|
|
819
819
|
{
|
|
@@ -833,8 +833,8 @@
|
|
|
833
833
|
{
|
|
834
834
|
"nombre": "orquestacion-async",
|
|
835
835
|
"path": "habilidades/orquestacion-async/SKILL.md",
|
|
836
|
-
"hash": "sha256:
|
|
837
|
-
"bytes":
|
|
836
|
+
"hash": "sha256:9f6b02dcf8a477e771d87fd81546d34f5929e9f602dbf6ff8a27a136a94cd10e",
|
|
837
|
+
"bytes": 14653,
|
|
838
838
|
"version": "\"1.1.0\""
|
|
839
839
|
},
|
|
840
840
|
{
|
|
@@ -847,8 +847,8 @@
|
|
|
847
847
|
{
|
|
848
848
|
"nombre": "patrones-python",
|
|
849
849
|
"path": "habilidades/patrones-python/SKILL.md",
|
|
850
|
-
"hash": "sha256:
|
|
851
|
-
"bytes":
|
|
850
|
+
"hash": "sha256:78d455c54a2a69dc425fc0646a4b5fa87b2951b2a4303283a04fe6dac743cc45",
|
|
851
|
+
"bytes": 14015,
|
|
852
852
|
"version": "\"1.4.2\""
|
|
853
853
|
},
|
|
854
854
|
{
|
|
@@ -889,15 +889,15 @@
|
|
|
889
889
|
{
|
|
890
890
|
"nombre": "planear-fase",
|
|
891
891
|
"path": "habilidades/planear-fase/SKILL.md",
|
|
892
|
-
"hash": "sha256:
|
|
893
|
-
"bytes":
|
|
892
|
+
"hash": "sha256:ce2633d320bb5302b7d49143971bae8b9b0d93c9bfee677c77bc5d0320e211a2",
|
|
893
|
+
"bytes": 15396,
|
|
894
894
|
"version": "\"1.3.1\""
|
|
895
895
|
},
|
|
896
896
|
{
|
|
897
897
|
"nombre": "postgresql-experto",
|
|
898
898
|
"path": "habilidades/postgresql-experto/SKILL.md",
|
|
899
|
-
"hash": "sha256:
|
|
900
|
-
"bytes":
|
|
899
|
+
"hash": "sha256:3f0ccd767a4b4407aa8054d1987d2fe51eff84ebd92ae42cb1d672b1efbfce21",
|
|
900
|
+
"bytes": 15263,
|
|
901
901
|
"version": "\"1.2.0\""
|
|
902
902
|
},
|
|
903
903
|
{
|
|
@@ -910,8 +910,8 @@
|
|
|
910
910
|
{
|
|
911
911
|
"nombre": "prevencion-sobreingenieria",
|
|
912
912
|
"path": "habilidades/prevencion-sobreingenieria/SKILL.md",
|
|
913
|
-
"hash": "sha256:
|
|
914
|
-
"bytes":
|
|
913
|
+
"hash": "sha256:e264bcd56af27ca0f3f2ecc8c3430411c741bc15922d6e6984844f3a8d577e56",
|
|
914
|
+
"bytes": 16514,
|
|
915
915
|
"version": "\"1.2.0\""
|
|
916
916
|
},
|
|
917
917
|
{
|
|
@@ -994,8 +994,8 @@
|
|
|
994
994
|
{
|
|
995
995
|
"nombre": "protocolo-revision-swl",
|
|
996
996
|
"path": "habilidades/protocolo-revision-swl/SKILL.md",
|
|
997
|
-
"hash": "sha256:
|
|
998
|
-
"bytes":
|
|
997
|
+
"hash": "sha256:3c46619e38bc2e2435245a71f367ecd63846b18d7902cfae762217e6bdb366c7",
|
|
998
|
+
"bytes": 15549,
|
|
999
999
|
"version": "\"1.0.1\""
|
|
1000
1000
|
},
|
|
1001
1001
|
{
|
|
@@ -1015,8 +1015,8 @@
|
|
|
1015
1015
|
{
|
|
1016
1016
|
"nombre": "react-experto",
|
|
1017
1017
|
"path": "habilidades/react-experto/SKILL.md",
|
|
1018
|
-
"hash": "sha256:
|
|
1019
|
-
"bytes":
|
|
1018
|
+
"hash": "sha256:de2aa1a51c93411e3767f2a71de98366fa3ffa51218385b03ad837d6f4b3a034",
|
|
1019
|
+
"bytes": 13430,
|
|
1020
1020
|
"version": "\"1.2.0\""
|
|
1021
1021
|
},
|
|
1022
1022
|
{
|
|
@@ -1043,8 +1043,8 @@
|
|
|
1043
1043
|
{
|
|
1044
1044
|
"nombre": "release-semver",
|
|
1045
1045
|
"path": "habilidades/release-semver/SKILL.md",
|
|
1046
|
-
"hash": "sha256:
|
|
1047
|
-
"bytes":
|
|
1046
|
+
"hash": "sha256:79a72f422b2df39b7a81c19035b3a0b147ab1e58369c73b28085114eafa575a0",
|
|
1047
|
+
"bytes": 15708,
|
|
1048
1048
|
"version": "\"1.0.2\""
|
|
1049
1049
|
},
|
|
1050
1050
|
{
|
|
@@ -1134,9 +1134,9 @@
|
|
|
1134
1134
|
{
|
|
1135
1135
|
"nombre": "swl-claudemd",
|
|
1136
1136
|
"path": "habilidades/swl-claudemd/SKILL.md",
|
|
1137
|
-
"hash": "sha256:
|
|
1138
|
-
"bytes":
|
|
1139
|
-
"version": "\"1.
|
|
1137
|
+
"hash": "sha256:97f678f4471b6246c181c074fc64275cbef394109402b80aef8cc56bef3ba0b5",
|
|
1138
|
+
"bytes": 15647,
|
|
1139
|
+
"version": "\"1.3.0\""
|
|
1140
1140
|
},
|
|
1141
1141
|
{
|
|
1142
1142
|
"nombre": "swl-dashboard",
|
|
@@ -1169,8 +1169,8 @@
|
|
|
1169
1169
|
{
|
|
1170
1170
|
"nombre": "tdd-workflow",
|
|
1171
1171
|
"path": "habilidades/tdd-workflow/SKILL.md",
|
|
1172
|
-
"hash": "sha256:
|
|
1173
|
-
"bytes":
|
|
1172
|
+
"hash": "sha256:98e4b3e79336dde99f46c9958b177b7e926c2ec079b09fd38b00e5433532dddd",
|
|
1173
|
+
"bytes": 33360,
|
|
1174
1174
|
"version": "\"1.2.1\""
|
|
1175
1175
|
},
|
|
1176
1176
|
{
|
|
@@ -1183,8 +1183,8 @@
|
|
|
1183
1183
|
{
|
|
1184
1184
|
"nombre": "testing-python",
|
|
1185
1185
|
"path": "habilidades/testing-python/SKILL.md",
|
|
1186
|
-
"hash": "sha256:
|
|
1187
|
-
"bytes":
|
|
1186
|
+
"hash": "sha256:d3b50bc36972691b7c50409ff0f756011b8c02db9aaa8919ed312581ab800a24",
|
|
1187
|
+
"bytes": 17152,
|
|
1188
1188
|
"version": "\"1.2.1\""
|
|
1189
1189
|
},
|
|
1190
1190
|
{
|
|
@@ -1246,8 +1246,8 @@
|
|
|
1246
1246
|
{
|
|
1247
1247
|
"nombre": "verificar-trabajo",
|
|
1248
1248
|
"path": "habilidades/verificar-trabajo/SKILL.md",
|
|
1249
|
-
"hash": "sha256:
|
|
1250
|
-
"bytes":
|
|
1249
|
+
"hash": "sha256:2b8042f32e455217b5998d3f5856f062391cb6ee0ea88897a22767c76e69de38",
|
|
1250
|
+
"bytes": 20811,
|
|
1251
1251
|
"version": "\"1.2.1\""
|
|
1252
1252
|
},
|
|
1253
1253
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saulwade/swl-ses",
|
|
3
|
-
"version": "2.1
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot con 60 agentes, 182 habilidades, 44 comandos, 77 reglas y 48 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.1
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "Sistema de ingenieria de software auto-evolutivo multi-runtime polyglot. 60 agentes, 182 habilidades, 44 comandos, 77 reglas y 48 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",
|
|
@@ -86,6 +86,28 @@ function ubicarClaudeMd(dir = process.cwd()) {
|
|
|
86
86
|
return null;
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
// Detecta @-includes con path RELATIVO al CLAUDE.md cuyo destino no existe.
|
|
90
|
+
// Solo evalúa rutas relativas al proyecto — omite `~/` y rutas absolutas
|
|
91
|
+
// porque su existencia depende del entorno de instalación, no del repo.
|
|
92
|
+
// Causa raíz del bug downstream: plantillas que emitían `@reglas/...` cuando
|
|
93
|
+
// las reglas se instalan en `.claude/rules/` (no en `reglas/` del proyecto).
|
|
94
|
+
function detectarReferenciasRotas(contenido, rutaClaudeMd) {
|
|
95
|
+
const baseDir = path.dirname(rutaClaudeMd);
|
|
96
|
+
// Primer char [A-Za-z0-9_.] excluye `~` y `/` → solo captura rutas relativas.
|
|
97
|
+
const re = /@([A-Za-z0-9_.][A-Za-z0-9_./\-]*\.md)\b/g;
|
|
98
|
+
const rotas = [];
|
|
99
|
+
const vistos = new Set();
|
|
100
|
+
let m;
|
|
101
|
+
while ((m = re.exec(contenido)) !== null) {
|
|
102
|
+
const ref = m[1];
|
|
103
|
+
if (vistos.has(ref)) continue;
|
|
104
|
+
vistos.add(ref);
|
|
105
|
+
if (ref.startsWith('~') || path.isAbsolute(ref)) continue;
|
|
106
|
+
if (!fs.existsSync(path.resolve(baseDir, ref))) rotas.push(ref);
|
|
107
|
+
}
|
|
108
|
+
return rotas;
|
|
109
|
+
}
|
|
110
|
+
|
|
89
111
|
function auditar(rutaClaudeMd) {
|
|
90
112
|
if (!rutaClaudeMd || !fs.existsSync(rutaClaudeMd)) {
|
|
91
113
|
return {
|
|
@@ -150,6 +172,17 @@ function auditar(rutaClaudeMd) {
|
|
|
150
172
|
}
|
|
151
173
|
}
|
|
152
174
|
|
|
175
|
+
// 4b. @references rotos: @-includes con path relativo cuyo destino no existe.
|
|
176
|
+
const referenciasRotas = detectarReferenciasRotas(contenido, rutaClaudeMd);
|
|
177
|
+
for (const ref of referenciasRotas) {
|
|
178
|
+
hallazgos.push({
|
|
179
|
+
severidad: 'WARN',
|
|
180
|
+
regla: 'at-reference-rota',
|
|
181
|
+
mensaje: `@-reference rota: \`@${ref}\` no existe (resuelto relativo al CLAUDE.md)`,
|
|
182
|
+
sugerencia: 'Corregir la ruta o, si es una regla global auto-cargada (p. ej. usar-sistema-swl), eliminar el @-include y dejar solo mención de texto',
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
|
|
153
186
|
// 5. Placeholders sin reemplazar
|
|
154
187
|
const matches = [...contenido.matchAll(PLACEHOLDERS)];
|
|
155
188
|
if (matches.length > 0) {
|
|
@@ -237,6 +270,7 @@ function auditar(rutaClaudeMd) {
|
|
|
237
270
|
secciones_presentes: SECCIONES_CANONICAS.filter(s => s.regex.test(contenido)).map(s => s.nombre),
|
|
238
271
|
secciones_ausentes: seccionesAusentes.map(s => s.nombre),
|
|
239
272
|
tiene_at_references: /@[a-zA-Z][a-zA-Z0-9_\-./]+\.md/.test(contenido),
|
|
273
|
+
at_references_rotas: referenciasRotas,
|
|
240
274
|
tiene_referencia_karpathy: tieneReferenciaKarpathy,
|
|
241
275
|
es_project_level: esProjectLevel,
|
|
242
276
|
duplicaciones_reglas_globales: {
|
|
@@ -375,6 +409,9 @@ function imprimirReporte(resultado) {
|
|
|
375
409
|
console.log(` - Secciones ausentes: ${m.secciones_ausentes.join(', ')}`);
|
|
376
410
|
}
|
|
377
411
|
console.log(` - @references: ${m.tiene_at_references ? 'sí' : 'no'}`);
|
|
412
|
+
if (m.at_references_rotas && m.at_references_rotas.length > 0) {
|
|
413
|
+
console.log(` - @references rotas: ${m.at_references_rotas.length} (${m.at_references_rotas.join(', ')})`);
|
|
414
|
+
}
|
|
378
415
|
if (m.es_project_level) {
|
|
379
416
|
console.log(` - Referencia Karpathy: ${m.tiene_referencia_karpathy ? 'sí' : 'no'}`);
|
|
380
417
|
}
|
|
@@ -436,6 +473,7 @@ module.exports = {
|
|
|
436
473
|
ubicarClaudeMd,
|
|
437
474
|
detectarBulletsGigantes,
|
|
438
475
|
detectarReferenciaKarpathy,
|
|
476
|
+
detectarReferenciasRotas,
|
|
439
477
|
esRutaUserLevel,
|
|
440
478
|
main,
|
|
441
479
|
MAX_LINES,
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Subcomando `swl-ses aprobar-plan --fase=N` — parte determinista del gate G1.
|
|
5
|
+
*
|
|
6
|
+
* Reemplaza los `node -e "require('./scripts/lib/plan-lock')"` y
|
|
7
|
+
* `require('./hooks/lib/atomic-write')` que el slash command /swl:aprobar-plan
|
|
8
|
+
* tenía inline — rutas relativas al proyecto que se rompían en instalaciones
|
|
9
|
+
* downstream (ver docs/invocacion-cli-cross-scope.md).
|
|
10
|
+
*
|
|
11
|
+
* Hace: firma el PLAN (SHA256 → .planning/locks/0N-PLAN.md.lock), lo verifica,
|
|
12
|
+
* y escribe .planning/locks/fase-activa.json (gate G0). El HITL (confirmación,
|
|
13
|
+
* transición de frontmatter, REQ×T) lo sigue manejando el prompt del comando.
|
|
14
|
+
*
|
|
15
|
+
* Uso: swl-ses aprobar-plan --fase=N [--plan=<ruta>] [--aprobado-por="texto"]
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
const path = require('node:path');
|
|
19
|
+
const { firmarPlan, verificarPlan } = require('../lib/plan-lock');
|
|
20
|
+
const { atomicWriteJSON } = require('../../hooks/lib/atomic-write');
|
|
21
|
+
const { resolverPlanPath } = require('../lib/resolver-plan-fase');
|
|
22
|
+
|
|
23
|
+
function aprobarPlan(opciones = {}) {
|
|
24
|
+
opciones = opciones || {};
|
|
25
|
+
const planPath = resolverPlanPath(opciones);
|
|
26
|
+
if (!planPath) {
|
|
27
|
+
console.error('Uso: swl-ses aprobar-plan --fase=N [--plan=<ruta>] [--aprobado-por="texto"]');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const firmadoPor = opciones['aprobado-por'] || opciones.aprobado_por || 'swl:aprobar-plan';
|
|
32
|
+
const firma = firmarPlan(planPath, { firmadoPor });
|
|
33
|
+
if (!firma.ok) {
|
|
34
|
+
console.error(`[aprobar-plan] no se pudo firmar el PLAN: ${firma.motivo}`);
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const ver = verificarPlan(planPath);
|
|
39
|
+
const numero =
|
|
40
|
+
opciones.fase != null && opciones.fase !== true ? Number(opciones.fase) : null;
|
|
41
|
+
const locksDir = path.dirname(firma.lockPath);
|
|
42
|
+
const faseActivaPath = path.join(locksDir, 'fase-activa.json');
|
|
43
|
+
|
|
44
|
+
atomicWriteJSON(faseActivaPath, {
|
|
45
|
+
numero,
|
|
46
|
+
planPath,
|
|
47
|
+
sha256: firma.sha256,
|
|
48
|
+
aprobadoEn: new Date().toISOString(),
|
|
49
|
+
aprobadoPor: opciones['aprobado-por'] || opciones.aprobado_por || 'usuario via /swl:aprobar-plan',
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
console.log(
|
|
53
|
+
JSON.stringify(
|
|
54
|
+
{
|
|
55
|
+
ok: true,
|
|
56
|
+
planPath,
|
|
57
|
+
sha256: firma.sha256,
|
|
58
|
+
lockPath: firma.lockPath,
|
|
59
|
+
modo: ver.modo,
|
|
60
|
+
faseActiva: faseActivaPath,
|
|
61
|
+
},
|
|
62
|
+
null,
|
|
63
|
+
2
|
|
64
|
+
)
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
module.exports = aprobarPlan;
|
|
69
|
+
|
|
70
|
+
if (require.main === module) {
|
|
71
|
+
const { parsearOpciones } = require('../lib/parsear-opciones');
|
|
72
|
+
aprobarPlan(parsearOpciones(process.argv.slice(2)));
|
|
73
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses briefing` — recolecta las señales baratas del briefing
|
|
5
|
+
* (adr-vencido, deuda-trigger, nudges-pendientes, gate-calibracion,
|
|
6
|
+
* continue-here) y las imprime sin tope. Reemplaza el inline
|
|
7
|
+
* `require('./hooks/lib/briefing.js')` relativo al proyecto (roto downstream;
|
|
8
|
+
* ver docs/invocacion-cli-cross-scope.md).
|
|
9
|
+
*
|
|
10
|
+
* Uso: swl-ses briefing
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
const b = require('../../hooks/lib/briefing.js');
|
|
14
|
+
|
|
15
|
+
function briefingCli() {
|
|
16
|
+
const items = b.recolectarTodo(process.cwd(), new Date());
|
|
17
|
+
for (const it of items) {
|
|
18
|
+
console.log('— [' + it.categoria + '] ' + it.titulo + ' → ' + it.accion);
|
|
19
|
+
}
|
|
20
|
+
if (items.length === 0) console.log('(sin señales baratas)');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
module.exports = briefingCli;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses ciclo-evolucion` — regenera las métricas de evolución
|
|
5
|
+
* (.planning/evolution/metricas.json) ejecutando la sub-etapa Stop del ciclo.
|
|
6
|
+
* Reemplaza `echo '{}' | node hooks/ciclo-evolucion.js` relativo al proyecto
|
|
7
|
+
* (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
8
|
+
*
|
|
9
|
+
* Uso: swl-ses ciclo-evolucion
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const cicloEvolucion = require('../../hooks/lib/ciclo-evolucion');
|
|
13
|
+
|
|
14
|
+
function cicloEvolucionCli() {
|
|
15
|
+
try {
|
|
16
|
+
cicloEvolucion.ejecutarStop('{}');
|
|
17
|
+
console.log('[ciclo-evolucion] métricas de evolución regeneradas');
|
|
18
|
+
} catch (e) {
|
|
19
|
+
// A diferencia del hook (que nunca bloquea el harness), el CLI sí debe
|
|
20
|
+
// distinguir fallo de éxito para el caller: stderr + exit code != 0.
|
|
21
|
+
console.error('[ciclo-evolucion] no se pudo regenerar: ' + e.message);
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = cicloEvolucionCli;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses configurar-ci <op>` — gestiona los workflows CI/CD de SWL
|
|
5
|
+
* en el proyecto actual. Reemplaza los inline `require('./scripts/lib/configurar-ci')`
|
|
6
|
+
* relativos al proyecto (rotos downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
7
|
+
*
|
|
8
|
+
* Ops (todas imprimen el resultado como JSON para que el comando lo inspeccione):
|
|
9
|
+
* init [--no-security] [--no-ci] [--with-release-please] [--dry-run] [--force]
|
|
10
|
+
* status (default)
|
|
11
|
+
* uninstall [--confirmar]
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
const ci = require('../lib/configurar-ci');
|
|
15
|
+
|
|
16
|
+
function configurarCi(opciones = {}) {
|
|
17
|
+
const op = (opciones._args && opciones._args[0]) || opciones.op || 'status';
|
|
18
|
+
|
|
19
|
+
if (op === 'init') {
|
|
20
|
+
const r = ci.init({
|
|
21
|
+
withSecurity: !opciones['no-security'],
|
|
22
|
+
withCi: !opciones['no-ci'],
|
|
23
|
+
withReleasePlease: !!opciones['with-release-please'],
|
|
24
|
+
dryRun: !!opciones['dry-run'],
|
|
25
|
+
force: !!opciones.force,
|
|
26
|
+
});
|
|
27
|
+
console.log(JSON.stringify(r, null, 2));
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (op === 'uninstall') {
|
|
32
|
+
const r = ci.uninstall({ confirmar: !!opciones.confirmar });
|
|
33
|
+
console.log(JSON.stringify(r, null, 2));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
console.log(JSON.stringify(ci.status(), null, 2));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
module.exports = configurarCi;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses derivar-feature-list` — genera .planning/feature-list.json
|
|
5
|
+
* desde HOJA-RUTA.md. Reemplaza `node scripts/derivar-feature-list.js` relativo
|
|
6
|
+
* al proyecto (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
7
|
+
*
|
|
8
|
+
* Uso: swl-ses derivar-feature-list [--check] (--check: exit 2 si hay drift)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const { main } = require('../derivar-feature-list.js');
|
|
12
|
+
|
|
13
|
+
function derivarFeatureList(opciones = {}) {
|
|
14
|
+
const args = ['node', 'derivar-feature-list'];
|
|
15
|
+
if (opciones && opciones.check) args.push('--check');
|
|
16
|
+
const argvOriginal = process.argv;
|
|
17
|
+
process.argv = args;
|
|
18
|
+
try {
|
|
19
|
+
return main();
|
|
20
|
+
} finally {
|
|
21
|
+
process.argv = argvOriginal;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = derivarFeatureList;
|