@saulwade/swl-ses 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (702) hide show
  1. package/CLAUDE.md +238 -0
  2. package/README.md +560 -0
  3. package/_userland/agentes/.gitkeep +0 -0
  4. package/_userland/habilidades/.gitkeep +0 -0
  5. package/agentes/.evolved.json +9 -0
  6. package/agentes/accesibilidad-wcag-swl.md +692 -0
  7. package/agentes/arquitecto-swl.md +238 -0
  8. package/agentes/auto-evolucion-swl.md +854 -0
  9. package/agentes/backend-api-swl.md +470 -0
  10. package/agentes/backend-csharp-swl.md +418 -0
  11. package/agentes/backend-go-swl.md +388 -0
  12. package/agentes/backend-java-swl.md +279 -0
  13. package/agentes/backend-node-swl.md +477 -0
  14. package/agentes/backend-python-swl.md +608 -0
  15. package/agentes/backend-rust-swl.md +362 -0
  16. package/agentes/backend-workers-swl.md +480 -0
  17. package/agentes/cloud-infra-swl.md +485 -0
  18. package/agentes/consolidador-swl.md +539 -0
  19. package/agentes/datos-swl.md +584 -0
  20. package/agentes/depurador-swl.md +349 -0
  21. package/agentes/devops-ci-swl.md +374 -0
  22. package/agentes/disenador-ui-swl.md +558 -0
  23. package/agentes/documentador-swl.md +343 -0
  24. package/agentes/evals/arquitecto-swl.evals.json +56 -0
  25. package/agentes/evals/auto-evolucion-swl.evals.json +68 -0
  26. package/agentes/evals/implementador-swl.evals.json +56 -0
  27. package/agentes/evals/orquestador-swl.evals.json +60 -0
  28. package/agentes/evals/perfilador-usuario-swl.evals.json +60 -0
  29. package/agentes/evals/red-team-swl.evals.json +59 -0
  30. package/agentes/evals/revisor-codigo-swl.evals.json +59 -0
  31. package/agentes/frontend-angular-swl.md +627 -0
  32. package/agentes/frontend-css-swl.md +720 -0
  33. package/agentes/frontend-react-swl.md +696 -0
  34. package/agentes/frontend-swl.md +500 -0
  35. package/agentes/frontend-tailwind-swl.md +830 -0
  36. package/agentes/implementador-swl.md +328 -0
  37. package/agentes/investigador-swl.md +430 -0
  38. package/agentes/investigador-ux-swl.md +500 -0
  39. package/agentes/llm-apps-swl.md +276 -0
  40. package/agentes/migrador-swl.md +417 -0
  41. package/agentes/mobile-android-swl.md +509 -0
  42. package/agentes/mobile-cross-swl.md +539 -0
  43. package/agentes/mobile-ios-swl.md +500 -0
  44. package/agentes/mobile-testing-swl.md +300 -0
  45. package/agentes/notificador-swl.md +916 -0
  46. package/agentes/observabilidad-swl.md +436 -0
  47. package/agentes/orquestador-swl.md +884 -0
  48. package/agentes/pagos-swl.md +283 -0
  49. package/agentes/perfilador-usuario-swl.md +306 -0
  50. package/agentes/planificador-swl.md +402 -0
  51. package/agentes/producto-prd-swl.md +587 -0
  52. package/agentes/red-team-swl.md +216 -0
  53. package/agentes/release-manager-swl.md +568 -0
  54. package/agentes/rendimiento-swl.md +714 -0
  55. package/agentes/resolutor-build-swl.md +243 -0
  56. package/agentes/revisor-angular-swl.md +276 -0
  57. package/agentes/revisor-codigo-swl.md +348 -0
  58. package/agentes/revisor-csharp-swl.md +262 -0
  59. package/agentes/revisor-go-swl.md +257 -0
  60. package/agentes/revisor-java-swl.md +255 -0
  61. package/agentes/revisor-kotlin-swl.md +271 -0
  62. package/agentes/revisor-nextjs-swl.md +279 -0
  63. package/agentes/revisor-php-swl.md +269 -0
  64. package/agentes/revisor-react-swl.md +276 -0
  65. package/agentes/revisor-rust-swl.md +344 -0
  66. package/agentes/revisor-seguridad-swl.md +390 -0
  67. package/agentes/revisor-swift-swl.md +266 -0
  68. package/agentes/revisor-typescript-swl.md +344 -0
  69. package/agentes/sre-swl.md +265 -0
  70. package/agentes/tdd-qa-swl.md +354 -0
  71. package/agentes/ux-disenador-swl.md +501 -0
  72. package/bin/lib/bot-comandos.js +1030 -0
  73. package/bin/lib/bot-discovery.js +182 -0
  74. package/bin/lib/bot-git.js +142 -0
  75. package/bin/swl-ses.js +325 -0
  76. package/bin/swl-telegram-bot.js +442 -0
  77. package/bin/swl-telegram-bot.plist +21 -0
  78. package/bin/swl-telegram-bot.service +14 -0
  79. package/comandos/swl/.evolved.json +23 -0
  80. package/comandos/swl/actualizar.md +174 -0
  81. package/comandos/swl/adoptar-proyecto.md +207 -0
  82. package/comandos/swl/aprender.md +701 -0
  83. package/comandos/swl/auditar-deps.md +134 -0
  84. package/comandos/swl/autoresearch.md +170 -0
  85. package/comandos/swl/ayuda.md +224 -0
  86. package/comandos/swl/brainstorm.md +50 -0
  87. package/comandos/swl/checkpoint.md +330 -0
  88. package/comandos/swl/compactar.md +283 -0
  89. package/comandos/swl/configurar-ci.md +227 -0
  90. package/comandos/swl/contexto.md +112 -0
  91. package/comandos/swl/contribuir.md +233 -0
  92. package/comandos/swl/crear-skill.md +292 -0
  93. package/comandos/swl/cron.md +196 -0
  94. package/comandos/swl/dashboard.md +146 -0
  95. package/comandos/swl/discutir-fase.md +230 -0
  96. package/comandos/swl/ejecutar-fase.md +135 -0
  97. package/comandos/swl/evaluar-skill.md +487 -0
  98. package/comandos/swl/evolucion-estado.md +142 -0
  99. package/comandos/swl/evolucionar.md +259 -0
  100. package/comandos/swl/exportar-vault.md +189 -0
  101. package/comandos/swl/gateway.md +158 -0
  102. package/comandos/swl/inbox.md +116 -0
  103. package/comandos/swl/instalar.md +220 -0
  104. package/comandos/swl/instintos.md +86 -0
  105. package/comandos/swl/mapear-codebase.md +312 -0
  106. package/comandos/swl/mcp-status.md +175 -0
  107. package/comandos/swl/metricas.md +270 -0
  108. package/comandos/swl/modelo.md +102 -0
  109. package/comandos/swl/notificaciones.md +396 -0
  110. package/comandos/swl/nuevo-proyecto.md +154 -0
  111. package/comandos/swl/planear-fase.md +221 -0
  112. package/comandos/swl/plugins.md +256 -0
  113. package/comandos/swl/reflect-skills.md +125 -0
  114. package/comandos/swl/release.md +217 -0
  115. package/comandos/swl/revisar-impacto.md +206 -0
  116. package/comandos/swl/revisar.md +330 -0
  117. package/comandos/swl/salud.md +363 -0
  118. package/comandos/swl/sesiones.md +200 -0
  119. package/comandos/swl/skill-search.md +113 -0
  120. package/comandos/swl/verificar.md +585 -0
  121. package/comandos/swl/wiki.md +620 -0
  122. package/contextos/dev.md +32 -0
  123. package/contextos/research.md +30 -0
  124. package/contextos/review.md +31 -0
  125. package/habilidades/accesibilidad-a11y/SKILL.md +201 -0
  126. package/habilidades/accesibilidad-a11y/evals/evals.json +56 -0
  127. package/habilidades/accesibilidad-a11y/recursos/ejemplos-y-checklist-completo.md +441 -0
  128. package/habilidades/agent-browser/SKILL.md +218 -0
  129. package/habilidades/agentes-como-servicio/SKILL.md +218 -0
  130. package/habilidades/ai-runtime-security/SKILL.md +273 -0
  131. package/habilidades/angular-avanzado/SKILL.md +164 -0
  132. package/habilidades/angular-avanzado/recursos/ejemplos-avanzados.md +219 -0
  133. package/habilidades/angular-moderno/SKILL.md +186 -0
  134. package/habilidades/angular-moderno/evals/evals.json +45 -0
  135. package/habilidades/angular-moderno/recursos/ejemplos-avanzados.md +106 -0
  136. package/habilidades/api-rest-diseno/SKILL.md +191 -0
  137. package/habilidades/api-rest-diseno/recursos/openapi-template.yaml +506 -0
  138. package/habilidades/api-rest-diseno/recursos/referencia-api.md +140 -0
  139. package/habilidades/aprendizaje-continuo/SKILL.md +151 -0
  140. package/habilidades/aprendizaje-continuo/evals/evals.json +53 -0
  141. package/habilidades/aprendizaje-continuo/recursos/referencia-instintos.md +290 -0
  142. package/habilidades/async-python/SKILL.md +149 -0
  143. package/habilidades/async-python/evals/evals.json +47 -0
  144. package/habilidades/async-python/recursos/patrones-y-ejemplos-completos.md +292 -0
  145. package/habilidades/auth-patrones/.evolved.json +9 -0
  146. package/habilidades/auth-patrones/SKILL.md +413 -0
  147. package/habilidades/auth-patrones/recursos/implementaciones-completas.md +229 -0
  148. package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -0
  149. package/habilidades/auto-evolucion-protocolo/evals/evals.json +55 -0
  150. package/habilidades/auto-evolucion-protocolo/recursos/referencia-completa.md +145 -0
  151. package/habilidades/autoresearch/SKILL.md +268 -0
  152. package/habilidades/autoresearch/evals/evals.json +41 -0
  153. package/habilidades/autoresearch/recursos/checklist-template.md +191 -0
  154. package/habilidades/autoresearch/scripts/calcular-score.js +88 -0
  155. package/habilidades/azure-cloud/SKILL.md +308 -0
  156. package/habilidades/azure-cloud/recursos/aks.md +327 -0
  157. package/habilidades/backend-mcp-servidor/SKILL.md +270 -0
  158. package/habilidades/backend-production-resilience/SKILL.md +288 -0
  159. package/habilidades/brainstorming/SKILL.md +295 -0
  160. package/habilidades/brainstorming/recursos/componentes-html.md +247 -0
  161. package/habilidades/build-errors-cpp/SKILL.md +270 -0
  162. package/habilidades/build-errors-csharp/SKILL.md +265 -0
  163. package/habilidades/build-errors-go/SKILL.md +306 -0
  164. package/habilidades/build-errors-java/SKILL.md +278 -0
  165. package/habilidades/build-errors-kotlin/SKILL.md +303 -0
  166. package/habilidades/build-errors-nextjs/SKILL.md +312 -0
  167. package/habilidades/build-errors-php/SKILL.md +270 -0
  168. package/habilidades/build-errors-python/SKILL.md +292 -0
  169. package/habilidades/build-errors-rust/SKILL.md +284 -0
  170. package/habilidades/build-errors-swift/SKILL.md +272 -0
  171. package/habilidades/build-errors-typescript/SKILL.md +369 -0
  172. package/habilidades/checklist-calidad/SKILL.md +271 -0
  173. package/habilidades/checklist-calidad/recursos/quality-report-template.md +148 -0
  174. package/habilidades/checklist-seguridad/SKILL.md +285 -0
  175. package/habilidades/checkpoints-verificacion/SKILL.md +298 -0
  176. package/habilidades/checkpoints-verificacion/recursos/checkpoint-templates.md +360 -0
  177. package/habilidades/ci-cd-pipelines/SKILL.md +157 -0
  178. package/habilidades/ci-cd-pipelines/recursos/github-actions-template.yaml +403 -0
  179. package/habilidades/ci-cd-pipelines/recursos/pipelines-completos.md +487 -0
  180. package/habilidades/cloud-aws/SKILL.md +142 -0
  181. package/habilidades/cloud-aws/recursos/servicios-aws-referencia.md +321 -0
  182. package/habilidades/compactacion-contexto/SKILL.md +247 -0
  183. package/habilidades/contenedores-docker/SKILL.md +137 -0
  184. package/habilidades/contenedores-docker/recursos/dockerfile-template.dockerfile +160 -0
  185. package/habilidades/contenedores-docker/recursos/ejemplos-y-configuraciones.md +327 -0
  186. package/habilidades/context-builder/SKILL.md +170 -0
  187. package/habilidades/control-profundidad/SKILL.md +128 -0
  188. package/habilidades/csharp-experto/SKILL.md +322 -0
  189. package/habilidades/csharp-patrones/SKILL.md +316 -0
  190. package/habilidades/csharp-testing/SKILL.md +286 -0
  191. package/habilidades/css-moderno/SKILL.md +166 -0
  192. package/habilidades/css-moderno/evals/evals.json +43 -0
  193. package/habilidades/css-moderno/recursos/ejemplos-y-patrones-completos.md +337 -0
  194. package/habilidades/datos-etl/SKILL.md +129 -0
  195. package/habilidades/datos-etl/recursos/implementaciones-completas.md +322 -0
  196. package/habilidades/dbml-experto/SKILL.md +339 -0
  197. package/habilidades/dbml-experto/evals/evals.json +56 -0
  198. package/habilidades/dependencias-auditoria/SKILL.md +320 -0
  199. package/habilidades/deprecacion-migracion/SKILL.md +169 -0
  200. package/habilidades/deprecacion-migracion/recursos/implementaciones-completas.md +220 -0
  201. package/habilidades/design-tokens/SKILL.md +158 -0
  202. package/habilidades/design-tokens/recursos/tokens-y-configuracion.md +363 -0
  203. package/habilidades/devsecops-pipeline-security/SKILL.md +309 -0
  204. package/habilidades/diagrama-arquitectura/SKILL.md +165 -0
  205. package/habilidades/diagrama-arquitectura/assets/template.html +276 -0
  206. package/habilidades/discutir-fase/SKILL.md +188 -0
  207. package/habilidades/diseno-herramientas-agente/SKILL.md +199 -0
  208. package/habilidades/diseno-responsivo/SKILL.md +186 -0
  209. package/habilidades/diseno-responsivo/recursos/ejemplos-layouts.md +156 -0
  210. package/habilidades/django-experto/SKILL.md +205 -0
  211. package/habilidades/django-experto/recursos/async-django.md +390 -0
  212. package/habilidades/django-experto/recursos/drf-patrones.md +438 -0
  213. package/habilidades/django-experto/recursos/orm-avanzado.md +382 -0
  214. package/habilidades/django-experto/recursos/referencia-completa.md +188 -0
  215. package/habilidades/django-experto/recursos/testing-django.md +415 -0
  216. package/habilidades/doc-sync/SKILL.md +280 -0
  217. package/habilidades/drift-detection/SKILL.md +179 -0
  218. package/habilidades/ejecutar-fase/SKILL.md +468 -0
  219. package/habilidades/estilo-sin-ai-isms/SKILL.md +775 -0
  220. package/habilidades/estilo-sin-ai-isms/evals/evals.json +63 -0
  221. package/habilidades/estilo-sin-ai-isms/scripts/detectar_aiisms.py +500 -0
  222. package/habilidades/estructura-proyecto-claude/SKILL.md +215 -0
  223. package/habilidades/estructura-proyecto-claude/recursos/claude-md-template.md +261 -0
  224. package/habilidades/estructura-proyecto-claude/recursos/configuracion-y-extensiones.md +176 -0
  225. package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +289 -0
  226. package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +77 -0
  227. package/habilidades/estructura-proyecto-claude/recursos/variantes-por-stack.md +177 -0
  228. package/habilidades/evaluacion-agentes/SKILL.md +314 -0
  229. package/habilidades/event-driven/SKILL.md +153 -0
  230. package/habilidades/event-driven/recursos/implementaciones-completas.md +423 -0
  231. package/habilidades/extraccion-documentos/SKILL.md +221 -0
  232. package/habilidades/extractor-de-aprendizajes/.evolved.json +9 -0
  233. package/habilidades/extractor-de-aprendizajes/SKILL.md +311 -0
  234. package/habilidades/extractor-de-aprendizajes/evals/evals.json +55 -0
  235. package/habilidades/fastapi-experto/SKILL.md +221 -0
  236. package/habilidades/fastapi-experto/recursos/async-patterns.md +438 -0
  237. package/habilidades/fastapi-experto/recursos/dependency-injection.md +330 -0
  238. package/habilidades/fastapi-experto/recursos/referencia-completa.md +79 -0
  239. package/habilidades/fastapi-experto/recursos/testing-httpx.md +420 -0
  240. package/habilidades/filament-admin/SKILL.md +290 -0
  241. package/habilidades/frontend-avanzado/SKILL.md +257 -0
  242. package/habilidades/frontend-avanzado/recursos/apis-nativas-ejemplos.md +341 -0
  243. package/habilidades/gcp-cloud/SKILL.md +260 -0
  244. package/habilidades/gcp-cloud/recursos/gke.md +234 -0
  245. package/habilidades/gcp-cloud/recursos/terraform-gcp.md +307 -0
  246. package/habilidades/generacion-mermaid/SKILL.md +229 -0
  247. package/habilidades/git-worktrees-paralelo/SKILL.md +270 -0
  248. package/habilidades/go-experto/SKILL.md +305 -0
  249. package/habilidades/go-patrones/SKILL.md +299 -0
  250. package/habilidades/go-testing/SKILL.md +291 -0
  251. package/habilidades/graphql-experto/SKILL.md +323 -0
  252. package/habilidades/guardrail-semantico/SKILL.md +282 -0
  253. package/habilidades/harness-claude-code/SKILL.md +299 -0
  254. package/habilidades/iam-secretos/SKILL.md +265 -0
  255. package/habilidades/iam-secretos/recursos/implementaciones-completas.md +356 -0
  256. package/habilidades/infra-github-actions/SKILL.md +166 -0
  257. package/habilidades/instalar-sistema/.evolved.json +9 -0
  258. package/habilidades/instalar-sistema/SKILL.md +221 -0
  259. package/habilidades/java-experto/SKILL.md +290 -0
  260. package/habilidades/java-patrones/SKILL.md +275 -0
  261. package/habilidades/java-testing/SKILL.md +288 -0
  262. package/habilidades/kotlin-compose/SKILL.md +278 -0
  263. package/habilidades/kotlin-compose/recursos/animaciones-performance.md +93 -0
  264. package/habilidades/kotlin-experto/SKILL.md +318 -0
  265. package/habilidades/kotlin-testing/SKILL.md +267 -0
  266. package/habilidades/kotlin-testing/recursos/testing-avanzado.md +74 -0
  267. package/habilidades/kubernetes-orquestacion/SKILL.md +152 -0
  268. package/habilidades/kubernetes-orquestacion/recursos/manifiestos-completos.md +452 -0
  269. package/habilidades/langchain-langraph/SKILL.md +386 -0
  270. package/habilidades/langchain-langraph/recursos/evaluacion-rag.md +321 -0
  271. package/habilidades/langchain-langraph/recursos/rag-maturity-model.md +225 -0
  272. package/habilidades/langchain-langraph/recursos/vectorstores.md +306 -0
  273. package/habilidades/legacy-code-rescue/SKILL.md +267 -0
  274. package/habilidades/likec4-experto/SKILL.md +412 -0
  275. package/habilidades/likec4-experto/evals/evals.json +69 -0
  276. package/habilidades/manejo-errores/.evolved.json +9 -0
  277. package/habilidades/manejo-errores/SKILL.md +407 -0
  278. package/habilidades/manejo-errores/recursos/implementaciones-completas.md +248 -0
  279. package/habilidades/mapear-codebase/SKILL.md +275 -0
  280. package/habilidades/memoria-busqueda/SKILL.md +194 -0
  281. package/habilidades/memoria-busqueda/evals/evals.json +44 -0
  282. package/habilidades/meta-skills-estandar/SKILL.md +298 -0
  283. package/habilidades/meta-skills-estandar/recursos/anti-patrones-y-leyes.md +205 -0
  284. package/habilidades/meta-skills-estandar/recursos/frameworks-seguridad.md +107 -0
  285. package/habilidades/meta-skills-estandar/recursos/idiomas-framework.md +60 -0
  286. package/habilidades/meta-skills-estandar/recursos/skills-as-agents.md +163 -0
  287. package/habilidades/microservicios/SKILL.md +155 -0
  288. package/habilidades/microservicios/recursos/patrones-y-ejemplos-completos.md +325 -0
  289. package/habilidades/mobile-flutter/SKILL.md +199 -0
  290. package/habilidades/mobile-flutter/recursos/ejemplos-completos.md +319 -0
  291. package/habilidades/mobile-react-native/SKILL.md +176 -0
  292. package/habilidades/mobile-react-native/recursos/ejemplos-completos.md +216 -0
  293. package/habilidades/mongodb-experto/SKILL.md +302 -0
  294. package/habilidades/monitoring-alertas/SKILL.md +201 -0
  295. package/habilidades/monitoring-alertas/recursos/instrumentacion-y-alertas.md +301 -0
  296. package/habilidades/nestjs-experto/SKILL.md +307 -0
  297. package/habilidades/nestjs-experto/recursos/guards-interceptors.md +339 -0
  298. package/habilidades/nestjs-experto/recursos/modulos-di.md +287 -0
  299. package/habilidades/nestjs-experto/recursos/testing-nestjs.md +354 -0
  300. package/habilidades/nextjs-experto/SKILL.md +335 -0
  301. package/habilidades/nextjs-patrones/SKILL.md +303 -0
  302. package/habilidades/nextjs-testing/SKILL.md +331 -0
  303. package/habilidades/node-experto/.evolved.json +9 -0
  304. package/habilidades/node-experto/SKILL.md +266 -0
  305. package/habilidades/node-experto/recursos/patrones-completos.md +283 -0
  306. package/habilidades/notificaciones-multicanal/SKILL.md +159 -0
  307. package/habilidades/notificaciones-multicanal/recursos/config-template.json +115 -0
  308. package/habilidades/notificaciones-multicanal/recursos/configuracion-y-templates.md +303 -0
  309. package/habilidades/nuevo-proyecto/SKILL.md +204 -0
  310. package/habilidades/orquestacion-async/SKILL.md +303 -0
  311. package/habilidades/paid-media-tracking/SKILL.md +269 -0
  312. package/habilidades/paid-media-tracking/recursos/auditoria-tracking.md +220 -0
  313. package/habilidades/paid-media-tracking/recursos/google-ads-api.md +215 -0
  314. package/habilidades/patrones-python/SKILL.md +228 -0
  315. package/habilidades/patrones-python/evals/evals.json +56 -0
  316. package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -0
  317. package/habilidades/patrones-python/recursos/referencia-completa.md +202 -0
  318. package/habilidades/perfil-usuario/SKILL.md +200 -0
  319. package/habilidades/perfil-usuario/evals/evals.json +55 -0
  320. package/habilidades/performance-baseline/SKILL.md +297 -0
  321. package/habilidades/php-experto/SKILL.md +291 -0
  322. package/habilidades/php-patrones/SKILL.md +306 -0
  323. package/habilidades/php-testing/SKILL.md +280 -0
  324. package/habilidades/planear-fase/SKILL.md +269 -0
  325. package/habilidades/postgresql-experto/SKILL.md +151 -0
  326. package/habilidades/postgresql-experto/evals/evals.json +53 -0
  327. package/habilidades/postgresql-experto/recursos/referencia-completa.md +215 -0
  328. package/habilidades/prevencion-racionalizacion/SKILL.md +175 -0
  329. package/habilidades/prevencion-sobreingenieria/SKILL.md +323 -0
  330. package/habilidades/privacy-memoria/SKILL.md +141 -0
  331. package/habilidades/privacy-memoria/evals/evals.json +43 -0
  332. package/habilidades/prompt-engineering/SKILL.md +518 -0
  333. package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +467 -0
  334. package/habilidades/rag-arquitectura/SKILL.md +338 -0
  335. package/habilidades/rails-experto/SKILL.md +237 -0
  336. package/habilidades/rails-experto/recursos/active-record.md +260 -0
  337. package/habilidades/rails-experto/recursos/hotwire-turbo.md +293 -0
  338. package/habilidades/rails-experto/recursos/testing-rspec.md +362 -0
  339. package/habilidades/react-experto/SKILL.md +209 -0
  340. package/habilidades/react-experto/evals/evals.json +55 -0
  341. package/habilidades/react-experto/recursos/patrones-y-ejemplos-completos.md +240 -0
  342. package/habilidades/react-optimizacion/SKILL.md +174 -0
  343. package/habilidades/react-optimizacion/recursos/patrones-avanzados.md +138 -0
  344. package/habilidades/redis-experto/SKILL.md +305 -0
  345. package/habilidades/release-semver/.evolved.json +9 -0
  346. package/habilidades/release-semver/SKILL.md +248 -0
  347. package/habilidades/release-semver/scripts/generar-changelog.sh +238 -0
  348. package/habilidades/rust-experto/SKILL.md +400 -0
  349. package/habilidades/rust-patrones/SKILL.md +296 -0
  350. package/habilidades/rust-testing/SKILL.md +311 -0
  351. package/habilidades/seguridad-skills-ia/SKILL.md +262 -0
  352. package/habilidades/sql-optimizacion/SKILL.md +200 -0
  353. package/habilidades/sql-optimizacion/evals/evals.json +54 -0
  354. package/habilidades/sql-optimizacion/recursos/patrones-sql-avanzados.md +131 -0
  355. package/habilidades/sre-patrones/SKILL.md +333 -0
  356. package/habilidades/sre-patrones/recursos/chaos-engineering.md +241 -0
  357. package/habilidades/sre-patrones/recursos/oncall-design.md +236 -0
  358. package/habilidades/stripe-pagos/SKILL.md +550 -0
  359. package/habilidades/stripe-pagos/recursos/errores-reintentos.md +390 -0
  360. package/habilidades/stripe-pagos/recursos/stripe-connect.md +290 -0
  361. package/habilidades/structured-outputs/SKILL.md +343 -0
  362. package/habilidades/swift-experto/SKILL.md +320 -0
  363. package/habilidades/swift-experto/recursos/keychain-y-wrappers.md +110 -0
  364. package/habilidades/swift-patrones/SKILL.md +313 -0
  365. package/habilidades/swift-patrones/recursos/tca-ejemplo-completo.md +113 -0
  366. package/habilidades/swift-testing/SKILL.md +254 -0
  367. package/habilidades/swift-testing/recursos/xcuitest-planes.md +143 -0
  368. package/habilidades/swl-dashboard/SKILL.md +370 -0
  369. package/habilidades/swl-markitdown/SKILL.md +285 -0
  370. package/habilidades/swl-markitdown/evals/evals.json +52 -0
  371. package/habilidades/swl-revisar-impacto/SKILL.md +233 -0
  372. package/habilidades/tailwind-experto/SKILL.md +240 -0
  373. package/habilidades/tailwind-experto/recursos/referencia-completa.md +184 -0
  374. package/habilidades/tdd-workflow/SKILL.md +293 -0
  375. package/habilidades/terraform-experto/SKILL.md +321 -0
  376. package/habilidades/testing-python/SKILL.md +340 -0
  377. package/habilidades/testing-python/recursos/ejemplos-completos.md +167 -0
  378. package/habilidades/threat-model-lite/SKILL.md +246 -0
  379. package/habilidades/tracing-processor/SKILL.md +212 -0
  380. package/habilidades/tracking-measurement/SKILL.md +239 -0
  381. package/habilidades/tracking-measurement/recursos/consent-mode.md +231 -0
  382. package/habilidades/tracking-measurement/recursos/gtm-datalayer.md +216 -0
  383. package/habilidades/tracking-measurement/recursos/meta-capi.md +262 -0
  384. package/habilidades/typescript-avanzado/SKILL.md +144 -0
  385. package/habilidades/typescript-avanzado/evals/evals.json +55 -0
  386. package/habilidades/typescript-avanzado/recursos/patrones-y-ejemplos-completos.md +298 -0
  387. package/habilidades/typescript-diagnosticos/SKILL.md +513 -0
  388. package/habilidades/ux-diseno/SKILL.md +116 -0
  389. package/habilidades/ux-diseno/evals/evals.json +43 -0
  390. package/habilidades/ux-diseno/recursos/patrones-ux-referencia.md +214 -0
  391. package/habilidades/validacion-ci-sistema/SKILL.md +136 -0
  392. package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +369 -0
  393. package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +286 -0
  394. package/habilidades/verificacion-evidencia/SKILL.md +160 -0
  395. package/habilidades/verificar-trabajo/SKILL.md +303 -0
  396. package/habilidades/verificar-trabajo/recursos/plantilla-verificacion.md +60 -0
  397. package/habilidades/wiki-conocimiento/SKILL.md +276 -0
  398. package/habilidades/wireframes-flujos/SKILL.md +212 -0
  399. package/habilidades/wireframes-flujos/recursos/referencia-completa.md +192 -0
  400. package/habilidades/workflow-claude-code/SKILL.md +260 -0
  401. package/habilidades/workflow-claude-code/recursos/referencia-completa.md +109 -0
  402. package/hooks/_run-hook.sh +57 -0
  403. package/hooks/actualizar-perfil-usuario.js +364 -0
  404. package/hooks/agente-lifecycle.js +71 -0
  405. package/hooks/aiisms-detector.js +173 -0
  406. package/hooks/audit-trail.js +204 -0
  407. package/hooks/auto-background.js +97 -0
  408. package/hooks/auto-consolidacion.js +178 -0
  409. package/hooks/auto-evolucion.js +666 -0
  410. package/hooks/auto-restaurar-settings.js +360 -0
  411. package/hooks/calidad-pre-commit.js +929 -0
  412. package/hooks/calidad-typescript.js +511 -0
  413. package/hooks/captura-feedback-usuario.js +148 -0
  414. package/hooks/check-update.js +211 -0
  415. package/hooks/clasificador-mensajes.js +271 -0
  416. package/hooks/degradacion-instintos.js +272 -0
  417. package/hooks/escaneo-secretos.js +389 -0
  418. package/hooks/extraccion-aprendizajes.js +763 -0
  419. package/hooks/grafo-contexto.js +129 -0
  420. package/hooks/graph-update.js +67 -0
  421. package/hooks/guardrail-modelo.js +247 -0
  422. package/hooks/inbox-aviso.js +75 -0
  423. package/hooks/inyeccion-contexto.js +246 -0
  424. package/hooks/lib/abort-registry.js +214 -0
  425. package/hooks/lib/agent-backend.js +210 -0
  426. package/hooks/lib/agent-comms.js +263 -0
  427. package/hooks/lib/agent-issue-codes.js +284 -0
  428. package/hooks/lib/agent-matcher.js +189 -0
  429. package/hooks/lib/async-hook-registry.js +252 -0
  430. package/hooks/lib/atomic-write.js +130 -0
  431. package/hooks/lib/auto-consolidator.js +335 -0
  432. package/hooks/lib/canary-skills.js +187 -0
  433. package/hooks/lib/consolidation-lock.js +291 -0
  434. package/hooks/lib/context-builder.js +430 -0
  435. package/hooks/lib/context-compressor.js +657 -0
  436. package/hooks/lib/convergence-detector.js +105 -0
  437. package/hooks/lib/delegation-tracker.js +198 -0
  438. package/hooks/lib/detectar-package-manager.js +423 -0
  439. package/hooks/lib/edit-accumulator.js +171 -0
  440. package/hooks/lib/error-classifier.js +308 -0
  441. package/hooks/lib/event-bus.js +112 -0
  442. package/hooks/lib/evolution-tracker.js +442 -0
  443. package/hooks/lib/execution-state.js +316 -0
  444. package/hooks/lib/fingerprint-id.js +135 -0
  445. package/hooks/lib/gateway-notify.js +116 -0
  446. package/hooks/lib/graph-security.js +75 -0
  447. package/hooks/lib/guardrail-metrics.js +202 -0
  448. package/hooks/lib/hook-circuit-breaker.js +206 -0
  449. package/hooks/lib/loop-detector.js +267 -0
  450. package/hooks/lib/mcp-health.js +184 -0
  451. package/hooks/lib/mcp-pool.js +436 -0
  452. package/hooks/lib/memory-search.js +506 -0
  453. package/hooks/lib/merkle-audit.js +96 -0
  454. package/hooks/lib/model-router.js +222 -0
  455. package/hooks/lib/normalize-error.js +324 -0
  456. package/hooks/lib/normalize-input.js +65 -0
  457. package/hooks/lib/nudge-tracker.js +306 -0
  458. package/hooks/lib/otlp-exporter.js +365 -0
  459. package/hooks/lib/performance-marks.js +239 -0
  460. package/hooks/lib/privacy-filter.js +128 -0
  461. package/hooks/lib/prompt-injection-scanner.js +209 -0
  462. package/hooks/lib/provenance-tracker.js +183 -0
  463. package/hooks/lib/rate-limit-tracker.js +253 -0
  464. package/hooks/lib/reflect-classifier.js +164 -0
  465. package/hooks/lib/resource-quota.js +122 -0
  466. package/hooks/lib/retry-jitter.js +165 -0
  467. package/hooks/lib/risk-engine.js +368 -0
  468. package/hooks/lib/run-log.js +408 -0
  469. package/hooks/lib/session-fts.js +379 -0
  470. package/hooks/lib/session-store.js +293 -0
  471. package/hooks/lib/singleton-guard.js +159 -0
  472. package/hooks/lib/skill-auditor.js +588 -0
  473. package/hooks/lib/sync-status.js +228 -0
  474. package/hooks/lib/taint-tracker.js +107 -0
  475. package/hooks/lib/task-service.js +295 -0
  476. package/hooks/lib/tech-skills-map.js +146 -0
  477. package/hooks/lib/telegram-cliente.js +159 -0
  478. package/hooks/lib/telegram-config.js +170 -0
  479. package/hooks/lib/token-budget.js +156 -0
  480. package/hooks/lib/token-estimator.js +420 -0
  481. package/hooks/lib/toon-compressor.js +245 -0
  482. package/hooks/lib/usage-model.js +183 -0
  483. package/hooks/lib/variable-resolver.js +230 -0
  484. package/hooks/linea-estado.js +324 -0
  485. package/hooks/metricas-evolucion.js +209 -0
  486. package/hooks/monitor-contexto.js +325 -0
  487. package/hooks/notificacion-sesion-stop.js +198 -0
  488. package/hooks/notificacion-telegram-notification.js +4 -0
  489. package/hooks/notificacion-telegram-subagent.js +4 -0
  490. package/hooks/notificacion-telegram.js +267 -0
  491. package/hooks/preservar-estado-pre-compact.js +150 -0
  492. package/hooks/proteccion-rutas.js +366 -0
  493. package/hooks/registro-turnos.js +209 -0
  494. package/hooks/resumen-sesion.js +249 -0
  495. package/hooks/risk-scoring.js +323 -0
  496. package/hooks/rotar-audit-auto.js +122 -0
  497. package/hooks/sugerir-regenerar-inventario.js +170 -0
  498. package/hooks/telemetria-agentes.js +167 -0
  499. package/hooks/tracking-costos.js +688 -0
  500. package/instintos/global.yaml +8 -0
  501. package/instintos/perfil-usuario.yaml +53 -0
  502. package/instintos/prompt-appendices.yaml +57 -0
  503. package/instintos/proyecto.yaml +372 -0
  504. package/manifiestos/gateway-config.json +77 -0
  505. package/manifiestos/handoff-context.json +223 -0
  506. package/manifiestos/hook-profiles.json +44 -0
  507. package/manifiestos/hooks-config.json +360 -0
  508. package/manifiestos/modulos.json +1173 -0
  509. package/manifiestos/perfiles.json +404 -0
  510. package/package.json +86 -0
  511. package/plantillas/ESTADO.md +109 -0
  512. package/plantillas/HOJA-RUTA.md +143 -0
  513. package/plantillas/PROYECTO.md +122 -0
  514. package/plantillas/REQUISITOS.md +132 -0
  515. package/plantillas/auditor-veto-template.md +105 -0
  516. package/plantillas/github-workflows/README.md +47 -0
  517. package/plantillas/github-workflows/release-please.yml +44 -0
  518. package/plantillas/github-workflows/swl-ci.yml +107 -0
  519. package/plantillas/github-workflows/swl-security.yml +51 -0
  520. package/plantillas/mcp-mineru.json +13 -0
  521. package/plantillas/research/ARQUITECTURA.md +220 -0
  522. package/plantillas/research/FUNCIONALIDADES.md +175 -0
  523. package/plantillas/research/RESUMEN.md +165 -0
  524. package/plantillas/research/STACK.md +233 -0
  525. package/plantillas/research/TRAMPAS.md +299 -0
  526. package/plantillas/skill-evals-template.json +44 -0
  527. package/plugin.json +343 -0
  528. package/reglas/accesibilidad.md +269 -0
  529. package/reglas/api-diseno.md +400 -0
  530. package/reglas/arquitectura.md +352 -0
  531. package/reglas/brevedad-output.md +124 -0
  532. package/reglas/cloud-infra.md +247 -0
  533. package/reglas/docs.md +245 -0
  534. package/reglas/estilo-codigo.md +201 -0
  535. package/reglas/git-workflow.md +245 -0
  536. package/reglas/gobernanza.md +271 -0
  537. package/reglas/harness-claude-code.md +213 -0
  538. package/reglas/hooks.md +186 -0
  539. package/reglas/lenguajes/csharp/estilo-codigo.md +231 -0
  540. package/reglas/lenguajes/csharp/hooks.md +281 -0
  541. package/reglas/lenguajes/csharp/patrones.md +226 -0
  542. package/reglas/lenguajes/csharp/seguridad.md +258 -0
  543. package/reglas/lenguajes/csharp/testing.md +176 -0
  544. package/reglas/lenguajes/go/estilo-codigo.md +195 -0
  545. package/reglas/lenguajes/go/hooks.md +249 -0
  546. package/reglas/lenguajes/go/patrones.md +249 -0
  547. package/reglas/lenguajes/go/seguridad.md +225 -0
  548. package/reglas/lenguajes/go/testing.md +272 -0
  549. package/reglas/lenguajes/java/estilo-codigo.md +217 -0
  550. package/reglas/lenguajes/java/hooks.md +251 -0
  551. package/reglas/lenguajes/java/patrones.md +226 -0
  552. package/reglas/lenguajes/java/seguridad.md +233 -0
  553. package/reglas/lenguajes/java/testing.md +238 -0
  554. package/reglas/lenguajes/kotlin/estilo-codigo.md +208 -0
  555. package/reglas/lenguajes/kotlin/hooks.md +245 -0
  556. package/reglas/lenguajes/kotlin/patrones.md +201 -0
  557. package/reglas/lenguajes/kotlin/seguridad.md +202 -0
  558. package/reglas/lenguajes/kotlin/testing.md +236 -0
  559. package/reglas/lenguajes/nextjs/estilo-codigo.md +175 -0
  560. package/reglas/lenguajes/nextjs/hooks.md +186 -0
  561. package/reglas/lenguajes/nextjs/patrones.md +225 -0
  562. package/reglas/lenguajes/nextjs/seguridad.md +216 -0
  563. package/reglas/lenguajes/nextjs/testing.md +193 -0
  564. package/reglas/lenguajes/php/estilo-codigo.md +228 -0
  565. package/reglas/lenguajes/php/hooks.md +165 -0
  566. package/reglas/lenguajes/php/patrones.md +233 -0
  567. package/reglas/lenguajes/php/seguridad.md +186 -0
  568. package/reglas/lenguajes/php/testing.md +205 -0
  569. package/reglas/lenguajes/rust/estilo-codigo.md +207 -0
  570. package/reglas/lenguajes/rust/hooks.md +240 -0
  571. package/reglas/lenguajes/rust/patrones.md +250 -0
  572. package/reglas/lenguajes/rust/seguridad.md +221 -0
  573. package/reglas/lenguajes/rust/testing.md +194 -0
  574. package/reglas/lenguajes/swift/estilo-codigo.md +238 -0
  575. package/reglas/lenguajes/swift/hooks.md +257 -0
  576. package/reglas/lenguajes/swift/patrones.md +235 -0
  577. package/reglas/lenguajes/swift/seguridad.md +248 -0
  578. package/reglas/lenguajes/swift/testing.md +242 -0
  579. package/reglas/markitdown.md +60 -0
  580. package/reglas/memoria-consolidada.md +209 -0
  581. package/reglas/patrones.md +225 -0
  582. package/reglas/performance.md +195 -0
  583. package/reglas/pruebas.md +159 -0
  584. package/reglas/seguridad-agentes.md +351 -0
  585. package/reglas/seguridad.md +151 -0
  586. package/reglas/skills-estandar.md +373 -0
  587. package/reglas/testing.md +193 -0
  588. package/schemas/agent-contract.json +176 -0
  589. package/schemas/agent-frontmatter.schema.json +149 -0
  590. package/schemas/agent-message.schema.json +53 -0
  591. package/schemas/agent-output-implementacion.schema.json +85 -0
  592. package/schemas/agent-output-planificacion.schema.json +113 -0
  593. package/schemas/agent-output-review.schema.json +78 -0
  594. package/schemas/diary-entry.schema.json +80 -0
  595. package/schemas/hook-profiles.schema.json +39 -0
  596. package/schemas/hooks-config.schema.json +74 -0
  597. package/schemas/instinct.schema.json +115 -0
  598. package/schemas/modulos.schema.json +29 -0
  599. package/schemas/perfiles.schema.json +28 -0
  600. package/schemas/plugin.schema.json +64 -0
  601. package/schemas/skill-evals.schema.json +95 -0
  602. package/schemas/skill-frontmatter.schema.json +170 -0
  603. package/scripts/actualizar.js +145 -0
  604. package/scripts/audit-skills.sh +78 -0
  605. package/scripts/auditar-agentes-gaps.js +149 -0
  606. package/scripts/auditar-cobertura-frameworks.js +241 -0
  607. package/scripts/auditar-skills-gaps.js +206 -0
  608. package/scripts/bootstrap-instintos.js +259 -0
  609. package/scripts/check-update.js +109 -0
  610. package/scripts/comandos/agents.js +105 -0
  611. package/scripts/comandos/info.js +108 -0
  612. package/scripts/comandos/install-asistido.js +186 -0
  613. package/scripts/comandos/skills.js +211 -0
  614. package/scripts/configurar-branch-protection.js +418 -0
  615. package/scripts/daemon-swl.py +388 -0
  616. package/scripts/desinstalar.js +130 -0
  617. package/scripts/doctor.js +559 -0
  618. package/scripts/field-report.js +199 -0
  619. package/scripts/generar-inventario.js +317 -0
  620. package/scripts/inbox-tmux-inject.js +161 -0
  621. package/scripts/inferir-herramientas-permitidas.js +586 -0
  622. package/scripts/inicializar.js +133 -0
  623. package/scripts/instalador.js +1031 -0
  624. package/scripts/instalar-git-hook.js +122 -0
  625. package/scripts/lib/agp-frontmatter.js +222 -0
  626. package/scripts/lib/append-con-marcadores.js +199 -0
  627. package/scripts/lib/artefactos-python.js +43 -0
  628. package/scripts/lib/audit-query.js +221 -0
  629. package/scripts/lib/autostart-linux.js +347 -0
  630. package/scripts/lib/autostart-macos.js +360 -0
  631. package/scripts/lib/autostart-windows.js +307 -0
  632. package/scripts/lib/budget-enforcer.js +252 -0
  633. package/scripts/lib/claude-sessions.js +285 -0
  634. package/scripts/lib/configurar-ci.js +380 -0
  635. package/scripts/lib/console-span-exporter.js +92 -0
  636. package/scripts/lib/contadores-inventario.js +217 -0
  637. package/scripts/lib/dashboard-widgets.js +290 -0
  638. package/scripts/lib/detectar-runtime.js +279 -0
  639. package/scripts/lib/detectar-stack.js +187 -0
  640. package/scripts/lib/diary-entry.js +234 -0
  641. package/scripts/lib/drift-detector.js +545 -0
  642. package/scripts/lib/estado.js +124 -0
  643. package/scripts/lib/gestor-componentes.js +243 -0
  644. package/scripts/lib/gitignore-manifest.js +305 -0
  645. package/scripts/lib/graph-analyze.py +556 -0
  646. package/scripts/lib/graph-builder.py +485 -0
  647. package/scripts/lib/graph-cluster.py +259 -0
  648. package/scripts/lib/health-row.js +168 -0
  649. package/scripts/lib/hooks-settings.js +789 -0
  650. package/scripts/lib/manifiestos.js +138 -0
  651. package/scripts/lib/mc-client.js +137 -0
  652. package/scripts/lib/notificaciones-telegram.js +1107 -0
  653. package/scripts/lib/npm-version.js +261 -0
  654. package/scripts/lib/paquetes-conocidos.js +50 -0
  655. package/scripts/lib/preservar-usuario.js +586 -0
  656. package/scripts/lib/prompt-builder.js +264 -0
  657. package/scripts/lib/resolver-externo.js +332 -0
  658. package/scripts/lib/schedule-parser.js +305 -0
  659. package/scripts/lib/scoring-instintos.js +240 -0
  660. package/scripts/lib/seguridad.js +160 -0
  661. package/scripts/lib/selector-interactivo.js +152 -0
  662. package/scripts/lib/semantic-search.js +242 -0
  663. package/scripts/lib/skill-discovery.js +234 -0
  664. package/scripts/lib/skill-metrics.js +246 -0
  665. package/scripts/lib/skill-normalizer.js +112 -0
  666. package/scripts/lib/skills-hub.js +340 -0
  667. package/scripts/lib/span-schema.js +134 -0
  668. package/scripts/lib/tool-cost-analyzer.js +255 -0
  669. package/scripts/lib/tracing-processor-interface.js +286 -0
  670. package/scripts/lib/transformadores/base.js +80 -0
  671. package/scripts/lib/transformadores/claude.js +124 -0
  672. package/scripts/lib/transformadores/codex.js +115 -0
  673. package/scripts/lib/transformadores/copilot.js +106 -0
  674. package/scripts/lib/transformadores/gemini.js +74 -0
  675. package/scripts/lib/transformadores/index.js +35 -0
  676. package/scripts/lib/transformadores/opencode.js +75 -0
  677. package/scripts/lib/ui.js +259 -0
  678. package/scripts/limpiar-artefactos-python.js +131 -0
  679. package/scripts/mcp-orchestrator.py +386 -0
  680. package/scripts/mcp-pool-manager.py +352 -0
  681. package/scripts/mcp-telemetry.py +378 -0
  682. package/scripts/poblar-evolvable.js +226 -0
  683. package/scripts/publicar.js +287 -0
  684. package/scripts/reflect-skills.js +403 -0
  685. package/scripts/rotar-audit-logs.js +185 -0
  686. package/scripts/run-skill-evals.js +242 -0
  687. package/scripts/smoke-test.js +374 -0
  688. package/scripts/token-analysis.py +471 -0
  689. package/scripts/validar-manifest.js +195 -0
  690. package/scripts/validar-memoria.js +321 -0
  691. package/scripts/validar-tests-aislamiento.js +184 -0
  692. package/scripts/validar-tokens-test.js +208 -0
  693. package/scripts/validar.js +147 -0
  694. package/scripts/validate-markdown.py +339 -0
  695. package/scripts/validate-skills.py +385 -0
  696. package/scripts/vendor/claude-usage/README.md +116 -0
  697. package/scripts/vendor/claude-usage/cli.py +334 -0
  698. package/scripts/vendor/claude-usage/dashboard.py +795 -0
  699. package/scripts/vendor/claude-usage/scanner.py +467 -0
  700. package/scripts/vendor/markitdown/cli.py +194 -0
  701. package/scripts/verificar-evolucion.js +289 -0
  702. package/scripts/verificar-release.js +494 -0
