@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,262 @@
1
+ # Meta Conversions API (CAPI): implementación server-side
2
+
3
+ ## Por qué CAPI es necesario post-iOS 14
4
+
5
+ iOS 14 introdujo App Tracking Transparency (ATT) e Intelligent Tracking
6
+ Prevention (ITP) de Safari. El impacto en el Pixel browser:
7
+
8
+ - **40-60% de eventos de conversión se pierden** en dispositivos Apple.
9
+ - Las cookies de terceros duran máximo 7 días en Safari (antes: 2 años).
10
+ - El atributo `_fbp` (identificador de usuario de Meta) expira en 7 días.
11
+
12
+ CAPI envía eventos directamente desde el servidor, sin depender del browser.
13
+ Los datos server-side tienen mayor confiabilidad porque no son bloqueados
14
+ por extensiones de ad-blocking ni restricciones del sistema operativo.
15
+
16
+ **Estrategia recomendada**: browser Pixel + CAPI en paralelo, con
17
+ deduplicación obligatoria vía `event_id`.
18
+
19
+ ## Setup: credenciales necesarias
20
+
21
+ | Credencial | Dónde obtenerla | Dónde almacenarla |
22
+ |------------|----------------|-------------------|
23
+ | `PIXEL_ID` | Meta Business > Events Manager > tu Pixel | Variable de entorno del servidor |
24
+ | `CAPI_TOKEN` | Events Manager > Settings > Generate Access Token | Secret Manager / variable de entorno |
25
+
26
+ El token de acceso NO tiene fecha de expiración pero se puede revocar manualmente.
27
+ Rotar el token si se sospecha compromiso de seguridad.
28
+
29
+ ## Hashing de PII: función de referencia
30
+
31
+ Meta requiere SHA-256 con normalización específica por tipo de dato:
32
+
33
+ ```python
34
+ import hashlib
35
+
36
+ def hash_pii(valor: str) -> str:
37
+ """
38
+ Normaliza y hashea PII para Meta CAPI (SHA-256).
39
+ - Email: minúsculas, sin espacios al inicio/fin
40
+ - Teléfono: formato E.164 (+52XXXXXXXXXX), solo dígitos y +
41
+ - Nombre/apellido: minúsculas, sin espacios al inicio/fin
42
+ """
43
+ return hashlib.sha256(valor.strip().lower().encode()).hexdigest()
44
+
45
+ def normalizar_telefono(telefono: str) -> str:
46
+ """Convierte teléfono a formato E.164 para hashear."""
47
+ # Conservar solo dígitos y el + inicial
48
+ limpio = '+' + ''.join(c for c in telefono if c.isdigit())
49
+ return limpio
50
+ ```
51
+
52
+ ## Endpoint server-side completo
53
+
54
+ ```python
55
+ import hashlib
56
+ import httpx
57
+ import time
58
+ import os
59
+ from typing import Optional
60
+
61
+ PIXEL_ID = os.environ["META_PIXEL_ID"]
62
+ CAPI_TOKEN = os.environ["META_CAPI_TOKEN"]
63
+ CAPI_URL = f"https://graph.facebook.com/v18.0/{PIXEL_ID}/events"
64
+
65
+ def hash_pii(valor: str) -> str:
66
+ return hashlib.sha256(valor.strip().lower().encode()).hexdigest()
67
+
68
+ async def enviar_evento_capi(
69
+ evento: str,
70
+ event_id: str,
71
+ user_data: dict,
72
+ custom_data: dict,
73
+ source_url: str,
74
+ test_event_code: Optional[str] = None,
75
+ ) -> dict:
76
+ """
77
+ Envía un evento a Meta CAPI desde el servidor.
78
+
79
+ Args:
80
+ evento: Nombre del evento estándar Meta (Purchase, Lead, ViewContent, etc.)
81
+ event_id: ID único para deduplicación con el Pixel browser. Debe ser el
82
+ mismo valor enviado en el dataLayer del browser.
83
+ user_data: Datos del usuario. Se hashean internamente.
84
+ Claves esperadas: email, phone, fbc, fbp, ip, user_agent.
85
+ custom_data: Datos del evento (value, currency, content_ids, etc.)
86
+ source_url: URL donde ocurrió el evento.
87
+ test_event_code: Solo en desarrollo/staging. Obtener en Events Manager.
88
+
89
+ Returns:
90
+ Respuesta de la API de Meta como dict.
91
+ """
92
+ user_data_hasheado = {}
93
+
94
+ if email := user_data.get("email"):
95
+ user_data_hasheado["em"] = [hash_pii(email)]
96
+
97
+ if phone := user_data.get("phone"):
98
+ user_data_hasheado["ph"] = [hash_pii(phone)]
99
+
100
+ # fbc y fbp NO se hashean — son identificadores propios de Meta
101
+ if fbc := user_data.get("fbc"):
102
+ user_data_hasheado["fbc"] = fbc
103
+
104
+ if fbp := user_data.get("fbp"):
105
+ user_data_hasheado["fbp"] = fbp
106
+
107
+ if ip := user_data.get("ip"):
108
+ user_data_hasheado["client_ip_address"] = ip
109
+
110
+ if user_agent := user_data.get("user_agent"):
111
+ user_data_hasheado["client_user_agent"] = user_agent
112
+
113
+ payload = {
114
+ "data": [{
115
+ "event_name": evento,
116
+ "event_time": int(time.time()),
117
+ "event_id": event_id,
118
+ "event_source_url": source_url,
119
+ "action_source": "website",
120
+ "user_data": user_data_hasheado,
121
+ "custom_data": custom_data,
122
+ }],
123
+ }
124
+
125
+ if test_event_code:
126
+ payload["test_event_code"] = test_event_code
127
+
128
+ async with httpx.AsyncClient() as client:
129
+ response = await client.post(
130
+ CAPI_URL,
131
+ params={"access_token": CAPI_TOKEN},
132
+ json=payload,
133
+ timeout=10.0,
134
+ )
135
+ response.raise_for_status()
136
+ return response.json()
137
+ ```
138
+
139
+ ### Uso en endpoint de compra confirmada (FastAPI)
140
+
141
+ ```python
142
+ from fastapi import Request
143
+
144
+ @router.post("/ordenes/{orden_id}/confirmar")
145
+ async def confirmar_orden(
146
+ orden_id: str,
147
+ request: Request,
148
+ db: AsyncSession = Depends(get_db),
149
+ current_user = Depends(get_current_user),
150
+ ):
151
+ orden = await procesar_pago(orden_id, db)
152
+
153
+ # Leer cookies de Meta del browser
154
+ fbc = request.cookies.get("_fbc")
155
+ fbp = request.cookies.get("_fbp")
156
+
157
+ # El event_id viene del frontend para deduplicación
158
+ event_id = request.headers.get("X-Event-Id", f"purchase_{orden_id}_{int(time.time())}")
159
+
160
+ await enviar_evento_capi(
161
+ evento="Purchase",
162
+ event_id=event_id,
163
+ user_data={
164
+ "email": current_user.email,
165
+ "phone": current_user.phone,
166
+ "fbc": fbc,
167
+ "fbp": fbp,
168
+ "ip": request.client.host,
169
+ "user_agent": request.headers.get("User-Agent"),
170
+ },
171
+ custom_data={
172
+ "value": float(orden.total),
173
+ "currency": "MXN",
174
+ "content_ids": [item.sku for item in orden.items],
175
+ "content_type": "product",
176
+ "num_items": len(orden.items),
177
+ },
178
+ source_url=str(request.url),
179
+ )
180
+
181
+ return {"status": "confirmada", "orden_id": str(orden.id)}
182
+ ```
183
+
184
+ ## Deduplicación: cómo funciona
185
+
186
+ Meta deduplica eventos cuando recibe dos eventos con el mismo `event_id`
187
+ dentro de una ventana de 48 horas. El proceso:
188
+
189
+ 1. Browser (Pixel) dispara `Purchase` con `event_id = "purchase_ORD-001_1234"`
190
+ 2. Servidor (CAPI) envía `Purchase` con el mismo `event_id`
191
+ 3. Meta los empareja y cuenta solo una conversión
192
+
193
+ **Cómo pasar el event_id del browser al servidor:**
194
+
195
+ ```javascript
196
+ // Frontend: guardar event_id en header de la request de confirmación
197
+ const eventId = `purchase_${transactionId}_${Date.now()}`;
198
+
199
+ // 1. Disparar en dataLayer (browser Pixel lo captura)
200
+ dataLayer.push({ ecommerce: null });
201
+ dataLayer.push({
202
+ event: 'purchase',
203
+ event_id: eventId,
204
+ ecommerce: { transaction_id: transactionId, ... }
205
+ });
206
+
207
+ // 2. Incluir en la request al backend
208
+ await fetch(`/api/ordenes/${transactionId}/confirmar`, {
209
+ method: 'POST',
210
+ headers: {
211
+ 'X-Event-Id': eventId,
212
+ 'Content-Type': 'application/json',
213
+ },
214
+ });
215
+ ```
216
+
217
+ ## Cómo obtener las cookies _fbc y _fbp
218
+
219
+ | Cookie | Descripción | Cómo se crea |
220
+ |--------|-------------|--------------|
221
+ | `_fbp` | Identificador de browser de Meta | Meta Pixel la crea al cargar |
222
+ | `_fbc` | Identificador de click de anuncio | Meta la crea cuando el usuario llega desde un anuncio (parámetro `fbclid` en URL) |
223
+
224
+ Ambas deben leerse del request en el servidor y enviarse a CAPI sin hashear.
225
+ Si no están presentes, omitir el campo (no enviar cadena vacía).
226
+
227
+ ## Tasa de coincidencia (Event Match Quality)
228
+
229
+ El score EMQ mide qué tan bien Meta puede emparejar eventos con usuarios:
230
+
231
+ | Score | Interpretación |
232
+ |-------|---------------|
233
+ | 8-10 | Excelente — atribución confiable |
234
+ | 6-7 | Bueno — mínimo recomendado |
235
+ | 4-5 | Aceptable — mejorar si es posible |
236
+ | < 4 | Bajo — revisar qué user_data se está enviando |
237
+
238
+ **Para maximizar el EMQ**: enviar siempre `em` + `ph` + `fbp` + `fbc` +
239
+ `client_ip_address` + `client_user_agent`. Cada campo adicional mejora el score.
240
+
241
+ ## Test Events: validar antes de producción
242
+
243
+ 1. En Meta Business > Events Manager > tu Pixel > Test Events.
244
+ 2. Copiar el `test_event_code` (formato `TEST12345`).
245
+ 3. Pasarlo al parámetro `test_event_code` del endpoint.
246
+ 4. Ejecutar el flujo de compra en staging.
247
+ 5. Verificar en Test Events que el evento llega con el payload correcto.
248
+ 6. Confirmar que aparece como "Deduplicated" si también se disparó el Pixel.
249
+ 7. **Remover** el `test_event_code` antes de pasar a producción.
250
+
251
+ ## Eventos estándar de Meta disponibles
252
+
253
+ | Evento | Cuándo usarlo |
254
+ |--------|--------------|
255
+ | `Purchase` | Compra completada con valor monetario |
256
+ | `Lead` | Registro de formulario de contacto o demo |
257
+ | `ViewContent` | Vista de página de producto o servicio |
258
+ | `AddToCart` | Agregar producto al carrito |
259
+ | `InitiateCheckout` | Inicio del proceso de pago |
260
+ | `CompleteRegistration` | Registro de cuenta completado |
261
+ | `Search` | Búsqueda en el sitio |
262
+ | `Subscribe` | Suscripción a newsletter o servicio recurrente |
@@ -0,0 +1,144 @@
1
+ ---
2
+ name: typescript-avanzado
3
+ description: >
4
+ TypeScript avanzado: generics, conditional types, mapped types, template literal types,
5
+ utility types, type guards, discriminated unions, branded types, operador satisfies,
6
+ extensión de módulo (module augmentation). Con ejemplos prácticos orientados a producción.
7
+ version: "1.0.0"
8
+ herramientasPermitidas: [Read]
9
+ exclusiones:
10
+ - "No cargar para errores de compilación TypeScript (TS2322, TS2345, tsconfig) — para diagnóstico de errores del compilador cargar `build-errors-typescript` o `typescript-diagnosticos`."
11
+ - "No cargar para configurar tsconfig.json desde cero en un proyecto nuevo — la configuración básica (target, module, strict) no requiere types avanzados; cargar `node-experto` o el skill del framework."
12
+ - "No cargar para patrones básicos de TypeScript (interfaces, enums, type aliases simples) — este skill es para tipos avanzados en código de producción; para introducción a TypeScript el contenido es excesivo."
13
+ - "No cargar para problemas de tipos en Angular o React específicos del framework — los tipos de `@angular/core` o `react` tienen peculiaridades de framework; cargar `angular-moderno` o `react-experto`."
14
+ evolvable: true # default para skill estandar
15
+ ---
16
+ # TypeScript Avanzado — Sistema de Tipos Profundo
17
+
18
+ ## Cuándo NO cargar
19
+
20
+ - La pregunta es sobre errores del compilador TypeScript (TS2322, TS2345, tsconfig) — para diagnóstico de errores cargar `build-errors-typescript` o `typescript-diagnosticos`.
21
+ - La tarea es configurar tsconfig.json desde cero — la configuración básica (target, module, strict) no requiere tipos avanzados; cargar `node-experto` o el skill del framework.
22
+ - La pregunta es sobre TypeScript básico (interfaces simples, enums, type aliases sin composición) — este skill cubre el sistema de tipos avanzado; para introducción a TypeScript el contenido es excesivo.
23
+ - La pregunta involucra tipos específicos de Angular (`Signal`, `DestroyRef`) o React (`FC`, `ReactNode`) — esos tienen peculiaridades de framework; cargar `angular-moderno` o `react-experto`.
24
+
25
+ ## Por qué el sistema de tipos importa
26
+
27
+ TypeScript no es "JavaScript con tipos". Un sistema de tipos bien diseñado:
28
+ - Elimina clases enteras de bugs en tiempo de compilación.
29
+ - Actúa como documentación ejecutable y verificada.
30
+ - Permite refactoring seguro a escala.
31
+
32
+ **Regla de oro**: si usas `any` o `as X`, justifica por qué en un comentario.
33
+ Si no puedes justificarlo, el diseño tiene un problema.
34
+
35
+ ---
36
+
37
+ ## Reglas Obligatorias
38
+
39
+ 1. **`strict: true` en tsconfig.json** — SIEMPRE activado, sin excepción.
40
+ 2. **Cero `any` sin justificación** — cada uso de `any` requiere comentario explicando por qué.
41
+ 3. **Discriminated unions con verificación exhaustiva** — usar `never` en default de switch.
42
+ 4. **`satisfies` sobre `as`** — preferir `satisfies` cuando el narrowing importa.
43
+ 5. **Type guards retornan `valor is Tipo`** — nunca `boolean` a secas.
44
+ 6. **Branded types para IDs de distintos dominios** — previene mezclas silenciosas.
45
+
46
+ ---
47
+
48
+ ## Generics — Constraints con `extends`
49
+
50
+ ```typescript
51
+ // MAL — demasiado permisivo
52
+ function obtenerPropiedad<T, K>(objeto: T, clave: K): any {
53
+ return (objeto as any)[clave];
54
+ }
55
+
56
+ // BIEN — constraint garantiza que K es clave de T
57
+ function obtenerPropiedad<T, K extends keyof T>(objeto: T, clave: K): T[K] {
58
+ return objeto[clave];
59
+ }
60
+ ```
61
+
62
+ ### Inferencia con `infer`
63
+
64
+ ```typescript
65
+ type DesenvuelvePromesa<T> = T extends Promise<infer U> ? U : T;
66
+ type PrimerParametro<T extends (...args: any[]) => any> =
67
+ T extends (primero: infer P, ...resto: any[]) => any ? P : never;
68
+ ```
69
+
70
+ ---
71
+
72
+ ## Type Guards — Narrowing Seguro
73
+
74
+ ```typescript
75
+ // Type guard para discriminated union
76
+ type Figura =
77
+ | { tipo: "circulo"; radio: number }
78
+ | { tipo: "rectangulo"; ancho: number; alto: number }
79
+ | { tipo: "triangulo"; base: number; altura: number };
80
+
81
+ function calcularArea(figura: Figura): number {
82
+ switch (figura.tipo) {
83
+ case "circulo":
84
+ return Math.PI * figura.radio ** 2;
85
+ case "rectangulo":
86
+ return figura.ancho * figura.alto;
87
+ case "triangulo":
88
+ return (figura.base * figura.altura) / 2;
89
+ default:
90
+ const _nunca: never = figura; // Verificacion exhaustiva
91
+ throw new Error(`Figura desconocida: ${JSON.stringify(_nunca)}`);
92
+ }
93
+ }
94
+
95
+ // Assertion function (TypeScript 3.7+)
96
+ function afirmarDefinido<T>(
97
+ valor: T | null | undefined, campo: string
98
+ ): asserts valor is T {
99
+ if (valor == null) throw new Error(`Se requiere ${campo} pero es ${valor}`);
100
+ }
101
+ ```
102
+
103
+ ---
104
+
105
+ ## Operador `satisfies` (TypeScript 4.9+)
106
+
107
+ ```typescript
108
+ // as X elimina el narrowing — satisfies lo preserva
109
+ const coloresValidados = {
110
+ rojo: "#FF0000",
111
+ verde: "#00FF00",
112
+ azul: "#0000FF",
113
+ } satisfies Record<string, `#${string}`>;
114
+ // coloresValidados.rojo es "#FF0000" (literal, no string)
115
+ ```
116
+
117
+ ---
118
+
119
+ ## Checklist de Revisión
120
+
121
+ - [ ] Cero usos de `any` sin comentario justificando por qué.
122
+ - [ ] Los discriminated unions tienen verificación exhaustiva con `never`.
123
+ - [ ] Los IDs de distintos dominios usan branded types para evitar mezclas.
124
+ - [ ] `satisfies` se usa en lugar de `as` donde el narrowing importa.
125
+ - [ ] Los utility types se componen en lugar de redefinir interfaces manualmente.
126
+ - [ ] Los type guards retornan `valor is Tipo` (no `boolean`).
127
+ - [ ] `infer` se usa para extraer tipos en lugar de duplicarlos manualmente.
128
+ - [ ] El `tsconfig.json` tiene `strict: true` activado.
129
+
130
+ ---
131
+
132
+ Para ejemplos completos de conditional types, mapped types, template literal types, branded types, utility types, extensión de módulo (module augmentation) y patrones compuestos (builder tipado), ver [recursos/patrones-y-ejemplos-completos.md](recursos/patrones-y-ejemplos-completos.md).
133
+
134
+ ---
135
+
136
+ ## Gotchas / Errores comunes no obvios
137
+
138
+ **`keyof` de un tipo con índice de string incluye `string | number`**: `keyof { [key: string]: string }` retorna `string | number`, no `string`. Causa: JavaScript convierte índices numéricos a string, así que TypeScript incluye `number` en el keyof de tipos con índice de string. Fix: si se espera solo `string`, usar `Extract<keyof T, string>` explícitamente.
139
+
140
+ **Conditional type con `extends` no distribuye sobre uniones cuando el tipo está envuelto**: `type EsString<T> = T extends string ? true : false` distribuye sobre `string | number` y retorna `boolean`. Pero `type EsString<T> = [T] extends [string] ? true : false` no distribuye — retorna `false` para `string | number`. Causa: envolver en tupla desactiva la distribución. Fix: elegir la forma correcta según si se quiere distribución o comportamiento de subtype check exacto.
141
+
142
+ **`satisfies` no restringe el tipo inferido — solo lo valida**: `const config = { ... } satisfies Record<string, number>` valida que cada valor es `number`, pero el tipo inferido de `config.puerto` sigue siendo el literal `3000`, no `number`. Esto es la funcionalidad correcta, pero causa confusión cuando se espera que `satisfies` genere un tipo más ancho para reutilización. Fix: si se necesita el tipo ancho, combinar `satisfies` con anotación explícita: `const config: Record<string, number> = { ... } satisfies Record<string, number>`.
143
+
144
+ **`infer` en posición contravariante infiere `never`**: `type Parametro<T> = T extends (arg: infer U) => void ? U : never` sobre una unión `((a: string) => void) | ((a: number) => void)` infiere `string & number` (never), no `string | number`. Causa: los parámetros de función son contravariantes — TypeScript intersecta en lugar de unir. Fix: extraer el tipo en posición covariante (retorno) cuando sea posible, o aceptar que el tipo de parámetros de una unión de funciones es la intersección.
@@ -0,0 +1,55 @@
1
+ {
2
+ "$schema": "../../../schemas/skill-evals.schema.json",
3
+ "skill_name": "typescript-avanzado",
4
+ "artifact_type": "skill",
5
+ "schema_version": 1,
6
+ "description": "Evals para typescript-avanzado — generics, utility types, type narrowing, strictness.",
7
+ "evals": [
8
+ {
9
+ "id": 0,
10
+ "prompt": "Tipo que extrae solo las keys cuyo valor es string de un objeto T.",
11
+ "files": [],
12
+ "expectations": [
13
+ "Usa `{ [K in keyof T]: T[K] extends string ? K : never }[keyof T]`.",
14
+ "O equivalente con `keyof T` y conditional types.",
15
+ "NO usa `any`."
16
+ ],
17
+ "tags": ["generics"]
18
+ },
19
+ {
20
+ "id": "anti-any",
21
+ "prompt": "Veo `function parse(data: any): any` en el código. ¿Qué arreglo?",
22
+ "files": [],
23
+ "expectations": [
24
+ "La respuesta indica remover `any`.",
25
+ "Sugiere `unknown` como intermedio + type guards, o generics tipados.",
26
+ "Menciona que `any` desactiva type checking downstream."
27
+ ],
28
+ "grading_guidance": "Failure si acepta any como solución.",
29
+ "tags": ["anti-pattern"],
30
+ "weight": 1.5
31
+ },
32
+ {
33
+ "id": "satisfies",
34
+ "prompt": "¿Cuándo usar `satisfies` vs type annotation `:`?",
35
+ "files": [],
36
+ "expectations": [
37
+ "`satisfies` valida que un valor cumple un tipo sin perder información del literal.",
38
+ "Ejemplo: `const config = { ... } satisfies Config` preserva keys literales.",
39
+ "`:` anota; puede ampliar tipos literales a sus widened forms."
40
+ ],
41
+ "tags": ["typing"]
42
+ },
43
+ {
44
+ "id": "anti-ts-ignore",
45
+ "prompt": "Veo `@ts-ignore` en 5 lugares del código. ¿Qué hago?",
46
+ "files": [],
47
+ "expectations": [
48
+ "Remover cada uno o reemplazar por `@ts-expect-error` con comentario.",
49
+ "Si no se puede arreglar, al menos usar `@ts-expect-error reason` para que falle si el error desaparece.",
50
+ "Menciona que `@ts-ignore` oculta bugs sin trazabilidad."
51
+ ],
52
+ "tags": ["anti-pattern"]
53
+ }
54
+ ]
55
+ }