@saulwade/swl-ses 1.3.8 → 1.4.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.
Files changed (148) hide show
  1. package/CLAUDE.md +15 -6
  2. package/README.md +15 -14
  3. package/agentes/nemesis-auditor-swl.md +161 -0
  4. package/bin/swl-mcp-server.js +187 -187
  5. package/bin/swl-webhook-server.js +198 -0
  6. package/comandos/swl/.evolved.json +22 -22
  7. package/comandos/swl/adoptar-proyecto.md +21 -1
  8. package/comandos/swl/claudemd.md +14 -1
  9. package/comandos/swl/contribuir.md +233 -233
  10. package/comandos/swl/exportar-vault.md +108 -0
  11. package/comandos/swl/nemesis.md +122 -0
  12. package/comandos/swl/nuevo-proyecto.md +24 -2
  13. package/comandos/swl/salud.md +34 -0
  14. package/comandos/swl/verificar.md +45 -0
  15. package/gateway/adapters/base.js +109 -0
  16. package/gateway/adapters/discord.js +167 -0
  17. package/gateway/adapters/email.js +221 -0
  18. package/gateway/adapters/slack.js +192 -0
  19. package/gateway/adapters/telegram.js +183 -0
  20. package/gateway/adapters/webhook.js +113 -0
  21. package/gateway/adapters/whatsapp.js +214 -0
  22. package/gateway/agent-executor.js +322 -0
  23. package/gateway/command-relay.js +271 -0
  24. package/gateway/cron/jobs.js +263 -0
  25. package/gateway/cron/scheduler.js +322 -0
  26. package/gateway/cron/store.js +335 -0
  27. package/gateway/index.js +320 -0
  28. package/gateway/lib/event-channel.js +191 -0
  29. package/gateway/session.js +131 -0
  30. package/gateway/webhook-server.js +324 -0
  31. package/habilidades/backend-production-resilience/SKILL.md +288 -288
  32. package/habilidades/benchmark-memoria/SKILL.md +186 -186
  33. package/habilidades/build-errors-nextjs/SKILL.md +55 -1
  34. package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
  35. package/habilidades/doubt-driven-review/SKILL.md +171 -171
  36. package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
  37. package/habilidades/eval-framework/SKILL.md +212 -212
  38. package/habilidades/extractor-de-aprendizajes/SKILL.md +20 -10
  39. package/habilidades/feynman-auditor-swl/SKILL.md +123 -0
  40. package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -0
  41. package/habilidades/harness-claude-code/SKILL.md +299 -299
  42. package/habilidades/infra-github-actions/SKILL.md +166 -166
  43. package/habilidades/legacy-code-rescue/SKILL.md +267 -267
  44. package/habilidades/manejo-errores/.evolved.json +8 -8
  45. package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
  46. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -163
  47. package/habilidades/nextjs-testing/SKILL.md +89 -5
  48. package/habilidades/node-experto/SKILL.md +37 -1
  49. package/habilidades/patrones-python/SKILL.md +229 -229
  50. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
  51. package/habilidades/planear-fase/SKILL.md +319 -319
  52. package/habilidades/react-experto/SKILL.md +45 -4
  53. package/habilidades/release-semver/.evolved.json +8 -8
  54. package/habilidades/state-inconsistency-auditor-swl/SKILL.md +166 -0
  55. package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -0
  56. package/habilidades/tdd-workflow/SKILL.md +36 -4
  57. package/habilidades/testing-python/SKILL.md +340 -340
  58. package/habilidades/web-fetcher-routing/SKILL.md +75 -0
  59. package/hooks/claudemd-bloat-detector.js +161 -161
  60. package/hooks/inyeccion-contexto.js +8 -3
  61. package/hooks/lib/agent-routing.js +107 -107
  62. package/hooks/lib/auto-consolidator.js +335 -335
  63. package/hooks/lib/error-classifier.js +308 -308
  64. package/hooks/lib/merkle-audit.js +96 -96
  65. package/hooks/lib/provenance-tracker.js +191 -191
  66. package/hooks/lib/rate-limit-ip.js +177 -0
  67. package/hooks/lib/rate-limit-tracker.js +253 -253
  68. package/hooks/lib/resource-quota.js +122 -122
  69. package/hooks/lib/retry-jitter.js +165 -165
  70. package/hooks/lib/security-net.js +201 -0
  71. package/hooks/lib/skill-auditor.js +588 -588
  72. package/hooks/lib/sync-status.js +228 -228
  73. package/hooks/lib/taint-tracker.js +107 -107
  74. package/hooks/lib/text-similarity.js +241 -241
  75. package/hooks/lib/toon-compressor.js +245 -245
  76. package/hooks/lib/webhook-dedup.js +184 -0
  77. package/hooks/lib/webhook-verify.js +123 -0
  78. package/hooks/proteccion-rutas.js +120 -15
  79. package/hooks/registro-turnos.js +209 -209
  80. package/hooks/sugerir-regenerar-inventario.js +170 -170
  81. package/hooks/validar-formato-post-subagente.js +140 -140
  82. package/hooks/validar-memoria-hook.js +218 -218
  83. package/instintos/prompt-appendices.yaml +57 -57
  84. package/manifiestos/agent-output-schemas.json +57 -57
  85. package/manifiestos/modulos.json +31 -0
  86. package/manifiestos/skills-lock.json +1114 -1093
  87. package/package.json +6 -4
  88. package/plantillas/auditor-veto-template.md +105 -105
  89. package/plantillas/github-workflows/README.md +47 -47
  90. package/plantillas/github-workflows/release-please.yml +44 -44
  91. package/plantillas/github-workflows/swl-ci.yml +107 -107
  92. package/plantillas/github-workflows/swl-security.yml +51 -51
  93. package/plugin.json +2 -2
  94. package/reglas/analisis-previo-tareas-grandes.md +172 -172
  95. package/reglas/arreglar-al-detectar.md +147 -147
  96. package/reglas/fragmentos-compartidos.md +152 -152
  97. package/reglas/harness-claude-code.md +213 -213
  98. package/reglas/usar-context7.md +226 -226
  99. package/reglas/usar-sistema-swl.md +251 -0
  100. package/schemas/diary-entry.schema.json +80 -80
  101. package/scripts/audit-tools/audit-history.js +330 -0
  102. package/scripts/audit-tools/bundle-tracker.js +290 -0
  103. package/scripts/audit-tools/canary-monitor.js +352 -0
  104. package/scripts/audit-tools/code-profiler.js +605 -0
  105. package/scripts/audit-tools/dep-doctor.js +320 -0
  106. package/scripts/audit-tools/env-validator.js +206 -0
  107. package/scripts/audit-tools/lib/fs-walk.js +48 -0
  108. package/scripts/audit-tools/lib/output.js +23 -0
  109. package/scripts/audit-tools/migration-checker.js +392 -0
  110. package/scripts/audit-tools/pentest-scanner.js +1436 -0
  111. package/scripts/benchmark-memoria.js +167 -167
  112. package/scripts/comandos/skills.js +251 -2
  113. package/scripts/configurar-branch-protection.js +418 -418
  114. package/scripts/detectar-aprendizajes-duplicados.js +151 -151
  115. package/scripts/field-report.js +199 -199
  116. package/scripts/generar-checklists-consolidados.js +273 -273
  117. package/scripts/generar-inventario.js +420 -420
  118. package/scripts/generar-matriz-lenguajes.js +271 -271
  119. package/scripts/lib/artefactos-python.js +43 -43
  120. package/scripts/lib/benchmark-metrics.js +160 -160
  121. package/scripts/lib/budget-enforcer.js +252 -252
  122. package/scripts/lib/configurar-ci.js +380 -380
  123. package/scripts/lib/contadores-inventario.js +217 -217
  124. package/scripts/lib/detectar-stack-detallado.js +307 -307
  125. package/scripts/lib/diary-entry.js +234 -234
  126. package/scripts/lib/eval-metrics-store.js +218 -218
  127. package/scripts/lib/eval-quality.js +171 -171
  128. package/scripts/lib/eval-schemas.js +144 -144
  129. package/scripts/lib/eval-self-correct.js +106 -106
  130. package/scripts/lib/eval-validator.js +185 -185
  131. package/scripts/lib/jaccard-similarity.js +98 -98
  132. package/scripts/lib/longmemeval-runner.js +125 -125
  133. package/scripts/lib/npm-version.js +261 -261
  134. package/scripts/lib/paquetes-conocidos.js +50 -50
  135. package/scripts/lib/prompt-builder.js +264 -264
  136. package/scripts/lib/rrf-fusion.js +175 -175
  137. package/scripts/lib/scoring-instintos.js +277 -277
  138. package/scripts/lib/semantic-search.js +252 -252
  139. package/scripts/limpiar-artefactos-python.js +131 -131
  140. package/scripts/mcp-server/README.md +128 -128
  141. package/scripts/mcp-server/handlers.js +206 -206
  142. package/scripts/migrar-csv-a-array.js +168 -168
  143. package/scripts/migrar-fase-dominio.js +201 -201
  144. package/scripts/publicar.js +511 -511
  145. package/scripts/run-eval.js +141 -141
  146. package/scripts/validar-manifest.js +195 -195
  147. package/scripts/validar-userland-vacio.js +110 -110
  148. package/scripts/verificar-release.js +110 -0