@@ -0,0 +1,283 @@
1
+ # Node.js Experto — Patrones Completos de Referencia
2
+
3
+ Implementaciones completas de Express, Fastify, streams, worker threads, ORMs y más.
4
+
5
+ ---
6
+
7
+ ## Fastify — Setup Recomendado
8
+
9
+ ```typescript
10
+ // src/app.ts
11
+ import Fastify from 'fastify';
12
+ import { TypeBoxTypeProvider } from '@fastify/type-provider-typebox';
13
+
14
+ const app = Fastify({
15
+ logger: {
16
+ level: process.env.LOG_LEVEL ?? 'info',
17
+ transport: process.env.NODE_ENV === 'development'
18
+ ? { target: 'pino-pretty' }
19
+ : undefined,
20
+ },
21
+ }).withTypeProvider<TypeBoxTypeProvider>();
22
+
23
+ await app.register(import('@fastify/cors'), {
24
+ origin: process.env.CORS_ORIGIN?.split(',') ?? false,
25
+ });
26
+ await app.register(import('@fastify/helmet'));
27
+ await app.register(import('./routes/usuarios'), { prefix: '/api/v1/usuarios' });
28
+
29
+ export { app };
30
+ ```
31
+
32
+ ## Express — Con TypeScript Moderno
33
+
34
+ ```typescript
35
+ import express, { Express } from 'express';
36
+ import { usuariosRouter } from './routes/usuarios';
37
+ import { errorMiddleware } from './middleware/error';
38
+
39
+ export function createApp(): Express {
40
+ const app = express();
41
+ app.use(express.json());
42
+ app.use(express.urlencoded({ extended: true }));
43
+ app.use('/api/v1/usuarios', usuariosRouter);
44
+ app.use(errorMiddleware);
45
+ return app;
46
+ }
47
+ ```
48
+
49
+ ---
50
+
51
+ ## Streams y Buffers — Ejemplos Completos
52
+
53
+ ### Procesar archivo grande sin cargar en memoria
54
+
55
+ ```typescript
56
+ import { createReadStream, createWriteStream } from 'fs';
57
+ import { pipeline } from 'stream/promises';
58
+ import { createGzip } from 'zlib';
59
+ import { Transform } from 'stream';
60
+
61
+ async function procesarArchivoGrande(entrada: string, salida: string): Promise<void> {
62
+ const transformador = new Transform({
63
+ objectMode: false,
64
+ transform(chunk: Buffer, _encoding, callback) {
65
+ const procesado = chunk.toString().toUpperCase();
66
+ callback(null, procesado);
67
+ },
68
+ });
69
+ await pipeline(createReadStream(entrada), transformador, createGzip(), createWriteStream(salida));
70
+ }
71
+ ```
72
+
73
+ ### Streaming HTTP response
74
+
75
+ ```typescript
76
+ import { Readable } from 'stream';
77
+
78
+ app.get('/exportar', async (req, reply) => {
79
+ reply.header('Content-Type', 'text/csv');
80
+ reply.header('Content-Disposition', 'attachment; filename="export.csv"');
81
+ const stream = Readable.from(generarCSV());
82
+ return reply.send(stream);
83
+ });
84
+
85
+ async function* generarCSV(): AsyncGenerator<string> {
86
+ yield 'id,nombre,email\n';
87
+ const cursor = db.usuario.cursor();
88
+ for await (const usuario of cursor) {
89
+ yield `${usuario.id},${usuario.nombre},${usuario.email}\n`;
90
+ }
91
+ }
92
+ ```
93
+
94
+ ---
95
+
96
+ ## Worker Threads y Clustering
97
+
98
+ ### Worker Threads
99
+
100
+ ```typescript
101
+ // src/workers/procesador.worker.ts
102
+ import { workerData, parentPort } from 'worker_threads';
103
+
104
+ function procesarIntensivo(datos: number[]): number {
105
+ return datos.reduce((acc, n) => acc + Math.sqrt(n), 0);
106
+ }
107
+
108
+ const resultado = procesarIntensivo(workerData.datos);
109
+ parentPort!.postMessage({ resultado });
110
+
111
+ // src/services/procesamiento.service.ts
112
+ import { Worker } from 'worker_threads';
113
+ import path from 'path';
114
+
115
+ export function procesarEnWorker(datos: number[]): Promise<number> {
116
+ return new Promise((resolve, reject) => {
117
+ const worker = new Worker(
118
+ path.resolve(__dirname, '../workers/procesador.worker.js'),
119
+ { workerData: { datos } },
120
+ );
121
+ worker.once('message', ({ resultado }) => resolve(resultado));
122
+ worker.once('error', reject);
123
+ worker.once('exit', code => {
124
+ if (code !== 0) reject(new Error(`Worker salió con código ${code}`));
125
+ });
126
+ });
127
+ }
128
+ ```
129
+
130
+ ### Pool de workers con Piscina
131
+
132
+ ```typescript
133
+ import { Piscina } from 'piscina';
134
+
135
+ const pool = new Piscina({
136
+ filename: path.resolve(__dirname, 'workers/procesador.worker.js'),
137
+ maxThreads: Math.max(1, os.cpus().length - 1),
138
+ });
139
+
140
+ const resultado = await pool.run({ datos: arrayGrande });
141
+ ```
142
+
143
+ ### Clustering
144
+
145
+ ```typescript
146
+ import cluster from 'cluster';
147
+ import os from 'os';
148
+
149
+ if (cluster.isPrimary) {
150
+ const numCPUs = os.cpus().length;
151
+ for (let i = 0; i < numCPUs; i++) cluster.fork();
152
+ cluster.on('exit', (worker, code) => {
153
+ console.log(`Worker ${worker.process.pid} murió (código ${code}), reiniciando...`);
154
+ cluster.fork();
155
+ });
156
+ } else {
157
+ const { app } = await import('./app');
158
+ app.listen(3000, () => console.log(`Worker ${process.pid} escuchando en 3000`));
159
+ }
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Prisma — Patterns de Producción
165
+
166
+ ```typescript
167
+ import { PrismaClient } from '@prisma/client';
168
+
169
+ const globalForPrisma = globalThis as unknown as { prisma: PrismaClient };
170
+
171
+ export const prisma =
172
+ globalForPrisma.prisma ??
173
+ new PrismaClient({
174
+ log: process.env.NODE_ENV === 'development' ? ['query', 'warn', 'error'] : ['error'],
175
+ });
176
+
177
+ if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma;
178
+
179
+ // Query tipada con include
180
+ const usuario = await prisma.usuario.findUniqueOrThrow({
181
+ where: { id },
182
+ include: { perfil: true, roles: { include: { permisos: true } } },
183
+ });
184
+
185
+ // Transacción
186
+ const resultado = await prisma.$transaction(async (tx) => {
187
+ const user = await tx.usuario.create({ data: usuarioData });
188
+ await tx.auditLog.create({ data: { accion: 'CREATE', entityId: user.id } });
189
+ return user;
190
+ });
191
+ ```
192
+
193
+ ## Drizzle — Schema y Queries
194
+
195
+ ```typescript
196
+ import { pgTable, uuid, varchar, boolean, timestamp } from 'drizzle-orm/pg-core';
197
+
198
+ export const usuarios = pgTable('usuarios', {
199
+ id: uuid('id').defaultRandom().primaryKey(),
200
+ nombre: varchar('nombre', { length: 255 }).notNull(),
201
+ email: varchar('email', { length: 255 }).notNull().unique(),
202
+ activo: boolean('activo').default(true).notNull(),
203
+ creadoEn: timestamp('creado_en').defaultNow().notNull(),
204
+ });
205
+
206
+ const activos = await db
207
+ .select().from(usuarios)
208
+ .where(eq(usuarios.activo, true))
209
+ .orderBy(asc(usuarios.nombre))
210
+ .limit(20);
211
+ ```
212
+
213
+ ---
214
+
215
+ ## Validación con Zod
216
+
217
+ ```typescript
218
+ import { z } from 'zod';
219
+
220
+ export const UsuarioCreateSchema = z.object({
221
+ nombre: z.string().min(2, 'Nombre muy corto').max(100),
222
+ email: z.string().email('Email inválido'),
223
+ edad: z.number().int().min(18).max(120).optional(),
224
+ rol: z.enum(['admin', 'usuario', 'moderador']).default('usuario'),
225
+ });
226
+
227
+ export type UsuarioCreate = z.infer<typeof UsuarioCreateSchema>;
228
+
229
+ export function validar<T>(schema: z.ZodSchema<T>) {
230
+ return asyncHandler(async (req, _res, next) => {
231
+ const resultado = schema.safeParse(req.body);
232
+ if (!resultado.success) {
233
+ throw new ValidationError(
234
+ 'Datos de entrada inválidos',
235
+ resultado.error.flatten().fieldErrors as Record<string, string[]>,
236
+ );
237
+ }
238
+ req.body = resultado.data;
239
+ next();
240
+ });
241
+ }
242
+ ```
243
+
244
+ ---
245
+
246
+ ## Graceful Shutdown
247
+
248
+ ```typescript
249
+ import { app } from './app';
250
+ import { prisma } from './lib/prisma';
251
+ import { logger } from './lib/logger';
252
+
253
+ const server = app.listen(3000);
254
+
255
+ async function shutdown(signal: string): Promise<void> {
256
+ logger.info(`Recibida señal ${signal}, iniciando graceful shutdown`);
257
+ server.close(async () => {
258
+ try {
259
+ await prisma.$disconnect();
260
+ logger.info('Graceful shutdown completado');
261
+ process.exit(0);
262
+ } catch (err) {
263
+ logger.error({ err }, 'Error durante graceful shutdown');
264
+ process.exit(1);
265
+ }
266
+ });
267
+ setTimeout(() => {
268
+ logger.error('Graceful shutdown timeout — forzando cierre');
269
+ process.exit(1);
270
+ }, 10_000);
271
+ }
272
+
273
+ process.on('SIGTERM', () => shutdown('SIGTERM'));
274
+ process.on('SIGINT', () => shutdown('SIGINT'));
275
+ process.on('unhandledRejection', (reason, promise) => {
276
+ logger.error({ reason, promise }, 'Unhandled Promise Rejection');
277
+ shutdown('unhandledRejection');
278
+ });
279
+ process.on('uncaughtException', (err) => {
280
+ logger.error({ err }, 'Uncaught Exception');
281
+ process.exit(1);
282
+ });
283
+ ```
@@ -0,0 +1,159 @@
1
+ ---
2
+ name: notificaciones-multicanal
3
+ description: Sistema de notificaciones para el agente notificador-swl. Cubre configuración de canales (desktop, Telegram, WhatsApp, email, webhook), formato de mensaje por canal, priorización de eventos, rate limiting, templates, integración con claude-notifications-go y ejemplos de config.json.
4
+ version: "1.0.0"
5
+ herramientasPermitidas: [Read, Bash]
6
+ evolvable: true # default para skill estandar
7
+ exclusiones:
8
+ - "No cargar para notificaciones push del navegador al usuario final (Web Push API, PWA notifications) — para notificaciones al usuario en el frontend cargar `frontend-avanzado`."
9
+ - "No cargar para alertas de monitoreo de sistemas en producción (Prometheus Alertmanager, PagerDuty, OpsGenie) — para alerting de observabilidad cargar `monitoring-alertas`."
10
+ - "No cargar para envío masivo de correos de marketing o transaccionales a usuarios finales (SendGrid, Mailchimp, SES para millones de destinatarios) — para email marketing cargar el skill del proveedor correspondiente."
11
+ - "No cargar para notificaciones en tiempo real dentro de la app de usuario (WebSockets, SSE para actualizar la UI) — para realtime en el cliente cargar `frontend-avanzado`."
12
+ ---
13
+ # Notificaciones Multicanal — notificador-swl
14
+
15
+ ## Cuándo NO cargar
16
+
17
+ - La tarea es notificaciones push del navegador al usuario final (Web Push, PWA): cargar `frontend-avanzado`.
18
+ - La tarea es alerting de monitoreo de sistemas (Prometheus Alertmanager, PagerDuty): cargar `monitoring-alertas`.
19
+ - La tarea es envío masivo de correos a usuarios finales (marketing, transaccional a millones): cargar el skill del proveedor de email.
20
+ - La tarea es actualizar la UI en tiempo real vía WebSockets o SSE: cargar `frontend-avanzado`.
21
+
22
+ ## Visión General
23
+
24
+ El sistema de notificaciones multicanal permite que los agentes SWL comuniquen
25
+ eventos importantes al humano a través de múltiples canales, priorizando según
26
+ la urgencia y respetando el tiempo de atención del receptor.
27
+
28
+ El binario `claude-notifications-go` actúa como broker central:
29
+ recibe eventos via stdin (JSON) o HTTP local y los enruta al canal apropiado.
30
+
31
+ ```
32
+ Agente SWL
33
+ |
34
+ v
35
+ claude-notifications-go --> Desktop (nativo OS)
36
+ | --> Telegram Bot
37
+ | --> WhatsApp Business API
38
+ | --> Email (SMTP)
39
+ +-------------------> Webhook HTTP
40
+ ```
41
+
42
+ ---
43
+
44
+ ## Reglas Obligatorias
45
+
46
+ 1. **NUNCA hardcodear tokens en config.json** — usar siempre variables de entorno (`${TELEGRAM_BOT_TOKEN}`).
47
+ 2. **La notificación es best-effort, NO bloqueante** — si falla, el hook NO debe fallar.
48
+ 3. **SIEMPRE incluir `proyecto` en el payload** — sin él, es imposible filtrar en el historial.
49
+ 4. **NUNCA usar prioridad `critico` para eventos rutinarios** — causa fatiga de alertas.
50
+ 5. **SIEMPRE configurar horario No Molestar** — interrupciones fuera de horario son inaceptables.
51
+ 6. **Canal email: máximo 1 vez por hora** — no para eventos de alta frecuencia.
52
+
53
+ ---
54
+
55
+ ## Priorización de Eventos
56
+
57
+ | Nivel | Canales activados | Ejemplos |
58
+ |-------|------------------|---------|
59
+ | `critico` | Todos los canales simultáneamente | Error irreversible, pérdida de datos |
60
+ | `urgente` | Desktop + Telegram (simultáneo) | human-action bloqueante |
61
+ | `alta` | Desktop + Telegram (secuencial) | checkpoint decision |
62
+ | `normal` | Canal primario únicamente | human-verify, progreso |
63
+ | `baja` | Solo log local | Métricas, telemetría interna |
64
+
65
+ ### Mapeo evento a prioridad
66
+
67
+ ```jsonc
68
+ {
69
+ "mapeo": {
70
+ "checkpoint.human-action": "urgente",
71
+ "checkpoint.decision": "alta",
72
+ "checkpoint.human-verify": "normal",
73
+ "error.critico": "critico",
74
+ "error.recuperable": "alta",
75
+ "fase.completada": "normal",
76
+ "alerta.seguridad": "critico"
77
+ }
78
+ }
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Integración con claude-notifications-go
84
+
85
+ ### Envío desde hook (stdin)
86
+
87
+ ```javascript
88
+ // hooks/notify.js
89
+ const { execSync } = require('child_process');
90
+
91
+ function notificar(evento) {
92
+ const payload = JSON.stringify(evento);
93
+ try {
94
+ execSync('claude-notifications-go send', {
95
+ input: payload,
96
+ stdio: ['pipe', 'ignore', 'ignore'],
97
+ timeout: 5000,
98
+ });
99
+ } catch {
100
+ // Fallo silencioso — la notificación no es crítica para el flujo
101
+ }
102
+ }
103
+
104
+ notificar({
105
+ tipo: 'checkpoint.human-verify',
106
+ proyecto: process.env.PROJECT_NAME,
107
+ titulo: 'Slice 1 completado',
108
+ resumen: 'CRUD de usuarios implementado y testeado.',
109
+ accion_requerida: true,
110
+ });
111
+ ```
112
+
113
+ ### Envío via HTTP local
114
+
115
+ ```bash
116
+ curl -s -X POST http://localhost:19999/notify \
117
+ -H "Content-Type: application/json" \
118
+ -d '{
119
+ "tipo": "checkpoint.decision",
120
+ "proyecto": "sigaf-backend",
121
+ "titulo": "Decision requerida: motor de base de datos",
122
+ "prioridad": "alta"
123
+ }'
124
+ ```
125
+
126
+ ### Comandos de gestión
127
+
128
+ ```bash
129
+ claude-notifications-go start --config ~/.claude/notifications/config.json
130
+ claude-notifications-go status
131
+ claude-notifications-go test --canal telegram
132
+ claude-notifications-go log --ultimas 20
133
+ claude-notifications-go flush-queue
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Anti-patrones
139
+
140
+ - Enviar notificaciones de prioridad `critico` para eventos rutinarios (fatiga de alertas)
141
+ - Hardcodear tokens en `config.json` en lugar de usar variables de entorno
142
+ - No configurar el horario No Molestar (interrupciones fuera de horario)
143
+ - Fallar el hook si la notificación falla (la notificación es best-effort)
144
+ - Usar el canal email para eventos de alta frecuencia
145
+ - Omitir `proyecto` en el payload
146
+
147
+ ---
148
+
149
+ Para configuración completa de canales (config.json), formato de mensaje por canal (Desktop, Telegram, WhatsApp, Email, Webhook), rate limiting, supresión de duplicados, templates de mensajes y flujo de diagnóstico, ver [recursos/configuracion-y-templates.md](recursos/configuracion-y-templates.md).
150
+
151
+ ## Gotchas / Errores comunes no obvios
152
+
153
+ **El hook falla cuando `claude-notifications-go` no está en el PATH del proceso de Claude Code aunque esté instalado globalmente**: Claude Code ejecuta hooks con un PATH reducido (sin `~/.local/bin` ni `/usr/local/bin` en algunas configuraciones de shell). Si el binario está instalado fuera del PATH del sistema base, el `execSync('claude-notifications-go send')` lanza `ENOENT` y, si el catch está vacío como se recomienda, el hook silencia el error sin notificar nada. Causa: el PATH del proceso de hook depende del shell y la configuración del usuario, no del PATH interactivo. Fix: usar la ruta absoluta del binario: `which claude-notifications-go` para obtenerla y configurarla como variable en el hook, o añadir el directorio de instalación a `PATH` en el archivo de perfil del shell que Claude Code hereda.
154
+
155
+ **Los mensajes de Telegram con más de 4,096 caracteres son silenciosamente truncados por la API de Telegram sin error**: si el campo `resumen` del payload incluye stack traces o diffs largos, la API retorna `ok: true` pero el usuario recibe el mensaje cortado sin ningún indicador visual de que falta contenido. Causa: la API de Telegram Bot tiene un límite de 4,096 caracteres por mensaje en modo texto y 1,024 en modo caption. Fix: en el hook, truncar el `resumen` a 3,500 caracteres antes de enviar y agregar `"\n... [mensaje truncado]"` si se supera el límite. Alternativamente, enviar como archivo adjunto `.txt` para mensajes largos.
156
+
157
+ **El canal email falla silenciosamente cuando el servidor SMTP requiere TLS pero `claude-notifications-go` está configurado con `port: 25` (plaintext)**: la conexión se establece pero el servidor SMTP rechaza los comandos de autenticación sin TLS. El error del servidor (`534 Authentication required`) llega como respuesta SMTP pero `claude-notifications-go` lo registra en su log local, no lo propaga al hook. Causa: el puerto 25 es para relay servidor-a-servidor sin autenticación; los usuarios deben usar 587 (STARTTLS) o 465 (SSL/TLS). Fix: configurar `port: 587` con `tls: starttls` o `port: 465` con `tls: ssl` en `config.json` según el proveedor SMTP. Verificar con `claude-notifications-go test --canal email` que devuelve éxito.
158
+
159
+ **La prioridad `critico` activa todos los canales simultáneamente, y si el canal email tiene rate limiting de 1/hora, el segundo evento crítico en menos de una hora llega sin el correo aunque sí por Telegram y desktop**: el usuario recibe la notificación pero asume que "falta el email" es un fallo del sistema, cuando en realidad es el rate limiting configurado. Causa: el rate limiting por canal se aplica independientemente de la prioridad del evento. Fix: excluir el canal email del rate limiting para eventos de prioridad `critico`, ya que son raros por definición (si son frecuentes, el problema es el uso incorrecto de la prioridad). Documentar en el runbook qué canales tienen rate limiting para evitar confusión operacional.
@@ -0,0 +1,115 @@
1
+ {
2
+ "_instrucciones": [
3
+ "Copiar este archivo a ~/.claude/notifications/config.json",
4
+ "Reemplazar los valores entre <angulos> con los valores reales",
5
+ "Las credenciales sensibles deben ir en variables de entorno (sintaxis ${VAR})",
6
+ "Borrar este campo '_instrucciones' antes de usar el archivo"
7
+ ],
8
+ "version": "2",
9
+ "defaults": {
10
+ "canal_primario": "desktop",
11
+ "prioridad_minima": "normal",
12
+ "idioma": "es-MX",
13
+ "zona_horaria": "America/Mexico_City"
14
+ },
15
+ "notificaciones": {
16
+ "desktop": {
17
+ "enabled": true,
18
+ "motor": "auto",
19
+ "icono": "~/.claude/assets/swl-icon.png",
20
+ "sonido": true,
21
+ "duracion_ms": 5000,
22
+ "persistente_si_prioridad": "urgente"
23
+ },
24
+ "telegram": {
25
+ "enabled": false,
26
+ "bot_token": "${TELEGRAM_BOT_TOKEN}",
27
+ "chat_id": "${TELEGRAM_CHAT_ID}",
28
+ "parse_mode": "HTML",
29
+ "disable_preview": true,
30
+ "timeout_segundos": 10,
31
+ "_nota": "Crear bot en @BotFather, obtener token. Agregar bot al chat y obtener chat_id via /getUpdates"
32
+ },
33
+ "whatsapp": {
34
+ "enabled": false,
35
+ "proveedor": "twilio",
36
+ "account_sid": "${TWILIO_ACCOUNT_SID}",
37
+ "auth_token": "${TWILIO_AUTH_TOKEN}",
38
+ "from_number": "${TWILIO_WHATSAPP_FROM}",
39
+ "to_number": "${WHATSAPP_TO_NUMBER}",
40
+ "_nota": "Requiere cuenta Twilio con WhatsApp Sandbox habilitado. from_number formato: whatsapp:+14155238886"
41
+ },
42
+ "email": {
43
+ "enabled": false,
44
+ "smtp_host": "${SMTP_HOST}",
45
+ "smtp_port": 587,
46
+ "smtp_user": "${SMTP_USER}",
47
+ "smtp_password": "${SMTP_PASSWORD}",
48
+ "smtp_tls": true,
49
+ "from": "swl-notifier@<tu-dominio.com>",
50
+ "to": ["<destinatario@empresa.com>"],
51
+ "asunto_prefijo": "[SWL]",
52
+ "_nota": "Para Gmail usar smtp.gmail.com:587 con App Password (no la contraseña de la cuenta)"
53
+ },
54
+ "webhook": {
55
+ "enabled": false,
56
+ "url": "${WEBHOOK_URL}",
57
+ "metodo": "POST",
58
+ "headers": {
59
+ "Authorization": "Bearer ${WEBHOOK_TOKEN}",
60
+ "Content-Type": "application/json"
61
+ },
62
+ "timeout_segundos": 5,
63
+ "reintentos": 2,
64
+ "_nota": "El payload enviado sigue el esquema de webhook definido en la habilidad notificaciones-multicanal"
65
+ }
66
+ },
67
+ "prioridades": {
68
+ "mapeo": {
69
+ "checkpoint.human-action": "urgente",
70
+ "checkpoint.decision": "alta",
71
+ "checkpoint.human-verify": "normal",
72
+ "error.critico": "critico",
73
+ "error.recuperable": "alta",
74
+ "fase.completada": "normal",
75
+ "fase.iniciada": "baja",
76
+ "tarea.completada": "baja",
77
+ "alerta.seguridad": "critico"
78
+ },
79
+ "canales_por_nivel": {
80
+ "critico": ["desktop", "telegram", "email", "whatsapp"],
81
+ "urgente": ["desktop", "telegram"],
82
+ "alta": ["desktop", "telegram"],
83
+ "normal": ["desktop"],
84
+ "baja": []
85
+ }
86
+ },
87
+ "rate_limiting": {
88
+ "ventana_segundos": 300,
89
+ "maximo_por_ventana": {
90
+ "desktop": 10,
91
+ "telegram": 20,
92
+ "whatsapp": 5,
93
+ "email": 3,
94
+ "webhook": 50
95
+ },
96
+ "excepcion_prioridades": ["critico", "urgente"]
97
+ },
98
+ "no_molestar": {
99
+ "habilitado": false,
100
+ "inicio": "22:00",
101
+ "fin": "08:00",
102
+ "zona_horaria": "America/Mexico_City",
103
+ "excepciones": ["critico"],
104
+ "acumulacion": {
105
+ "habilitada": true,
106
+ "resumen_en": "08:00",
107
+ "canal_resumen": "telegram"
108
+ }
109
+ },
110
+ "deduplicacion": {
111
+ "habilitada": true,
112
+ "ventana_segundos": 60,
113
+ "clave": "evento.tipo + evento.proyecto + mensaje.titulo"
114
+ }
115
+ }