@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,324 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ /**
5
+ * Hook: linea-estado.js
6
+ * Tipo: PostToolUse
7
+ *
8
+ * Muestra una línea de estado compacta con:
9
+ * - Modelo activo
10
+ * - Tarea actual (derivada del tool_name y parámetros)
11
+ * - Directorio de trabajo abreviado
12
+ * - Barra de progreso de contexto estimado
13
+ *
14
+ * Además escribe un archivo bridge en /tmp/swl-ctx-{session}.json
15
+ * para que otros hooks (monitor-contexto, etc.) lean el estado.
16
+ *
17
+ * Integración con Claude Code hooks:
18
+ * El hook no bloquea (exit 0 siempre).
19
+ * Los mensajes informativos se escriben en stderr para que
20
+ * Claude Code los muestre en la barra de estado o los ignore;
21
+ * sin interferir con el flujo JSON en stdout.
22
+ */
23
+
24
+ const fs = require('fs');
25
+ const path = require('path');
26
+ const os = require('os');
27
+
28
+ // ---------------------------------------------------------------------------
29
+ // Constantes de configuración
30
+ // ---------------------------------------------------------------------------
31
+
32
+ /** Ancho de la barra de progreso del contexto (en caracteres de bloque). */
33
+ const BARRA_ANCHO = 10;
34
+
35
+ /**
36
+ * Techo por defecto cuando no se detecta el modelo.
37
+ * Mantiene la heurística histórica para compatibilidad.
38
+ */
39
+ const TOKENS_MAXIMOS_DEFAULT = 200_000;
40
+
41
+ /**
42
+ * Techos de contexto por modelo (en tokens).
43
+ *
44
+ * IMPORTANTE: las claves son prefijos del `model_id` reportado por Claude Code
45
+ * en el evento del hook. La detección hace `modelId.includes(prefijo)` en orden;
46
+ * los prefijos más específicos van primero para que `claude-opus-4-7` no
47
+ * matchee accidentalmente con la entrada genérica `claude-opus`.
48
+ *
49
+ * Si el `model_id` contiene el sufijo `[1m]` (ej: `claude-opus-4-7[1m]`), el
50
+ * techo se fuerza a 1M independientemente del modelo base — Anthropic usa
51
+ * ese sufijo para indicar la variante de 1M context.
52
+ */
53
+ const TECHOS_POR_MODELO = {
54
+ // Opus 4.7 — variante de 1M context (la actual por defecto)
55
+ 'claude-opus-4-7': 1_000_000,
56
+ // Resto de modelos modernos: 200k context
57
+ 'claude-opus-4-6': 200_000,
58
+ 'claude-opus-4-5': 200_000,
59
+ 'claude-sonnet-4-6': 200_000,
60
+ 'claude-sonnet-4-5': 200_000,
61
+ 'claude-haiku-4-5': 200_000,
62
+ // Catch-all genéricos (orden: deben ir DESPUÉS de los específicos)
63
+ 'claude-opus': 200_000,
64
+ 'claude-sonnet': 200_000,
65
+ 'claude-haiku': 200_000,
66
+ };
67
+
68
+ /**
69
+ * Modelos conocidos y su etiqueta corta para la barra.
70
+ * Clave: prefijo del model_id. Valor: etiqueta legible.
71
+ */
72
+ const ETIQUETAS_MODELO = {
73
+ 'claude-opus': 'opus',
74
+ 'claude-sonnet': 'sonnet',
75
+ 'claude-haiku': 'haiku',
76
+ };
77
+
78
+ /**
79
+ * Determina el techo de tokens del contexto según el modelo activo.
80
+ *
81
+ * Reglas (en orden):
82
+ * 1. Si el `modelId` contiene `[1m]` → 1_000_000 (variante explícita 1M).
83
+ * 2. Si el `modelId` matchea un prefijo de TECHOS_POR_MODELO → ese techo.
84
+ * 3. Default → TOKENS_MAXIMOS_DEFAULT (200k).
85
+ *
86
+ * @param {string} modelId - Identificador completo del modelo, posiblemente
87
+ * con sufijo de variante (ej: `claude-opus-4-7[1m]`).
88
+ * @returns {number} Techo de tokens del contexto.
89
+ */
90
+ function techoTokens(modelId) {
91
+ if (!modelId) return TOKENS_MAXIMOS_DEFAULT;
92
+ const id = String(modelId);
93
+ if (id.includes('[1m]') || id.includes('-1m')) return 1_000_000;
94
+ for (const [prefijo, techo] of Object.entries(TECHOS_POR_MODELO)) {
95
+ if (id.includes(prefijo)) return techo;
96
+ }
97
+ return TOKENS_MAXIMOS_DEFAULT;
98
+ }
99
+
100
+ // ---------------------------------------------------------------------------
101
+ // Utilidades
102
+ // ---------------------------------------------------------------------------
103
+
104
+ /**
105
+ * Construye la etiqueta corta del modelo activo.
106
+ * @param {string} modelId - Identificador completo del modelo.
107
+ * @returns {string}
108
+ */
109
+ function etiquetaModelo(modelId) {
110
+ if (!modelId) return 'modelo?';
111
+ for (const [prefijo, etiqueta] of Object.entries(ETIQUETAS_MODELO)) {
112
+ if (modelId.includes(prefijo)) return etiqueta;
113
+ }
114
+ // Fallback: primeros 12 caracteres del modelo
115
+ return String(modelId).slice(0, 12);
116
+ }
117
+
118
+ /**
119
+ * Determina la tarea actual a partir del nombre de la herramienta
120
+ * y sus parámetros de entrada.
121
+ * @param {string} toolName - Nombre de la tool que acaba de ejecutarse.
122
+ * @param {object} toolInput - Parámetros de entrada de la tool.
123
+ * @returns {string}
124
+ */
125
+ function tareaActual(toolName, toolInput) {
126
+ if (!toolName) return 'idle';
127
+
128
+ const nombre = String(toolName).toLowerCase();
129
+
130
+ switch (nombre) {
131
+ case 'write':
132
+ case 'edit': {
133
+ const filePath = toolInput?.file_path || toolInput?.path || '';
134
+ const base = path.basename(String(filePath));
135
+ return `editando ${base || 'archivo'}`;
136
+ }
137
+ case 'read': {
138
+ const filePath = toolInput?.file_path || toolInput?.path || '';
139
+ const base = path.basename(String(filePath));
140
+ return `leyendo ${base || 'archivo'}`;
141
+ }
142
+ case 'bash': {
143
+ // Mostrar primeros 28 chars del comando, sin saltos de línea
144
+ const cmd = String(toolInput?.command || '').replace(/\s+/g, ' ').slice(0, 28);
145
+ return `bash: ${cmd || '...'}`;
146
+ }
147
+ case 'grep': {
148
+ const patron = String(toolInput?.pattern || '').slice(0, 20);
149
+ return `grep: ${patron || '...'}`;
150
+ }
151
+ case 'glob': {
152
+ const patron = String(toolInput?.pattern || '').slice(0, 20);
153
+ return `glob: ${patron || '...'}`;
154
+ }
155
+ case 'task':
156
+ case 'agent':
157
+ return `agente: ${String(toolInput?.description || '').slice(0, 25) || '...'}`;
158
+ default:
159
+ return nombre.slice(0, 30);
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Abrevia una ruta de directorio para mostrar en la barra de estado.
165
+ * Muestra sólo los últimos N segmentos.
166
+ * @param {string} dirPath - Ruta completa.
167
+ * @param {number} maxSegmentos - Número máximo de segmentos a mostrar.
168
+ * @returns {string}
169
+ */
170
+ function abreviarDirectorio(dirPath, maxSegmentos = 2) {
171
+ if (!dirPath) return '.';
172
+ // Normalizar separadores en Windows
173
+ const normalizado = String(dirPath).replace(/\\/g, '/');
174
+ const partes = normalizado.split('/').filter(Boolean);
175
+ if (partes.length <= maxSegmentos) return normalizado;
176
+ return '…/' + partes.slice(-maxSegmentos).join('/');
177
+ }
178
+
179
+ /**
180
+ * Construye la barra de progreso visual.
181
+ * @param {number} porcentaje - Valor entre 0 y 100.
182
+ * @returns {string} Ej: "████████░░ 80%"
183
+ */
184
+ function barraProgreso(porcentaje) {
185
+ const pct = Math.max(0, Math.min(100, porcentaje));
186
+ const llenos = Math.round((pct / 100) * BARRA_ANCHO);
187
+ const vacios = BARRA_ANCHO - llenos;
188
+ const barra = '█'.repeat(llenos) + '░'.repeat(vacios);
189
+ return `${barra} ${pct}%`;
190
+ }
191
+
192
+ /**
193
+ * Estima el porcentaje de contexto utilizado.
194
+ * Claude Code no expone directamente los tokens consumidos en el hook,
195
+ * por lo que usamos una heurística basada en el número de invocaciones
196
+ * de herramientas acumuladas en la sesión cuando el campo `usage` no está.
197
+ *
198
+ * La función lee el archivo bridge previo para mantener el contador,
199
+ * y lo incrementa en cada invocación.
200
+ *
201
+ * @param {string} bridgePath - Ruta del archivo bridge.
202
+ * @param {number} tokensReportados - Tokens reportados por Claude (si existen).
203
+ * @param {number} techo - Techo de tokens del modelo activo.
204
+ * @returns {{ porcentaje: number, invocaciones: number, techo: number }}
205
+ */
206
+ function estimarContexto(bridgePath, tokensReportados, techo) {
207
+ const techoEfectivo = (typeof techo === 'number' && techo > 0)
208
+ ? techo
209
+ : TOKENS_MAXIMOS_DEFAULT;
210
+ let invocaciones = 1;
211
+
212
+ // Leer estado previo del bridge
213
+ try {
214
+ const previo = JSON.parse(fs.readFileSync(bridgePath, 'utf8'));
215
+ invocaciones = (previo.invocaciones || 0) + 1;
216
+ } catch (_) {
217
+ // Archivo no existe aún — primera invocación
218
+ }
219
+
220
+ // Si Claude reporta tokens usados (campo no-estándar, puede no existir)
221
+ if (typeof tokensReportados === 'number' && tokensReportados > 0) {
222
+ const pct = Math.min(100, Math.round((tokensReportados / techoEfectivo) * 100));
223
+ return { porcentaje: pct, invocaciones, techo: techoEfectivo };
224
+ }
225
+
226
+ // Heurística: cada invocación consume ~500 tokens promedio (conversación + tool)
227
+ const tokenesEstimados = invocaciones * 500;
228
+ const pct = Math.min(99, Math.round((tokenesEstimados / techoEfectivo) * 100));
229
+ return { porcentaje: pct, invocaciones, techo: techoEfectivo };
230
+ }
231
+
232
+ // ---------------------------------------------------------------------------
233
+ // Entrypoint principal
234
+ // ---------------------------------------------------------------------------
235
+
236
+ // Solo conectar stdin cuando se ejecuta como script (hook),
237
+ // no cuando se carga vía require() desde tests u otros módulos.
238
+ if (require.main === module) iniciarHook();
239
+
240
+ function iniciarHook() {
241
+ let inputRaw = '';
242
+
243
+ process.stdin.on('data', chunk => {
244
+ inputRaw += chunk;
245
+ });
246
+
247
+ process.stdin.on('end', () => {
248
+ try {
249
+ const data = JSON.parse(inputRaw);
250
+
251
+ // Extraer campos del evento de hook de Claude Code
252
+ // Estructura documentada de PostToolUse:
253
+ // data.session_id, data.model, data.tool_name, data.tool_input,
254
+ // data.tool_result, data.usage (si existe)
255
+ const sessionId = String(data.session_id || 'default');
256
+ const modelId = String(data.model || '');
257
+ const toolName = String(data.tool_name || '');
258
+ const toolInput = data.tool_input || {};
259
+ const tokensUsados = data.usage?.input_tokens ?? data.usage?.total_tokens ?? 0;
260
+
261
+ // Ruta del archivo bridge compartido entre hooks
262
+ const bridgePath = path.join(os.tmpdir(), `swl-ctx-${sessionId}.json`);
263
+
264
+ // Resolver techo según modelo (Opus 4.7 con sufijo [1m] = 1M; resto 200k)
265
+ const techo = techoTokens(modelId);
266
+
267
+ // Calcular métricas
268
+ const { porcentaje, invocaciones } = estimarContexto(bridgePath, tokensUsados, techo);
269
+ const modeloLabel = etiquetaModelo(modelId);
270
+ const tarea = tareaActual(toolName, toolInput);
271
+ const directorio = abreviarDirectorio(process.cwd());
272
+ const barra = barraProgreso(porcentaje);
273
+
274
+ // Construir payload del bridge para otros hooks
275
+ const bridgePayload = {
276
+ sessionId,
277
+ modelId,
278
+ modeloLabel,
279
+ tarea,
280
+ directorio,
281
+ porcentaje,
282
+ invocaciones,
283
+ tokensUsados,
284
+ techoTokens: techo,
285
+ timestamp: new Date().toISOString(),
286
+ };
287
+
288
+ // Escribir bridge (ignorar error si /tmp no existe en este entorno)
289
+ try {
290
+ fs.writeFileSync(bridgePath, JSON.stringify(bridgePayload, null, 2), 'utf8');
291
+ } catch (errBridge) {
292
+ // No bloquear el flujo si no se puede escribir el bridge
293
+ // No se pudo escribir bridge — ignorar
294
+ }
295
+
296
+ // Construir la línea de estado como JSON válido para Claude Code
297
+ const lineaEstado = `${modeloLabel} | ${tarea} | ${directorio} | ctx: ${barra}`;
298
+
299
+ // PostToolUse hooks: no escribir nada a stdout para permitir
300
+ // que Claude Code procese la respuesta sin interferencia.
301
+
302
+ } catch (err) {
303
+ // Si el hook falla por cualquier razón, nunca bloquear a Claude
304
+ // No escribir a stderr — Claude Code lo reporta como hook error
305
+ }
306
+ });
307
+ }
308
+
309
+ if (require.main !== module) {
310
+ module.exports = {
311
+ techoTokens,
312
+ estimarContexto,
313
+ etiquetaModelo,
314
+ tareaActual,
315
+ abreviarDirectorio,
316
+ barraProgreso,
317
+ _internals: {
318
+ TECHOS_POR_MODELO,
319
+ TOKENS_MAXIMOS_DEFAULT,
320
+ ETIQUETAS_MODELO,
321
+ BARRA_ANCHO,
322
+ },
323
+ };
324
+ }
@@ -0,0 +1,209 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ /**
5
+ * Hook: metricas-evolucion.js
6
+ * Tipo: Stop (async: true — fire-and-forget)
7
+ *
8
+ * Cada sesión consolida métricas del ciclo de evolución y actualiza
9
+ * .planning/evolucion/metricas.json con:
10
+ * - nudges emitidos / accionados / pendientes (14d)
11
+ * - tasa de acción por tipo de nudge
12
+ * - instintos populados vs capacidad
13
+ * - evoluciones aplicadas (del log de /swl:evolucionar)
14
+ * - fallos vs éxitos de agentes en 14d
15
+ * - alertas persistentes activas
16
+ *
17
+ * Además dispara escalarSiAplica() del nudge-tracker.
18
+ *
19
+ * El hook nunca bloquea (siempre exit 0). Zero-deps.
20
+ */
21
+
22
+ const fs = require('fs');
23
+ const path = require('path');
24
+
25
+ let atomicWriteJSON;
26
+ try {
27
+ ({ atomicWriteJSON } = require('./lib/atomic-write'));
28
+ } catch {
29
+ atomicWriteJSON = (p, obj) => fs.writeFileSync(p, JSON.stringify(obj, null, 2), 'utf8');
30
+ }
31
+
32
+ let nudgeTracker;
33
+ try {
34
+ nudgeTracker = require('./lib/nudge-tracker');
35
+ } catch {
36
+ nudgeTracker = null;
37
+ }
38
+
39
+ const CWD = process.cwd();
40
+ const DIR_EVOL = path.join(CWD, '.planning', 'evolucion');
41
+ const METRICAS_PATH = path.join(DIR_EVOL, 'metricas.json');
42
+ const INSTINTOS_PROYECTO = path.join(CWD, 'instintos', 'proyecto.yaml');
43
+ const INSTINTOS_GLOBAL = path.join(CWD, 'instintos', 'global.yaml');
44
+ const INSTINTOS_PERFIL = path.join(CWD, 'instintos', 'perfil-usuario.yaml');
45
+ const AGENTES_LOG = path.join(CWD, '.planning', 'auto-evolucion', 'agentes.jsonl');
46
+ const APRENDIZAJES = path.join(CWD, '.planning', 'APRENDIZAJES.md');
47
+ const EVOLUCIONES_LOG = path.join(DIR_EVOL, 'evoluciones.jsonl');
48
+
49
+ // ---------------------------------------------------------------------------
50
+ // Utilidades
51
+ // ---------------------------------------------------------------------------
52
+
53
+ function ensureDir() {
54
+ try { fs.mkdirSync(DIR_EVOL, { recursive: true }); } catch { /* ignore */ }
55
+ }
56
+
57
+ function contarInstintos(archivo) {
58
+ try {
59
+ const c = fs.readFileSync(archivo, 'utf8');
60
+ const m = c.match(/^total_instintos:\s*(\d+)/m);
61
+ if (m) return parseInt(m[1], 10);
62
+ // Fallback: contar entries `- id:`
63
+ const entries = c.match(/^\s*- id:\s*\S+/gm);
64
+ return entries ? entries.length : 0;
65
+ } catch {
66
+ return 0;
67
+ }
68
+ }
69
+
70
+ function contarAprendizajes() {
71
+ try {
72
+ const c = fs.readFileSync(APRENDIZAJES, 'utf8');
73
+ const headers = c.match(/^##\s+\[\d{4}-\d{2}-\d{2}\]/gm);
74
+ return headers ? headers.length : 0;
75
+ } catch {
76
+ return 0;
77
+ }
78
+ }
79
+
80
+ function leerJsonl(p, dias = 14) {
81
+ try {
82
+ const limite = Date.now() - dias * 24 * 3600 * 1000;
83
+ return fs.readFileSync(p, 'utf8')
84
+ .split(/\r?\n/)
85
+ .filter(Boolean)
86
+ .map(l => { try { return JSON.parse(l); } catch { return null; } })
87
+ .filter(e => {
88
+ if (!e) return false;
89
+ const t = Date.parse(e.ts);
90
+ return Number.isFinite(t) && t >= limite;
91
+ });
92
+ } catch {
93
+ return [];
94
+ }
95
+ }
96
+
97
+ function resumenAgentes() {
98
+ const entries = leerJsonl(AGENTES_LOG, 14);
99
+ const porAgente = {};
100
+ for (const e of entries) {
101
+ if (!porAgente[e.agente]) porAgente[e.agente] = { runs: 0, fallos: 0, triviales: 0 };
102
+ if (e.trivial) porAgente[e.agente].triviales++;
103
+ else {
104
+ porAgente[e.agente].runs++;
105
+ if (e.status === 'failed') porAgente[e.agente].fallos++;
106
+ }
107
+ }
108
+ const totalRuns = entries.filter(e => !e.trivial).length;
109
+ const totalFallos = entries.filter(e => !e.trivial && e.status === 'failed').length;
110
+ return {
111
+ totalRuns,
112
+ totalFallos,
113
+ tasaExito: totalRuns > 0 ? Math.round((1 - totalFallos / totalRuns) * 1000) / 10 : null,
114
+ porAgente,
115
+ };
116
+ }
117
+
118
+ function resumenEvoluciones() {
119
+ const entries = leerJsonl(EVOLUCIONES_LOG, 30);
120
+ const aplicadas = entries.filter(e => e.tipo === 'aplicada').length;
121
+ const revertidas = entries.filter(e => e.tipo === 'revertida').length;
122
+ return { aplicadas, revertidas, neta: aplicadas - revertidas };
123
+ }
124
+
125
+ // ---------------------------------------------------------------------------
126
+ // Entrypoint
127
+ // ---------------------------------------------------------------------------
128
+
129
+ let inputRaw = '';
130
+ process.stdin.on('data', chunk => { inputRaw += chunk; });
131
+
132
+ process.stdin.on('end', () => {
133
+ try {
134
+ ensureDir();
135
+
136
+ const nudges = nudgeTracker ? nudgeTracker.resumen({ dias: 14 }) : null;
137
+ if (nudgeTracker) {
138
+ try { nudgeTracker.escalarSiAplica({ threshold: 5 }); } catch { /* ignore */ }
139
+ }
140
+
141
+ const metricas = {
142
+ generado: new Date().toISOString(),
143
+ ventana_dias: 14,
144
+ nudges: nudges || { total: 0, accionados: 0, pendientes: 0 },
145
+ instintos: {
146
+ proyecto: contarInstintos(INSTINTOS_PROYECTO),
147
+ global: contarInstintos(INSTINTOS_GLOBAL),
148
+ perfil: contarInstintos(INSTINTOS_PERFIL),
149
+ },
150
+ aprendizajes_totales: contarAprendizajes(),
151
+ agentes: resumenAgentes(),
152
+ evoluciones: resumenEvoluciones(),
153
+ };
154
+
155
+ // Health score compuesto (0-100). Útil para dashboard.
156
+ metricas.health_score = calcularHealthScore(metricas);
157
+
158
+ atomicWriteJSON(METRICAS_PATH, metricas);
159
+ } catch {
160
+ // Nunca bloquear por error interno
161
+ }
162
+ });
163
+
164
+ /**
165
+ * Health score compuesto del ciclo de evolución (0-100).
166
+ *
167
+ * Componentes (pesos):
168
+ * - Tasa de acción de nudges (30%): accionados / total
169
+ * - Densidad de instintos (20%): sum vs capacidad objetivo (20 proyecto + 5 global)
170
+ * - Tasa de éxito de agentes (30%): (runs - fallos) / runs
171
+ * - Evoluciones netas positivas (10%): aplicadas - revertidas
172
+ * - Ausencia de alertas persistentes (10%): -5pt por cada alerta activa
173
+ */
174
+ function calcularHealthScore(m) {
175
+ let score = 0;
176
+
177
+ // Nudges (30pt)
178
+ if (m.nudges.total > 0) {
179
+ score += Math.round(m.nudges.accionados / m.nudges.total * 30);
180
+ } else {
181
+ score += 15; // sin nudges = neutral
182
+ }
183
+
184
+ // Instintos (20pt) — objetivo: 20 proyecto + 5 global
185
+ const totalInst = m.instintos.proyecto + m.instintos.global;
186
+ const objetivo = 25;
187
+ score += Math.min(20, Math.round(totalInst / objetivo * 20));
188
+
189
+ // Agentes (30pt)
190
+ if (m.agentes.totalRuns > 0) {
191
+ score += Math.round(m.agentes.tasaExito / 100 * 30);
192
+ } else {
193
+ score += 15;
194
+ }
195
+
196
+ // Evoluciones (10pt)
197
+ if (m.evoluciones.aplicadas > 0) {
198
+ const netaRatio = Math.max(0, m.evoluciones.neta / m.evoluciones.aplicadas);
199
+ score += Math.round(netaRatio * 10);
200
+ } else {
201
+ score += 5;
202
+ }
203
+
204
+ // Alertas (10pt)
205
+ const alertas = (m.nudges.alertasActivas || []).length;
206
+ score += Math.max(0, 10 - alertas * 5);
207
+
208
+ return Math.min(100, Math.max(0, score));
209
+ }