@@ -1,160 +1,160 @@
1
- 'use strict';
2
-
3
- /**
4
- * benchmark-metrics.js — Métricas de retrieval para benchmark de memoria SWL.
5
- *
6
- * Patrón adoptado de `temp/agentmemory-main/benchmark/longmemeval-bench.ts`.
7
- * Funciones puras zero-deps. Adaptado a IDs SWL (aprendizaje, sesion,
8
- * instinto) en lugar de session_id de agentmemory.
9
- *
10
- * Métricas:
11
- * - recallAt(k): 1.0 si al menos un gold ID está en los top-k, sino 0.0
12
- * - precisionAt(k): proporción de top-k que son gold
13
- * - mrr: Mean Reciprocal Rank (1/rank del primer gold encontrado)
14
- * - ndcgAt(k): Normalized Discounted Cumulative Gain
15
- *
16
- * @module scripts/lib/benchmark-metrics
17
- */
18
-
19
- // ── helpers ───────────────────────────────────────────────────────────────────
20
-
21
- function asSet(arr) {
22
- return new Set(Array.isArray(arr) ? arr : []);
23
- }
24
-
25
- // ── métricas individuales ─────────────────────────────────────────────────────
26
-
27
- /**
28
- * Recall @ k: 1.0 si ALGÚN id gold está en los primeros k retrieved.
29
- *
30
- * @param {string[]} retrievedIds - IDs ordenados (mejor primero).
31
- * @param {string[]} goldIds - IDs correctos esperados.
32
- * @param {number} k
33
- * @returns {number} 0 o 1
34
- */
35
- function recallAt(retrievedIds, goldIds, k) {
36
- if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds)) return 0;
37
- const topK = new Set(retrievedIds.slice(0, k));
38
- return goldIds.some(g => topK.has(g)) ? 1.0 : 0.0;
39
- }
40
-
41
- /**
42
- * Precision @ k: proporción de los primeros k retrieved que son gold.
43
- *
44
- * @param {string[]} retrievedIds
45
- * @param {string[]} goldIds
46
- * @param {number} k
47
- * @returns {number} en [0, 1]
48
- */
49
- function precisionAt(retrievedIds, goldIds, k) {
50
- if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds) || k <= 0) return 0;
51
- const goldSet = asSet(goldIds);
52
- const topK = retrievedIds.slice(0, k);
53
- if (topK.length === 0) return 0;
54
- const hits = topK.filter(id => goldSet.has(id)).length;
55
- return hits / topK.length;
56
- }
57
-
58
- /**
59
- * Mean Reciprocal Rank: 1/rank del primer gold encontrado, o 0 si ninguno.
60
- *
61
- * @param {string[]} retrievedIds
62
- * @param {string[]} goldIds
63
- * @returns {number} en [0, 1]
64
- */
65
- function mrr(retrievedIds, goldIds) {
66
- if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds)) return 0;
67
- const goldSet = asSet(goldIds);
68
- for (let i = 0; i < retrievedIds.length; i++) {
69
- if (goldSet.has(retrievedIds[i])) {
70
- return 1 / (i + 1);
71
- }
72
- }
73
- return 0;
74
- }
75
-
76
- function dcg(relevancias, k) {
77
- let suma = 0;
78
- for (let i = 0; i < Math.min(k, relevancias.length); i++) {
79
- suma += (relevancias[i] ? 1 : 0) / Math.log2(i + 2);
80
- }
81
- return suma;
82
- }
83
-
84
- /**
85
- * Normalized Discounted Cumulative Gain @ k.
86
- *
87
- * @param {string[]} retrievedIds
88
- * @param {string[]} goldIds
89
- * @param {number} k
90
- * @returns {number} en [0, 1]
91
- */
92
- function ndcgAt(retrievedIds, goldIds, k) {
93
- if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds) || k <= 0) return 0;
94
- const goldSet = asSet(goldIds);
95
- const rels = retrievedIds.slice(0, k).map(id => goldSet.has(id));
96
- const idealRels = Array.from({ length: Math.min(k, goldSet.size) }, () => true);
97
- const idealDCG = dcg(idealRels, k);
98
- if (idealDCG === 0) return 0;
99
- return dcg(rels, k) / idealDCG;
100
- }
101
-
102
- // ── agregados ─────────────────────────────────────────────────────────────────
103
-
104
- /**
105
- * Calcula el conjunto completo de métricas para una query.
106
- *
107
- * @param {string[]} retrievedIds
108
- * @param {string[]} goldIds
109
- * @returns {{ recall_at_5, recall_at_10, recall_at_20, mrr, ndcg_at_10, precision_at_5 }}
110
- */
111
- function calcularMetricas(retrievedIds, goldIds) {
112
- return {
113
- recall_at_5: recallAt(retrievedIds, goldIds, 5),
114
- recall_at_10: recallAt(retrievedIds, goldIds, 10),
115
- recall_at_20: recallAt(retrievedIds, goldIds, 20),
116
- mrr: mrr(retrievedIds, goldIds),
117
- ndcg_at_10: ndcgAt(retrievedIds, goldIds, 10),
118
- precision_at_5: precisionAt(retrievedIds, goldIds, 5),
119
- };
120
- }
121
-
122
- /**
123
- * Promedia métricas sobre múltiples queries.
124
- *
125
- * @param {Array<object>} resultados - Array de objetos producidos por calcularMetricas().
126
- * @returns {object} Promedios con campo `n` (cantidad de queries).
127
- */
128
- function promediar(resultados) {
129
- if (!Array.isArray(resultados) || resultados.length === 0) {
130
- return {
131
- n: 0,
132
- recall_at_5: 0,
133
- recall_at_10: 0,
134
- recall_at_20: 0,
135
- mrr: 0,
136
- ndcg_at_10: 0,
137
- precision_at_5: 0,
138
- };
139
- }
140
-
141
- const claves = ['recall_at_5', 'recall_at_10', 'recall_at_20', 'mrr', 'ndcg_at_10', 'precision_at_5'];
142
- const promedio = { n: resultados.length };
143
- for (const k of claves) {
144
- const sum = resultados.reduce((a, r) => a + (r[k] || 0), 0);
145
- promedio[k] = sum / resultados.length;
146
- }
147
- return promedio;
148
- }
149
-
150
- // ── exports ───────────────────────────────────────────────────────────────────
151
-
152
- module.exports = {
153
- recallAt,
154
- precisionAt,
155
- mrr,
156
- ndcgAt,
157
- dcg,
158
- calcularMetricas,
159
- promediar,
160
- };
1
+ 'use strict';
2
+
3
+ /**
4
+ * benchmark-metrics.js — Métricas de retrieval para benchmark de memoria SWL.
5
+ *
6
+ * Patrón adoptado de `temp/agentmemory-main/benchmark/longmemeval-bench.ts`.
7
+ * Funciones puras zero-deps. Adaptado a IDs SWL (aprendizaje, sesion,
8
+ * instinto) en lugar de session_id de agentmemory.
9
+ *
10
+ * Métricas:
11
+ * - recallAt(k): 1.0 si al menos un gold ID está en los top-k, sino 0.0
12
+ * - precisionAt(k): proporción de top-k que son gold
13
+ * - mrr: Mean Reciprocal Rank (1/rank del primer gold encontrado)
14
+ * - ndcgAt(k): Normalized Discounted Cumulative Gain
15
+ *
16
+ * @module scripts/lib/benchmark-metrics
17
+ */
18
+
19
+ // ── helpers ───────────────────────────────────────────────────────────────────
20
+
21
+ function asSet(arr) {
22
+ return new Set(Array.isArray(arr) ? arr : []);
23
+ }
24
+
25
+ // ── métricas individuales ─────────────────────────────────────────────────────
26
+
27
+ /**
28
+ * Recall @ k: 1.0 si ALGÚN id gold está en los primeros k retrieved.
29
+ *
30
+ * @param {string[]} retrievedIds - IDs ordenados (mejor primero).
31
+ * @param {string[]} goldIds - IDs correctos esperados.
32
+ * @param {number} k
33
+ * @returns {number} 0 o 1
34
+ */
35
+ function recallAt(retrievedIds, goldIds, k) {
36
+ if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds)) return 0;
37
+ const topK = new Set(retrievedIds.slice(0, k));
38
+ return goldIds.some(g => topK.has(g)) ? 1.0 : 0.0;
39
+ }
40
+
41
+ /**
42
+ * Precision @ k: proporción de los primeros k retrieved que son gold.
43
+ *
44
+ * @param {string[]} retrievedIds
45
+ * @param {string[]} goldIds
46
+ * @param {number} k
47
+ * @returns {number} en [0, 1]
48
+ */
49
+ function precisionAt(retrievedIds, goldIds, k) {
50
+ if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds) || k <= 0) return 0;
51
+ const goldSet = asSet(goldIds);
52
+ const topK = retrievedIds.slice(0, k);
53
+ if (topK.length === 0) return 0;
54
+ const hits = topK.filter(id => goldSet.has(id)).length;
55
+ return hits / topK.length;
56
+ }
57
+
58
+ /**
59
+ * Mean Reciprocal Rank: 1/rank del primer gold encontrado, o 0 si ninguno.
60
+ *
61
+ * @param {string[]} retrievedIds
62
+ * @param {string[]} goldIds
63
+ * @returns {number} en [0, 1]
64
+ */
65
+ function mrr(retrievedIds, goldIds) {
66
+ if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds)) return 0;
67
+ const goldSet = asSet(goldIds);
68
+ for (let i = 0; i < retrievedIds.length; i++) {
69
+ if (goldSet.has(retrievedIds[i])) {
70
+ return 1 / (i + 1);
71
+ }
72
+ }
73
+ return 0;
74
+ }
75
+
76
+ function dcg(relevancias, k) {
77
+ let suma = 0;
78
+ for (let i = 0; i < Math.min(k, relevancias.length); i++) {
79
+ suma += (relevancias[i] ? 1 : 0) / Math.log2(i + 2);
80
+ }
81
+ return suma;
82
+ }
83
+
84
+ /**
85
+ * Normalized Discounted Cumulative Gain @ k.
86
+ *
87
+ * @param {string[]} retrievedIds
88
+ * @param {string[]} goldIds
89
+ * @param {number} k
90
+ * @returns {number} en [0, 1]
91
+ */
92
+ function ndcgAt(retrievedIds, goldIds, k) {
93
+ if (!Array.isArray(retrievedIds) || !Array.isArray(goldIds) || k <= 0) return 0;
94
+ const goldSet = asSet(goldIds);
95
+ const rels = retrievedIds.slice(0, k).map(id => goldSet.has(id));
96
+ const idealRels = Array.from({ length: Math.min(k, goldSet.size) }, () => true);
97
+ const idealDCG = dcg(idealRels, k);
98
+ if (idealDCG === 0) return 0;
99
+ return dcg(rels, k) / idealDCG;
100
+ }
101
+
102
+ // ── agregados ─────────────────────────────────────────────────────────────────
103
+
104
+ /**
105
+ * Calcula el conjunto completo de métricas para una query.
106
+ *
107
+ * @param {string[]} retrievedIds
108
+ * @param {string[]} goldIds
109
+ * @returns {{ recall_at_5, recall_at_10, recall_at_20, mrr, ndcg_at_10, precision_at_5 }}
110
+ */
111
+ function calcularMetricas(retrievedIds, goldIds) {
112
+ return {
113
+ recall_at_5: recallAt(retrievedIds, goldIds, 5),
114
+ recall_at_10: recallAt(retrievedIds, goldIds, 10),
115
+ recall_at_20: recallAt(retrievedIds, goldIds, 20),
116
+ mrr: mrr(retrievedIds, goldIds),
117
+ ndcg_at_10: ndcgAt(retrievedIds, goldIds, 10),
118
+ precision_at_5: precisionAt(retrievedIds, goldIds, 5),
119
+ };
120
+ }
121
+
122
+ /**
123
+ * Promedia métricas sobre múltiples queries.
124
+ *
125
+ * @param {Array<object>} resultados - Array de objetos producidos por calcularMetricas().
126
+ * @returns {object} Promedios con campo `n` (cantidad de queries).
127
+ */
128
+ function promediar(resultados) {
129
+ if (!Array.isArray(resultados) || resultados.length === 0) {
130
+ return {
131
+ n: 0,
132
+ recall_at_5: 0,
133
+ recall_at_10: 0,
134
+ recall_at_20: 0,
135
+ mrr: 0,
136
+ ndcg_at_10: 0,
137
+ precision_at_5: 0,
138
+ };
139
+ }
140
+
141
+ const claves = ['recall_at_5', 'recall_at_10', 'recall_at_20', 'mrr', 'ndcg_at_10', 'precision_at_5'];
142
+ const promedio = { n: resultados.length };
143
+ for (const k of claves) {
144
+ const sum = resultados.reduce((a, r) => a + (r[k] || 0), 0);
145
+ promedio[k] = sum / resultados.length;
146
+ }
147
+ return promedio;
148
+ }
149
+
150
+ // ── exports ───────────────────────────────────────────────────────────────────
151
+
152
+ module.exports = {
153
+ recallAt,
154
+ precisionAt,
155
+ mrr,
156
+ ndcgAt,
157
+ dcg,
158
+ calcularMetricas,
159
+ promediar,
160
+ };