@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,175 @@
1
+ # Regla: Estilo de Código — Next.js
2
+
3
+ Aplica a todo código Next.js del proyecto. El App Router introduce un modelo
4
+ mental distinto al Pages Router: los componentes son Server Components por defecto
5
+ y el cliente es la excepción. Estas reglas establecen cuándo cruzar esa frontera
6
+ y cómo mantener el código legible y navegable.
7
+
8
+ ---
9
+
10
+ ## ESLint + eslint-config-next (obligatorio)
11
+
12
+ - `eslint-config-next` se instala con `create-next-app` y es obligatorio.
13
+ - Ningún PR se aprueba con warnings de ESLint activos.
14
+ - Ejecutar antes de cada commit:
15
+ ```bash
16
+ next lint
17
+ ```
18
+ - CI falla si `next lint` reporta errores o warnings.
19
+ - Reglas adicionales recomendadas en `.eslintrc.json`:
20
+ ```json
21
+ {
22
+ "extends": ["next/core-web-vitals"],
23
+ "rules": {
24
+ "no-console": "error",
25
+ "prefer-const": "error"
26
+ }
27
+ }
28
+ ```
29
+
30
+ ---
31
+
32
+ ## Prettier como formateador
33
+
34
+ - Prettier define el estilo de formato. No se debate sobre indentado o comillas.
35
+ - Configuración mínima en `.prettierrc`:
36
+ ```json
37
+ {
38
+ "semi": false,
39
+ "singleQuote": true,
40
+ "tabWidth": 2,
41
+ "trailingComma": "all",
42
+ "printWidth": 100
43
+ }
44
+ ```
45
+ - Ejecutar `prettier --check .` en CI. Bloquear merge si hay diferencias.
46
+ - Integrar con el editor: guardar debe formatear automáticamente.
47
+
48
+ ---
49
+
50
+ ## App Router como patrón principal
51
+
52
+ - Todo proyecto nuevo usa **App Router** (`app/`). No usar Pages Router (`pages/`)
53
+ para proyectos iniciados con Next.js 13.4+.
54
+ - La migración de Pages a App Router no se hace parcialmente en un PR —
55
+ documentar como ADR si se decide migrar.
56
+
57
+ ---
58
+
59
+ ## "use client" solo cuando es estrictamente necesario
60
+
61
+ - Los componentes son **Server Components por defecto**. No agregar `"use client"`
62
+ por costumbre o para evitar errores que aún no ocurrieron.
63
+
64
+ **Cuándo SÍ usar `"use client"`:**
65
+ - El componente usa `useState`, `useReducer`, `useContext`
66
+ - El componente usa `useEffect`, `useLayoutEffect`
67
+ - El componente usa event handlers (`onClick`, `onChange`, `onSubmit`)
68
+ - El componente usa APIs del browser (`window`, `document`, `navigator`)
69
+ - El componente usa librerías que solo funcionan en el cliente
70
+
71
+ **Cuándo NO usar `"use client"`:**
72
+ - Solo para hacer fetch de datos (usar Server Component con `async/await`)
73
+ - Solo para leer variables de entorno del servidor
74
+ - Solo para acceder a la BD o servicios internos
75
+
76
+ ```tsx
77
+ // MAL — "use client" innecesario para solo mostrar datos
78
+ 'use client'
79
+
80
+ export default function ListaFacturas() {
81
+ const [facturas, setFacturas] = useState([])
82
+ useEffect(() => {
83
+ fetch('/api/facturas').then(r => r.json()).then(setFacturas)
84
+ }, [])
85
+ return <ul>{facturas.map(f => <li key={f.id}>{f.folio}</li>)}</ul>
86
+ }
87
+
88
+ // BIEN — Server Component, fetch en el servidor
89
+ export default async function ListaFacturas() {
90
+ const facturas = await obtenerFacturas()
91
+ return <ul>{facturas.map(f => <li key={f.id}>{f.folio}</li>)}</ul>
92
+ }
93
+ ```
94
+
95
+ ---
96
+
97
+ ## Convenciones de archivos del App Router
98
+
99
+ | Archivo | Propósito |
100
+ |---------|-----------|
101
+ | `page.tsx` | Ruta pública de la URL |
102
+ | `layout.tsx` | Layout compartido entre páginas del segmento |
103
+ | `loading.tsx` | UI de carga con Suspense automático |
104
+ | `error.tsx` | Boundary de error del segmento (`"use client"` obligatorio) |
105
+ | `not-found.tsx` | UI para `notFound()` |
106
+ | `route.ts` | Route handler (API endpoint) |
107
+ | `middleware.ts` | Middleware (solo en raíz del proyecto) |
108
+
109
+ - NUNCA crear un `page.tsx` con lógica de negocio. `page.tsx` solo orquesta
110
+ componentes y pasa datos.
111
+
112
+ ---
113
+
114
+ ## Metadata API para SEO
115
+
116
+ ```tsx
117
+ // MAL — Head component del Pages Router, obsoleto en App Router
118
+ import Head from 'next/head'
119
+ export default function Page() {
120
+ return <><Head><title>Mi página</title></Head>...</>
121
+ }
122
+
123
+ // BIEN — Metadata API estática
124
+ export const metadata: Metadata = {
125
+ title: 'Mi página',
126
+ description: 'Descripción de la página',
127
+ }
128
+
129
+ // BIEN — Metadata API dinámica
130
+ export async function generateMetadata({ params }): Promise<Metadata> {
131
+ const producto = await obtenerProducto(params.id)
132
+ return { title: producto.nombre }
133
+ }
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Image y Link components obligatorios
139
+
140
+ ```tsx
141
+ // MAL — <img> nativo sin optimización
142
+ <img src="/logo.png" alt="Logo" />
143
+
144
+ // BIEN — Image con optimización automática
145
+ import Image from 'next/image'
146
+ <Image src="/logo.png" alt="Logo" width={120} height={40} priority />
147
+
148
+ // MAL — <a> nativo sin prefetch
149
+ <a href="/facturas">Ver facturas</a>
150
+
151
+ // BIEN — Link con prefetch automático
152
+ import Link from 'next/link'
153
+ <Link href="/facturas">Ver facturas</Link>
154
+ ```
155
+
156
+ ---
157
+
158
+ ## Longitud máxima: 100 líneas por componente
159
+
160
+ - Un componente que supera 100 líneas hace demasiado. Extraer subcomponentes.
161
+ - Colocar los subcomponentes en el mismo directorio que el componente padre si
162
+ solo se usan ahí. Mover a `components/shared/` solo cuando se reutilizan.
163
+
164
+ ---
165
+
166
+ ## Checklist de estilo antes de hacer commit
167
+
168
+ - [ ] `next lint` pasa sin errores ni warnings
169
+ - [ ] `prettier --check .` pasa sin diferencias
170
+ - [ ] Sin `"use client"` que pueda eliminarse
171
+ - [ ] Imágenes con `<Image>`, no `<img>`
172
+ - [ ] Navegación con `<Link>`, no `<a>`
173
+ - [ ] SEO con Metadata API, no con `<Head>`
174
+ - [ ] Archivos nombrados según convenciones del App Router
175
+ - [ ] Componentes <= 100 líneas
@@ -0,0 +1,186 @@
1
+ # Regla: Hooks de Pre-commit y CI — Next.js
2
+
3
+ Los hooks de pre-commit y las verificaciones de CI detectan los errores más
4
+ comunes en Next.js App Router: código cliente innecesario, fetch sin caché
5
+ configurado, imágenes sin optimizar y errores de compilación.
6
+
7
+ ---
8
+
9
+ ## next lint — verificación de linting
10
+
11
+ Ejecutar antes de cada commit:
12
+
13
+ ```bash
14
+ next lint
15
+ ```
16
+
17
+ - Si reporta errores o warnings: **bloquear el commit**.
18
+ - La configuración de ESLint debe incluir `next/core-web-vitals` que cubre
19
+ reglas específicas de Next.js sobre Image, Link y rendimiento.
20
+ - En proyectos con monorepo: `next lint --dir apps/web`.
21
+
22
+ ---
23
+
24
+ ## next build — verificación de compilación
25
+
26
+ En CI, en cada PR:
27
+
28
+ ```bash
29
+ next build
30
+ ```
31
+
32
+ - Si el build falla: **bloquear el merge**.
33
+ - Los errores de TypeScript con `strict: true` también fallan el build.
34
+ El flag `ignoreBuildErrors: true` en `next.config.js` está prohibido en producción.
35
+ - El build también valida que todos los Server Components son correctamente `async`
36
+ y que los `"use client"` no intentan importar módulos solo del servidor.
37
+
38
+ ---
39
+
40
+ ## Detección de console.log en código no-test
41
+
42
+ ```bash
43
+ # En hook pre-commit o CI
44
+ git diff --cached --name-only \
45
+ | grep -E '\.(ts|tsx)$' \
46
+ | grep -v '\.test\.' \
47
+ | grep -v '\.spec\.' \
48
+ | grep -v '__tests__' \
49
+ | xargs grep -n 'console\.log\|console\.debug\|console\.warn' 2>/dev/null
50
+ ```
51
+
52
+ - Si encuentra `console.log` fuera de archivos de test: **bloquear el commit**.
53
+ - `console.error` en catch de errores inesperados es aceptable si viene acompañado
54
+ de un comentario y va a ser reemplazado por el logger del proyecto.
55
+
56
+ ---
57
+
58
+ ## Verificación de "use client" potencialmente innecesario
59
+
60
+ Detectar archivos con `"use client"` que no contienen hooks de estado ni eventos:
61
+
62
+ ```bash
63
+ # Script de verificación — reporta como advertencia, no bloquea
64
+ git diff --cached --name-only | grep '\.tsx$' | while read archivo; do
65
+ if grep -q '"use client"' "$archivo"; then
66
+ if ! grep -qE 'useState|useReducer|useEffect|useRef|onClick|onChange|onSubmit|useContext' "$archivo"; then
67
+ echo "ADVERTENCIA: $archivo tiene \"use client\" pero no usa hooks ni eventos. Verificar si es necesario."
68
+ fi
69
+ fi
70
+ done
71
+ ```
72
+
73
+ - Este check genera **advertencia**, no bloquea. El desarrollador revisa y decide.
74
+ - El revisor del PR verifica la justificación antes de aprobar.
75
+
76
+ ---
77
+
78
+ ## Verificación de fetch() sin configuración de caché
79
+
80
+ En Next.js App Router, un `fetch()` sin configuración de caché usa el valor por
81
+ defecto que puede cambiar entre versiones. Configurar explícitamente:
82
+
83
+ ```bash
84
+ # Detectar fetch sin next: o cache: configurado
85
+ grep -rn "fetch(" app/ lib/ --include='*.ts' --include='*.tsx' \
86
+ | grep -v '\.test\.' \
87
+ | grep -v 'next:\|cache:' \
88
+ | grep -v '// no-cache-ok'
89
+ ```
90
+
91
+ - Si encuentra `fetch(` sin `{ next: { revalidate: N } }` ni `{ cache: 'no-store' }`:
92
+ **reportar como advertencia en el PR**.
93
+ - El desarrollador agrega la configuración correcta o el comentario `// no-cache-ok`
94
+ con justificación.
95
+
96
+ **Referencia rápida de cuándo usar qué:**
97
+
98
+ | Situación | Configuración |
99
+ |-----------|--------------|
100
+ | Datos que cambian frecuentemente | `{ cache: 'no-store' }` |
101
+ | Datos semi-estáticos (catálogos) | `{ next: { revalidate: 3600 } }` |
102
+ | Datos que cambian por evento | `{ next: { tags: ['nombre-tag'] } }` |
103
+ | Datos completamente estáticos | Sin config (caché indefinido en build) |
104
+
105
+ ---
106
+
107
+ ## Verificación de imágenes sin Image component
108
+
109
+ ```bash
110
+ # Detectar <img> nativo en archivos TSX (excluir comentarios y strings)
111
+ git diff --cached --name-only | grep '\.tsx$' | xargs grep -n '<img ' 2>/dev/null \
112
+ | grep -v '^\s*//' \
113
+ | grep -v 'data-testid'
114
+ ```
115
+
116
+ - Si encuentra `<img` en archivos `.tsx`: **bloquear el commit**.
117
+ - Excepción: imágenes dentro de `dangerouslySetInnerHTML` (ya tienen su propio problema).
118
+ - El componente `<Image>` de `next/image` optimiza automáticamente el formato,
119
+ el tamaño y la carga lazy. Usar siempre.
120
+
121
+ ---
122
+
123
+ ## Script de pre-commit completo (referencia)
124
+
125
+ ```bash
126
+ #!/usr/bin/env bash
127
+ set -e
128
+
129
+ echo "==> Verificando linting (next lint)..."
130
+ npx next lint --quiet || {
131
+ echo "ERROR: Errores de ESLint. Corregir antes de commitear."
132
+ exit 1
133
+ }
134
+
135
+ echo "==> Verificando formato (Prettier)..."
136
+ npx prettier --check . || {
137
+ echo "ERROR: Hay archivos sin formatear. Ejecutar: npx prettier --write ."
138
+ exit 1
139
+ }
140
+
141
+ echo "==> Verificando console.log fuera de tests..."
142
+ ARCHIVOS=$(git diff --cached --name-only | grep -E '\.(ts|tsx)$' | grep -v '\.test\.\|\.spec\.\|__tests__' || true)
143
+ if [ -n "$ARCHIVOS" ]; then
144
+ if echo "$ARCHIVOS" | xargs grep -ln 'console\.log\|console\.debug' 2>/dev/null; then
145
+ echo "ERROR: Eliminar console.log/debug antes de commitear."
146
+ exit 1
147
+ fi
148
+ fi
149
+
150
+ echo "==> Verificando <img> sin next/image..."
151
+ ARCHIVOS_TSX=$(git diff --cached --name-only | grep '\.tsx$' || true)
152
+ if [ -n "$ARCHIVOS_TSX" ]; then
153
+ if echo "$ARCHIVOS_TSX" | xargs grep -ln '<img ' 2>/dev/null; then
154
+ echo "ERROR: Usar <Image> de next/image en lugar de <img>."
155
+ exit 1
156
+ fi
157
+ fi
158
+
159
+ echo "==> Pre-commit: OK"
160
+ ```
161
+
162
+ ---
163
+
164
+ ## Resumen de qué bloquea qué
165
+
166
+ | Verificación | Pre-commit | CI / PR | Severidad |
167
+ |-------------|-----------|---------|-----------|
168
+ | `next lint` | Bloquea | Bloquea | Error |
169
+ | Prettier | Bloquea | Bloquea | Error |
170
+ | `console.log` | Bloquea | Bloquea | Error |
171
+ | `<img>` nativo | Bloquea | Bloquea | Error |
172
+ | `next build` | No | Bloquea merge | Error |
173
+ | `"use client"` sin hooks | Advertencia | Advertencia | Warning |
174
+ | `fetch()` sin caché config | Advertencia | Advertencia | Warning |
175
+ | `npm audit` HIGH/CRITICAL | No | Bloquea merge | Error |
176
+
177
+ ---
178
+
179
+ ## Checklist de hooks antes de activar en un proyecto nuevo
180
+
181
+ - [ ] `next lint` configurado y ejecutado en pre-commit
182
+ - [ ] Prettier configurado con `.prettierrc` versionado
183
+ - [ ] Script de pre-commit instalado con `husky` o similar
184
+ - [ ] Pipeline de CI tiene los pasos: lint, prettier, build, test, audit
185
+ - [ ] `strict: true` en `tsconfig.json` para que el build detecte errores de tipos
186
+ - [ ] `ignoreBuildErrors` NO está en `next.config.js`
@@ -0,0 +1,225 @@
1
+ # Regla: Patrones de Arquitectura — Next.js (App Router)
2
+
3
+ El App Router de Next.js cambia fundamentalmente dónde y cómo se cargan datos.
4
+ Estos patrones aprovechan el modelo de Server Components para reducir el JavaScript
5
+ enviado al cliente, mejorar el rendimiento y simplificar la lógica de estado.
6
+
7
+ ---
8
+
9
+ ## Server Components: fetch en el servidor
10
+
11
+ La forma correcta de cargar datos es en el servidor, no en el cliente con `useEffect`.
12
+
13
+ ```tsx
14
+ // MAL — useEffect para cargar datos (patrón del Pages Router)
15
+ 'use client'
16
+ export default function PaginaFacturas() {
17
+ const [facturas, setFacturas] = useState<Factura[]>([])
18
+ const [cargando, setCargando] = useState(true)
19
+
20
+ useEffect(() => {
21
+ fetch('/api/facturas')
22
+ .then(r => r.json())
23
+ .then(data => { setFacturas(data); setCargando(false) })
24
+ }, [])
25
+
26
+ if (cargando) return <p>Cargando...</p>
27
+ return <ListaFacturas facturas={facturas} />
28
+ }
29
+
30
+ // BIEN — Server Component, fetch directo en el servidor
31
+ export default async function PaginaFacturas() {
32
+ const facturas = await obtenerFacturas() // llama directamente a la BD o API interna
33
+ return <ListaFacturas facturas={facturas} />
34
+ }
35
+ ```
36
+
37
+ - `obtenerFacturas()` puede llamar directamente a la BD, a un ORM o a un servicio
38
+ interno. No necesita pasar por una API REST si está en el mismo servidor.
39
+ - Next.js deduplica y cachea las llamadas automáticamente dentro del mismo render.
40
+
41
+ ---
42
+
43
+ ## Server Actions para mutaciones
44
+
45
+ Las mutaciones de datos van en Server Actions, no en Route Handlers cuando
46
+ son invocadas desde formularios o componentes del mismo servidor.
47
+
48
+ ```tsx
49
+ // app/facturas/actions.ts
50
+ 'use server'
51
+
52
+ import { revalidatePath } from 'next/cache'
53
+ import { redirect } from 'next/navigation'
54
+ import { z } from 'zod'
55
+
56
+ const EmitirFacturaSchema = z.object({
57
+ clienteId: z.coerce.number().int().positive(),
58
+ })
59
+
60
+ export async function emitirFactura(formData: FormData) {
61
+ const validado = EmitirFacturaSchema.safeParse({
62
+ clienteId: formData.get('clienteId'),
63
+ })
64
+
65
+ if (!validado.success) {
66
+ return { error: validado.error.flatten().fieldErrors }
67
+ }
68
+
69
+ await facturaService.emitir(validado.data.clienteId)
70
+ revalidatePath('/facturas')
71
+ redirect('/facturas')
72
+ }
73
+ ```
74
+
75
+ - Las Server Actions validan sus inputs server-side con zod. NUNCA asumir que
76
+ el cliente envió datos válidos.
77
+ - `revalidatePath()` o `revalidateTag()` para invalidar el caché después de mutaciones.
78
+
79
+ ---
80
+
81
+ ## Streaming con Suspense
82
+
83
+ - Envolver partes lentas del UI en `<Suspense>` para no bloquear el render completo:
84
+
85
+ ```tsx
86
+ import { Suspense } from 'react'
87
+
88
+ export default function Dashboard() {
89
+ return (
90
+ <main>
91
+ <ResumenRapido /> {/* datos rápidos, sin Suspense */}
92
+ <Suspense fallback={<EsqueletoGrafica />}>
93
+ <GraficaVentasMensuales /> {/* query lenta */}
94
+ </Suspense>
95
+ <Suspense fallback={<EsqueletoTabla />}>
96
+ <TablaTopClientes /> {/* query lenta independiente */}
97
+ </Suspense>
98
+ </main>
99
+ )
100
+ }
101
+ ```
102
+
103
+ - Cada `<Suspense>` permite que los demás componentes se rendericen sin esperar.
104
+
105
+ ---
106
+
107
+ ## ISR para contenido semi-estático
108
+
109
+ ```tsx
110
+ // Revalidar cada hora — ideal para catálogos de productos, precios, etc.
111
+ export const revalidate = 3600
112
+
113
+ // Revalidar bajo demanda con tag
114
+ fetch(url, { next: { tags: ['catalogo-productos'] } })
115
+
116
+ // En una Server Action o Route Handler:
117
+ revalidateTag('catalogo-productos')
118
+ ```
119
+
120
+ - Usar ISR para contenido que cambia con menos frecuencia que las visitas.
121
+ - No usar ISR para datos que deben estar en tiempo real (inventario en compra,
122
+ saldo bancario). Para esos casos, `cache: 'no-store'`.
123
+
124
+ ---
125
+
126
+ ## Parallel Routes para dashboards
127
+
128
+ ```
129
+ app/dashboard/
130
+ @resumen/
131
+ page.tsx
132
+ @alertas/
133
+ page.tsx
134
+ @actividad/
135
+ page.tsx
136
+ layout.tsx ← recibe los tres slots en paralelo
137
+ ```
138
+
139
+ ```tsx
140
+ // layout.tsx
141
+ export default function DashboardLayout({
142
+ resumen, alertas, actividad
143
+ }: {
144
+ resumen: React.ReactNode
145
+ alertas: React.ReactNode
146
+ actividad: React.ReactNode
147
+ }) {
148
+ return (
149
+ <div className="grid grid-cols-3 gap-4">
150
+ {resumen}
151
+ {alertas}
152
+ {actividad}
153
+ </div>
154
+ )
155
+ }
156
+ ```
157
+
158
+ ---
159
+
160
+ ## Intercepting Routes para modales
161
+
162
+ - Para modales que muestran contenido de otra ruta sin navegar completamente:
163
+
164
+ ```
165
+ app/
166
+ facturas/
167
+ page.tsx
168
+ [id]/
169
+ page.tsx ← vista completa de la factura
170
+ @modal/
171
+ (.)facturas/[id]/
172
+ page.tsx ← modal al hacer clic en la lista
173
+ ```
174
+
175
+ ---
176
+
177
+ ## Route Handlers para API endpoints
178
+
179
+ - Usar `route.ts` para endpoints que son consumidos por clientes externos, móvil,
180
+ o por webhooks. No para datos internos del mismo servidor.
181
+
182
+ ```ts
183
+ // app/api/facturas/route.ts
184
+ export async function GET(request: Request) {
185
+ const { searchParams } = new URL(request.url)
186
+ const pagina = Number(searchParams.get('pagina') ?? '1')
187
+
188
+ const facturas = await obtenerFacturasPaginadas(pagina)
189
+ return Response.json(facturas)
190
+ }
191
+ ```
192
+
193
+ ---
194
+
195
+ ## Middleware para auth, redirects, i18n
196
+
197
+ ```ts
198
+ // middleware.ts (raíz del proyecto)
199
+ export function middleware(request: NextRequest) {
200
+ const token = request.cookies.get('session')?.value
201
+
202
+ if (!token && request.nextUrl.pathname.startsWith('/app')) {
203
+ return NextResponse.redirect(new URL('/login', request.url))
204
+ }
205
+ }
206
+
207
+ export const config = {
208
+ matcher: ['/app/:path*', '/api/:path*'],
209
+ }
210
+ ```
211
+
212
+ - El middleware solo lee cookies y headers. No llama a la BD directamente.
213
+ - Para verificación de sesión pesada, usar la función `auth()` del framework
214
+ de autenticación dentro del Server Component, no en el middleware.
215
+
216
+ ---
217
+
218
+ ## Checklist de patrones antes de merge
219
+
220
+ - [ ] Sin `useEffect` para carga de datos que pueden ir en Server Component
221
+ - [ ] Mutaciones en Server Actions con validación zod server-side
222
+ - [ ] Secciones lentas del dashboard envueltas en `<Suspense>`
223
+ - [ ] `revalidatePath` o `revalidateTag` después de toda mutación
224
+ - [ ] Route Handlers solo para APIs externas, no para datos internos
225
+ - [ ] Middleware sin llamadas a BD directas