@saulwade/swl-ses 2.2.0 → 2.2.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 +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-mcp-server.js +1 -1
- package/comandos/swl/adoptar-proyecto.md +253 -258
- package/comandos/swl/aprender.md +823 -828
- package/comandos/swl/claudemd.md +234 -239
- package/comandos/swl/ejecutar-fase.md +0 -5
- package/comandos/swl/nuevo-proyecto.md +200 -205
- package/comandos/swl/release.md +19 -5
- package/comandos/swl/revisar-impacto.md +0 -5
- 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 +0 -5
- 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/etapa-perfil-usuario.js +1 -1
- package/hooks/lib/evolution-tracker.js +191 -35
- package/hooks/resumen-sesion.js +4 -4
- package/llms.txt +1 -1
- package/manifiestos/canonical-hashes.json +1310 -0
- package/manifiestos/modulos.json +3 -0
- package/manifiestos/skills-lock.json +70 -70
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/doctor.js +13 -0
- package/scripts/generar-canonical-hashes.js +147 -0
- package/scripts/instalador.js +140 -54
- package/scripts/lib/audit-evolved.js +76 -0
- package/scripts/lib/canonical-hash.js +94 -0
- package/scripts/lib/evolved-fuente.js +138 -0
- package/scripts/lib/manifiestos.js +1 -1
- package/scripts/publicar.js +42 -5
- package/scripts/remediar-evolved-instaladas.js +242 -0
- package/scripts/validar.js +14 -0
- package/scripts/vendor/claude-usage/__pycache__/scanner.cpython-314.pyc +0 -0
- package/scripts/verificar-evolucion.js +36 -0
- package/scripts/verificar-release.js +33 -0
- 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-15T05:12:07.891Z",
|
|
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,8 +1134,8 @@
|
|
|
1134
1134
|
{
|
|
1135
1135
|
"nombre": "swl-claudemd",
|
|
1136
1136
|
"path": "habilidades/swl-claudemd/SKILL.md",
|
|
1137
|
-
"hash": "sha256:
|
|
1138
|
-
"bytes":
|
|
1137
|
+
"hash": "sha256:97f678f4471b6246c181c074fc64275cbef394109402b80aef8cc56bef3ba0b5",
|
|
1138
|
+
"bytes": 15647,
|
|
1139
1139
|
"version": "\"1.3.0\""
|
|
1140
1140
|
},
|
|
1141
1141
|
{
|
|
@@ -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.2.
|
|
3
|
+
"version": "2.2.3",
|
|
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.2.
|
|
3
|
+
"version": "2.2.3",
|
|
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",
|
package/scripts/doctor.js
CHANGED
|
@@ -159,6 +159,15 @@ async function doctor(opciones = {}) {
|
|
|
159
159
|
advertencias++;
|
|
160
160
|
}
|
|
161
161
|
|
|
162
|
+
// C-2: doctor DIAGNOSTICA; no siembra dirs de proyecto (.planning/_userland)
|
|
163
|
+
// en un cwd que no es un proyecto swl. Correr `doctor` desde un directorio
|
|
164
|
+
// cualquiera no debe generar clutter. Marcadores de proyecto: .planning/ o
|
|
165
|
+
// _userland/ ya presentes, o un install-state de scope proyecto.
|
|
166
|
+
const esProyectoSwl =
|
|
167
|
+
fs.existsSync(path.join(cwd, '.planning')) ||
|
|
168
|
+
fs.existsSync(path.join(cwd, '_userland')) ||
|
|
169
|
+
fs.existsSync(path.join(cwd, '.swl-install-state.json'));
|
|
170
|
+
|
|
162
171
|
// 3. Verificar .planning/
|
|
163
172
|
const planningDir = path.join(cwd, '.planning');
|
|
164
173
|
if (fs.existsSync(planningDir)) {
|
|
@@ -201,6 +210,8 @@ async function doctor(opciones = {}) {
|
|
|
201
210
|
},
|
|
202
211
|
});
|
|
203
212
|
}
|
|
213
|
+
} else if (!esProyectoSwl) {
|
|
214
|
+
console.log(formatearPaso('.planning/', 'No aplica — el directorio actual no es un proyecto swl (usa `swl-ses init` para inicializar)'));
|
|
204
215
|
} else {
|
|
205
216
|
console.log(formatearAdvertencia('.planning/', 'No inicializado'));
|
|
206
217
|
advertencias++;
|
|
@@ -230,6 +241,8 @@ async function doctor(opciones = {}) {
|
|
|
230
241
|
if (agentesUser > 0 || habsUser > 0) {
|
|
231
242
|
console.log(formatearPaso('Componentes usuario', `${agentesUser} agentes, ${habsUser} habilidades`));
|
|
232
243
|
}
|
|
244
|
+
} else if (!esProyectoSwl) {
|
|
245
|
+
console.log(formatearPaso('_userland/', 'No aplica — el directorio actual no es un proyecto swl'));
|
|
233
246
|
} else {
|
|
234
247
|
console.log(formatearAdvertencia('_userland/', 'No encontrado'));
|
|
235
248
|
advertencias++;
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* generar-canonical-hashes — Genera/actualiza `manifiestos/canonical-hashes.json`.
|
|
6
|
+
*
|
|
7
|
+
* Recorre los componentes versionables del fuente (agentes, skills, comandos,
|
|
8
|
+
* reglas) y registra el hash del cuerpo canónico (sin campos `evolved-*`,
|
|
9
|
+
* CRLF→LF) bajo la versión actual del paquete:
|
|
10
|
+
*
|
|
11
|
+
* { "<version>": { "<rutaRel>": "<sha256>", ... }, ... }
|
|
12
|
+
*
|
|
13
|
+
* El manifiesto es la baseline que el discriminador A/B (Fase 16) usa para
|
|
14
|
+
* decidir si una copia instalada `evolved:true` fue tocada por el usuario
|
|
15
|
+
* (población A → merge) o es shipped-evolved intacto (población B → actualizar).
|
|
16
|
+
*
|
|
17
|
+
* Modelo de amenaza (auditoría nemesis Fase 16, hallazgo BAJO): el manifiesto
|
|
18
|
+
* NO lleva firma criptográfica propia. No es un gap incremental: viaja DENTRO
|
|
19
|
+
* del paquete npm publicado, el mismo límite de confianza que `evolution-tracker.js`
|
|
20
|
+
* y todo el código. Quien pueda alterar este JSON ya puede alterar el código que
|
|
21
|
+
* lo consume — firmar el manifiesto sin firmar el paquete entero no añade defensa.
|
|
22
|
+
* La integridad la provee la cadena de publicación de npm (provenance/SBOM del
|
|
23
|
+
* release). NO se añade firma propia (sería seguridad teatral). Reabrir SOLO si
|
|
24
|
+
* el manifiesto se expone como archivo editable fuera del paquete (p. ej. P2P).
|
|
25
|
+
*
|
|
26
|
+
* Idempotente: dos corridas sin cambios producen el mismo archivo (keys
|
|
27
|
+
* ordenadas). Preserva entradas de versiones anteriores (histórico necesario
|
|
28
|
+
* para discriminar contra clientes que evolucionaron desde una versión vieja).
|
|
29
|
+
*
|
|
30
|
+
* Uso: node scripts/generar-canonical-hashes.js [--check]
|
|
31
|
+
* --check No escribe; exit 2 si el manifiesto está desactualizado (uso CI).
|
|
32
|
+
*
|
|
33
|
+
* @module scripts/generar-canonical-hashes
|
|
34
|
+
*/
|
|
35
|
+
|
|
36
|
+
const fs = require('fs');
|
|
37
|
+
const path = require('path');
|
|
38
|
+
|
|
39
|
+
const { canonicalHash } = require('./lib/canonical-hash');
|
|
40
|
+
|
|
41
|
+
const RAIZ = path.resolve(__dirname, '..');
|
|
42
|
+
const MANIFIESTO = path.join(RAIZ, 'manifiestos', 'canonical-hashes.json');
|
|
43
|
+
|
|
44
|
+
let atomicWriteSync;
|
|
45
|
+
try {
|
|
46
|
+
({ atomicWriteSync } = require('../hooks/lib/atomic-write'));
|
|
47
|
+
} catch {
|
|
48
|
+
atomicWriteSync = (p, c, e) => fs.writeFileSync(p, c, e);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Recolecta los componentes versionables como rutas relativas a la raíz. */
|
|
52
|
+
function recolectarComponentes() {
|
|
53
|
+
const rutas = [];
|
|
54
|
+
|
|
55
|
+
const listarMd = (dirRel) => {
|
|
56
|
+
const dir = path.join(RAIZ, dirRel);
|
|
57
|
+
if (!fs.existsSync(dir)) return;
|
|
58
|
+
for (const entry of fs.readdirSync(dir)) {
|
|
59
|
+
if (entry.endsWith('.md')) rutas.push(path.posix.join(dirRel, entry));
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Agentes, comandos, reglas: archivos .md planos.
|
|
64
|
+
listarMd('agentes');
|
|
65
|
+
listarMd('comandos/swl');
|
|
66
|
+
listarMd('reglas');
|
|
67
|
+
|
|
68
|
+
// Habilidades: cada skill es un directorio con SKILL.md.
|
|
69
|
+
const habDir = path.join(RAIZ, 'habilidades');
|
|
70
|
+
if (fs.existsSync(habDir)) {
|
|
71
|
+
for (const entry of fs.readdirSync(habDir)) {
|
|
72
|
+
const skillMd = path.join(habDir, entry, 'SKILL.md');
|
|
73
|
+
if (fs.existsSync(skillMd)) rutas.push(path.posix.join('habilidades', entry, 'SKILL.md'));
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return rutas.sort();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Construye el mapa { rutaRel: hash } de la versión actual del fuente. */
|
|
81
|
+
function hashesActuales() {
|
|
82
|
+
const out = {};
|
|
83
|
+
for (const rel of recolectarComponentes()) {
|
|
84
|
+
const abs = path.join(RAIZ, rel);
|
|
85
|
+
out[rel] = canonicalHash(fs.readFileSync(abs, 'utf8'));
|
|
86
|
+
}
|
|
87
|
+
return out;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Ordena recursivamente las keys de un objeto plano de 2 niveles. */
|
|
91
|
+
function ordenar(manifiesto) {
|
|
92
|
+
const out = {};
|
|
93
|
+
for (const version of Object.keys(manifiesto).sort()) {
|
|
94
|
+
const porVersion = manifiesto[version];
|
|
95
|
+
out[version] = {};
|
|
96
|
+
for (const k of Object.keys(porVersion).sort()) out[version][k] = porVersion[k];
|
|
97
|
+
}
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function cargarManifiesto() {
|
|
102
|
+
if (!fs.existsSync(MANIFIESTO)) return {};
|
|
103
|
+
try {
|
|
104
|
+
return JSON.parse(fs.readFileSync(MANIFIESTO, 'utf8'));
|
|
105
|
+
} catch {
|
|
106
|
+
return {};
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
function generar({ check = false } = {}) {
|
|
111
|
+
const version = require(path.join(RAIZ, 'package.json')).version;
|
|
112
|
+
const manifiesto = cargarManifiesto();
|
|
113
|
+
manifiesto[version] = hashesActuales();
|
|
114
|
+
const ordenado = ordenar(manifiesto);
|
|
115
|
+
const serializado = JSON.stringify(ordenado, null, 2) + '\n';
|
|
116
|
+
|
|
117
|
+
const previo = fs.existsSync(MANIFIESTO) ? fs.readFileSync(MANIFIESTO, 'utf8') : '';
|
|
118
|
+
// Comparación EOL-tolerante: git puede normalizar el .json a CRLF en checkout
|
|
119
|
+
// (Windows). El contenido semántico es idéntico; comparar normalizado evita
|
|
120
|
+
// un falso "desactualizado" en el gate `--check` cross-OS.
|
|
121
|
+
const norm = (s) => s.replace(/\r\n/g, '\n');
|
|
122
|
+
const cambio = norm(previo) !== norm(serializado);
|
|
123
|
+
|
|
124
|
+
if (check) {
|
|
125
|
+
if (cambio) {
|
|
126
|
+
console.error(`[canonical-hashes] DESACTUALIZADO para v${version} — ejecuta: node scripts/generar-canonical-hashes.js`);
|
|
127
|
+
process.exitCode = 2;
|
|
128
|
+
} else {
|
|
129
|
+
console.log(`[canonical-hashes] OK — v${version} al día (${Object.keys(ordenado[version]).length} componentes)`);
|
|
130
|
+
}
|
|
131
|
+
return ordenado;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
if (cambio) {
|
|
135
|
+
atomicWriteSync(MANIFIESTO, serializado, 'utf8');
|
|
136
|
+
console.log(`[canonical-hashes] escrito v${version} (${Object.keys(ordenado[version]).length} componentes) → ${path.relative(RAIZ, MANIFIESTO)}`);
|
|
137
|
+
} else {
|
|
138
|
+
console.log(`[canonical-hashes] sin cambios para v${version}`);
|
|
139
|
+
}
|
|
140
|
+
return ordenado;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
if (require.main === module) {
|
|
144
|
+
generar({ check: process.argv.includes('--check') });
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
module.exports = { generar, hashesActuales, recolectarComponentes, MANIFIESTO };
|