@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,586 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Preservar Usuario — Protección de datos de usuario durante instalación/actualización.
5
+ *
6
+ * Garantiza que los aprendizajes, instintos, sesiones, cron jobs, y demás datos
7
+ * generados por el usuario o por la auto-evolución del sistema NO se pierdan
8
+ * cuando se actualiza la versión de SWL-SES.
9
+ *
10
+ * Tres niveles de protección:
11
+ * Nivel 1: Archivos protegidos que NUNCA se sobreescriben (ni con --force)
12
+ * Nivel 2: Backup automático antes de sobreescribir con --force
13
+ * Nivel 3: Merge inteligente para instintos y skills auto-generados
14
+ *
15
+ * @module scripts/lib/preservar-usuario
16
+ */
17
+
18
+ const fs = require('fs');
19
+ const path = require('path');
20
+
21
+ // ---------------------------------------------------------------------------
22
+ // Nivel 1: Archivos que NUNCA se sobreescriben
23
+ // ---------------------------------------------------------------------------
24
+
25
+ /**
26
+ * Rutas relativas (desde la raíz del proyecto) que contienen datos del usuario
27
+ * y NUNCA deben sobreescribirse durante una actualización, ni siquiera con --force.
28
+ *
29
+ * Estos archivos son generados por:
30
+ * - /swl:aprender → APRENDIZAJES.md, CLAUDE.md del proyecto
31
+ * - hooks de extracción → APRENDIZAJES.md
32
+ * - hooks de degradación → instintos/proyecto.yaml
33
+ * - /swl:instintos → instintos/proyecto.yaml
34
+ * - /swl:evolucionar → skills auto-generados en habilidades/
35
+ * - /swl:crear-skill → skills nuevos en habilidades/
36
+ * - session-store → .planning/sessions/*.json
37
+ * - context-compressor → .planning/COMPACTACION.md
38
+ * - cron-store → .planning/cron/
39
+ * - gateway → .planning/gateway-sessions.json
40
+ * - agent-comms → .planning/comms/
41
+ */
42
+ const ARCHIVOS_PROTEGIDOS = [
43
+ // Aprendizajes del proyecto (generados por hooks y /swl:aprender)
44
+ '.planning/APRENDIZAJES.md',
45
+
46
+ // Estado de compresión de contexto
47
+ '.planning/COMPACTACION.md',
48
+
49
+ // Métricas de sesión
50
+ '.planning/METRICAS.md',
51
+
52
+ // Auditoría de gobernanza
53
+ '.planning/AUDITORIA.md',
54
+
55
+ // Registro de plugins
56
+ '.planning/PLUGINS.md',
57
+
58
+ // Sessions del gateway
59
+ '.planning/gateway-sessions.json',
60
+ ];
61
+
62
+ /**
63
+ * Directorios completos que NUNCA se sobreescriben.
64
+ * Todo su contenido está protegido.
65
+ */
66
+ const DIRECTORIOS_PROTEGIDOS = [
67
+ // Sesiones de trabajo (generadas por session-store)
68
+ '.planning/sessions',
69
+
70
+ // Comunicaciones entre agentes
71
+ '.planning/comms',
72
+
73
+ // Jobs y logs de cron
74
+ '.planning/cron',
75
+
76
+ // ADRs de arquitectura (escritos por el usuario/arquitecto-swl)
77
+ '.planning/adrs',
78
+
79
+ // Investigación del proyecto
80
+ '.planning/research',
81
+
82
+ // Extensiones del usuario (agentes, skills, plugins)
83
+ '_userland',
84
+ ];
85
+
86
+ /**
87
+ * Patrones de archivo que indican datos generados por el usuario o la auto-evolución.
88
+ * Si un archivo en el destino coincide con estos patrones, no se sobreescribe.
89
+ */
90
+ const PATRONES_PROTEGIDOS = [
91
+ // Instintos del proyecto (generados por hooks y /swl:instintos)
92
+ /^instintos\/proyecto\.yaml$/,
93
+
94
+ // CLAUDE.md del proyecto (puede tener reglas Tipo A de /swl:aprender)
95
+ /^CLAUDE\.md$/,
96
+ ];
97
+
98
+ // ---------------------------------------------------------------------------
99
+ // Nivel 1: API de verificación
100
+ // ---------------------------------------------------------------------------
101
+
102
+ /**
103
+ * Verifica si una ruta de destino está protegida contra sobreescritura.
104
+ *
105
+ * @param {string} rutaRelativa - Ruta relativa desde la raíz del proyecto.
106
+ * @returns {{ protegido: boolean, razon?: string }}
107
+ */
108
+ function esProtegido(rutaRelativa) {
109
+ if (!rutaRelativa || typeof rutaRelativa !== 'string') {
110
+ return { protegido: false };
111
+ }
112
+
113
+ // Normalizar separadores
114
+ const normalizada = rutaRelativa.replace(/\\/g, '/');
115
+
116
+ // Verificar archivos específicos
117
+ for (const archivo of ARCHIVOS_PROTEGIDOS) {
118
+ if (normalizada === archivo || normalizada.endsWith('/' + archivo)) {
119
+ return {
120
+ protegido: true,
121
+ razon: `Archivo protegido: ${archivo} contiene datos del usuario`,
122
+ };
123
+ }
124
+ }
125
+
126
+ // Verificar si está dentro de un directorio protegido
127
+ for (const dir of DIRECTORIOS_PROTEGIDOS) {
128
+ if (normalizada.startsWith(dir + '/') || normalizada === dir) {
129
+ return {
130
+ protegido: true,
131
+ razon: `Directorio protegido: ${dir}/ contiene datos del usuario`,
132
+ };
133
+ }
134
+ }
135
+
136
+ // Verificar patrones
137
+ for (const patron of PATRONES_PROTEGIDOS) {
138
+ if (patron.test(normalizada)) {
139
+ return {
140
+ protegido: true,
141
+ razon: `Patrón protegido: ${normalizada} coincide con datos de usuario`,
142
+ };
143
+ }
144
+ }
145
+
146
+ return { protegido: false };
147
+ }
148
+
149
+ /**
150
+ * Verifica si un archivo destino tiene contenido generado por el usuario
151
+ * que no existe en el paquete fuente (indica personalización local).
152
+ *
153
+ * @param {string} destino - Ruta absoluta del archivo destino.
154
+ * @param {string} [origen] - Ruta absoluta del archivo origen (del paquete).
155
+ * @returns {boolean} true si el destino tiene modificaciones del usuario.
156
+ */
157
+ function tieneModificacionesUsuario(destino, origen) {
158
+ if (!fs.existsSync(destino)) return false;
159
+ if (!origen || !fs.existsSync(origen)) return true; // Sin origen = todo es del usuario
160
+
161
+ try {
162
+ const contenidoDestino = fs.readFileSync(destino, 'utf8');
163
+ const contenidoOrigen = fs.readFileSync(origen, 'utf8');
164
+ return contenidoDestino !== contenidoOrigen;
165
+ } catch (_) {
166
+ return false;
167
+ }
168
+ }
169
+
170
+ // ---------------------------------------------------------------------------
171
+ // Nivel 2: Backup automático
172
+ // ---------------------------------------------------------------------------
173
+
174
+ /**
175
+ * Directorio base para backups de actualización.
176
+ * @param {string} baseDir - Raíz del proyecto.
177
+ * @param {string} version - Versión que se está sobreescribiendo.
178
+ * @returns {string} Ruta absoluta al directorio de backup.
179
+ */
180
+ function dirBackup(baseDir, version) {
181
+ return path.join(baseDir, '.planning', 'backups', `v${version}`);
182
+ }
183
+
184
+ /**
185
+ * Crea un backup de un archivo antes de sobreescribirlo.
186
+ *
187
+ * @param {string} baseDir - Raíz del proyecto.
188
+ * @param {string} rutaAbsoluta - Ruta absoluta del archivo a respaldar.
189
+ * @param {string} versionAnterior - Versión del sistema que se está actualizando.
190
+ * @returns {{ respaldado: boolean, rutaBackup?: string, error?: string }}
191
+ */
192
+ function crearBackup(baseDir, rutaAbsoluta, versionAnterior) {
193
+ if (!fs.existsSync(rutaAbsoluta)) {
194
+ return { respaldado: false, error: 'Archivo no existe' };
195
+ }
196
+
197
+ try {
198
+ const rutaRelativa = path.relative(baseDir, rutaAbsoluta);
199
+ const backupDir = dirBackup(baseDir, versionAnterior);
200
+ const rutaBackup = path.join(backupDir, rutaRelativa);
201
+ const dirPadre = path.dirname(rutaBackup);
202
+
203
+ if (!fs.existsSync(dirPadre)) {
204
+ fs.mkdirSync(dirPadre, { recursive: true });
205
+ }
206
+
207
+ // Copiar archivo o directorio
208
+ const stat = fs.statSync(rutaAbsoluta);
209
+ if (stat.isDirectory()) {
210
+ _copiarDirectorioRecursivo(rutaAbsoluta, rutaBackup);
211
+ } else {
212
+ fs.copyFileSync(rutaAbsoluta, rutaBackup);
213
+ }
214
+
215
+ return { respaldado: true, rutaBackup };
216
+ } catch (err) {
217
+ return { respaldado: false, error: err.message };
218
+ }
219
+ }
220
+
221
+ /**
222
+ * Registra un backup en el archivo de estado de instalación.
223
+ *
224
+ * @param {object} estado - Objeto de estado de instalación.
225
+ * @param {object} backup - Info del backup { rutaOriginal, rutaBackup, version }.
226
+ */
227
+ function registrarBackup(estado, backup) {
228
+ if (!estado.backups) estado.backups = [];
229
+ estado.backups.push({
230
+ ...backup,
231
+ timestamp: new Date().toISOString(),
232
+ });
233
+ }
234
+
235
+ /**
236
+ * Lista backups disponibles.
237
+ *
238
+ * @param {string} baseDir
239
+ * @returns {object[]} Lista de backups { version, fecha, archivos }.
240
+ */
241
+ function listarBackups(baseDir) {
242
+ const backupsBase = path.join(baseDir, '.planning', 'backups');
243
+ if (!fs.existsSync(backupsBase)) return [];
244
+
245
+ return fs.readdirSync(backupsBase)
246
+ .filter(d => d.startsWith('v'))
247
+ .map(dir => {
248
+ const fullPath = path.join(backupsBase, dir);
249
+ const stat = fs.statSync(fullPath);
250
+ const archivos = _contarArchivosRecursivo(fullPath);
251
+ return {
252
+ version: dir.replace(/^v/, ''),
253
+ fecha: stat.mtime.toISOString(),
254
+ archivos,
255
+ ruta: fullPath,
256
+ };
257
+ })
258
+ .sort((a, b) => b.fecha.localeCompare(a.fecha));
259
+ }
260
+
261
+ /**
262
+ * Restaura un backup específico.
263
+ *
264
+ * @param {string} baseDir
265
+ * @param {string} version - Versión del backup a restaurar.
266
+ * @returns {{ restaurado: boolean, archivos: number, error?: string }}
267
+ */
268
+ function restaurarBackup(baseDir, version) {
269
+ const backupPath = dirBackup(baseDir, version);
270
+ if (!fs.existsSync(backupPath)) {
271
+ return { restaurado: false, archivos: 0, error: `Backup v${version} no encontrado` };
272
+ }
273
+
274
+ try {
275
+ let archivosRestaurados = 0;
276
+ _restaurarRecursivo(backupPath, baseDir, () => { archivosRestaurados++; });
277
+ return { restaurado: true, archivos: archivosRestaurados };
278
+ } catch (err) {
279
+ return { restaurado: false, archivos: 0, error: err.message };
280
+ }
281
+ }
282
+
283
+ /**
284
+ * Limpia backups antiguos, conservando solo las últimas N versiones.
285
+ *
286
+ * @param {string} baseDir
287
+ * @param {number} [mantener=3] - Número de versiones recientes a conservar.
288
+ * @returns {{ eliminados: number, conservados: number, liberadoMB: number }}
289
+ */
290
+ function limpiarBackups(baseDir, mantener = 3) {
291
+ const backups = listarBackups(baseDir);
292
+ if (backups.length <= mantener) {
293
+ return { eliminados: 0, conservados: backups.length, liberadoMB: 0 };
294
+ }
295
+
296
+ // Los backups ya vienen ordenados por fecha descendente (más reciente primero)
297
+ const aEliminar = backups.slice(mantener);
298
+ let bytesLiberados = 0;
299
+
300
+ for (const backup of aEliminar) {
301
+ try {
302
+ bytesLiberados += _calcularTamanoDirectorio(backup.ruta);
303
+ fs.rmSync(backup.ruta, { recursive: true, force: true });
304
+ } catch (_) {}
305
+ }
306
+
307
+ // Si el directorio backups/ quedó vacío, eliminarlo
308
+ const backupsBase = path.join(baseDir, '.planning', 'backups');
309
+ try {
310
+ const remaining = fs.readdirSync(backupsBase);
311
+ if (remaining.length === 0) {
312
+ fs.rmdirSync(backupsBase);
313
+ }
314
+ } catch (_) {}
315
+
316
+ return {
317
+ eliminados: aEliminar.length,
318
+ conservados: mantener,
319
+ liberadoMB: Math.round(bytesLiberados / (1024 * 1024) * 100) / 100,
320
+ };
321
+ }
322
+
323
+ /**
324
+ * Calcula el tamaño total de un directorio recursivamente.
325
+ * @private
326
+ */
327
+ function _calcularTamanoDirectorio(dir) {
328
+ let total = 0;
329
+ try {
330
+ const entradas = fs.readdirSync(dir, { withFileTypes: true });
331
+ for (const entrada of entradas) {
332
+ const full = path.join(dir, entrada.name);
333
+ if (entrada.isDirectory()) {
334
+ total += _calcularTamanoDirectorio(full);
335
+ } else {
336
+ total += fs.statSync(full).size;
337
+ }
338
+ }
339
+ } catch (_) {}
340
+ return total;
341
+ }
342
+
343
+ // ---------------------------------------------------------------------------
344
+ // Nivel 3: Merge inteligente
345
+ // ---------------------------------------------------------------------------
346
+
347
+ /**
348
+ * Merge de instintos: preserva los del usuario, agrega nuevos del sistema.
349
+ *
350
+ * Estrategia:
351
+ * - Instintos con id que existe en destino: preservar versión del usuario
352
+ * - Instintos con id nuevo (solo en origen): agregar al final
353
+ * - Instintos en destino que no están en origen: preservar (creados por usuario)
354
+ *
355
+ * @param {string} origenPath - Ruta del archivo de instintos del paquete.
356
+ * @param {string} destinoPath - Ruta del archivo de instintos del proyecto.
357
+ * @returns {{ merged: boolean, nuevos: number, preservados: number, error?: string }}
358
+ */
359
+ function mergeInstintos(origenPath, destinoPath) {
360
+ if (!fs.existsSync(destinoPath)) {
361
+ // No hay destino — copiar directamente
362
+ return { merged: false, nuevos: 0, preservados: 0 };
363
+ }
364
+
365
+ if (!fs.existsSync(origenPath)) {
366
+ return { merged: true, nuevos: 0, preservados: 0 };
367
+ }
368
+
369
+ try {
370
+ const contenidoOrigen = fs.readFileSync(origenPath, 'utf8');
371
+ const contenidoDestino = fs.readFileSync(destinoPath, 'utf8');
372
+
373
+ // Extraer IDs de instintos
374
+ const idsOrigen = _extraerIdsInstintos(contenidoOrigen);
375
+ const idsDestino = _extraerIdsInstintos(contenidoDestino);
376
+
377
+ // Instintos nuevos (en origen, no en destino)
378
+ const idsNuevos = idsOrigen.filter(id => !idsDestino.includes(id));
379
+
380
+ if (idsNuevos.length === 0) {
381
+ return { merged: true, nuevos: 0, preservados: idsDestino.length };
382
+ }
383
+
384
+ // Extraer bloques de instintos nuevos del origen
385
+ const bloquesNuevos = idsNuevos
386
+ .map(id => _extraerBloqueInstinto(contenidoOrigen, id))
387
+ .filter(Boolean);
388
+
389
+ // Agregar al final del destino
390
+ let resultado = contenidoDestino.trimEnd() + '\n\n';
391
+ resultado += `# Instintos agregados por actualización SWL (${new Date().toISOString().split('T')[0]})\n`;
392
+ resultado += bloquesNuevos.join('\n');
393
+
394
+ fs.writeFileSync(destinoPath, resultado, 'utf8');
395
+
396
+ return { merged: true, nuevos: idsNuevos.length, preservados: idsDestino.length };
397
+ } catch (err) {
398
+ return { merged: false, nuevos: 0, preservados: 0, error: err.message };
399
+ }
400
+ }
401
+
402
+ /**
403
+ * Detecta si un skill fue generado por auto-evolución o creado por el usuario.
404
+ *
405
+ * Revisa el frontmatter del SKILL.md buscando marcadores:
406
+ * - `origin: auto-evolucion` → generado por el sistema
407
+ * - `origin: usuario` → creado por el usuario
408
+ * - Sin campo origin → asume sistema (core)
409
+ *
410
+ * @param {string} skillDir - Directorio del skill.
411
+ * @returns {{ esUsuario: boolean, origin: string }}
412
+ */
413
+ function detectarOrigenSkill(skillDir) {
414
+ const skillPath = path.join(skillDir, 'SKILL.md');
415
+ if (!fs.existsSync(skillPath)) {
416
+ return { esUsuario: false, origin: 'desconocido' };
417
+ }
418
+
419
+ try {
420
+ const contenido = fs.readFileSync(skillPath, 'utf8');
421
+
422
+ // Buscar campo origin en frontmatter
423
+ const matchOrigin = contenido.match(/origin:\s*["']?(\S+)["']?/);
424
+ if (matchOrigin) {
425
+ const origin = matchOrigin[1].toLowerCase();
426
+ return {
427
+ esUsuario: ['usuario', 'user', 'auto-evolucion', 'autoresearch'].includes(origin),
428
+ origin,
429
+ };
430
+ }
431
+
432
+ // Sin origin: verificar si el skill existe en el paquete core
433
+ // Si no está en el paquete core, probablemente es del usuario
434
+ return { esUsuario: false, origin: 'core' };
435
+ } catch (_) {
436
+ return { esUsuario: false, origin: 'desconocido' };
437
+ }
438
+ }
439
+
440
+ /**
441
+ * Merge de skills: preserva skills del usuario/auto-evolución, actualiza core.
442
+ *
443
+ * @param {string} origenDir - Directorio de skills del paquete.
444
+ * @param {string} destinoDir - Directorio de skills del proyecto.
445
+ * @param {object} [opts={}]
446
+ * @param {boolean} [opts.force=false]
447
+ * @returns {{ actualizados: number, preservados: number, nuevos: number }}
448
+ */
449
+ function mergeSkills(origenDir, destinoDir, opts = {}) {
450
+ if (!fs.existsSync(origenDir) || !fs.existsSync(destinoDir)) {
451
+ return { actualizados: 0, preservados: 0, nuevos: 0 };
452
+ }
453
+
454
+ let actualizados = 0;
455
+ let preservados = 0;
456
+ let nuevos = 0;
457
+
458
+ const skillsOrigen = fs.readdirSync(origenDir).filter(d => {
459
+ return fs.statSync(path.join(origenDir, d)).isDirectory();
460
+ });
461
+
462
+ for (const skill of skillsOrigen) {
463
+ const destinoSkill = path.join(destinoDir, skill);
464
+
465
+ if (!fs.existsSync(destinoSkill)) {
466
+ // Skill nuevo — copiar
467
+ _copiarDirectorioRecursivo(path.join(origenDir, skill), destinoSkill);
468
+ nuevos++;
469
+ continue;
470
+ }
471
+
472
+ // Skill existe — verificar si es del usuario
473
+ const { esUsuario } = detectarOrigenSkill(destinoSkill);
474
+ if (esUsuario) {
475
+ preservados++;
476
+ continue; // NUNCA sobreescribir skills del usuario
477
+ }
478
+
479
+ // Skill core — actualizar si hay force o si el contenido cambió
480
+ if (opts.force || tieneModificacionesUsuario(
481
+ path.join(destinoSkill, 'SKILL.md'),
482
+ path.join(origenDir, skill, 'SKILL.md'))
483
+ ) {
484
+ _copiarDirectorioRecursivo(path.join(origenDir, skill), destinoSkill);
485
+ actualizados++;
486
+ }
487
+ }
488
+
489
+ return { actualizados, preservados, nuevos };
490
+ }
491
+
492
+ // ---------------------------------------------------------------------------
493
+ // Helpers internos
494
+ // ---------------------------------------------------------------------------
495
+
496
+ function _extraerIdsInstintos(contenido) {
497
+ const ids = [];
498
+ const regex = /- id:\s*(\S+)/g;
499
+ let match;
500
+ while ((match = regex.exec(contenido)) !== null) {
501
+ ids.push(match[1]);
502
+ }
503
+ return ids;
504
+ }
505
+
506
+ function _extraerBloqueInstinto(contenido, id) {
507
+ const escapedId = id.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
508
+ const regex = new RegExp(`- id:\\s*${escapedId}[\\s\\S]*?(?=\\n- id:|$)`, 'm');
509
+ const match = contenido.match(regex);
510
+ return match ? match[0].trim() : null;
511
+ }
512
+
513
+ function _copiarDirectorioRecursivo(origen, destino) {
514
+ if (!fs.existsSync(destino)) {
515
+ fs.mkdirSync(destino, { recursive: true });
516
+ }
517
+
518
+ const entradas = fs.readdirSync(origen, { withFileTypes: true });
519
+ for (const entrada of entradas) {
520
+ const src = path.join(origen, entrada.name);
521
+ const dst = path.join(destino, entrada.name);
522
+
523
+ if (entrada.isDirectory()) {
524
+ _copiarDirectorioRecursivo(src, dst);
525
+ } else {
526
+ fs.copyFileSync(src, dst);
527
+ }
528
+ }
529
+ }
530
+
531
+ function _contarArchivosRecursivo(dir) {
532
+ let count = 0;
533
+ try {
534
+ const entradas = fs.readdirSync(dir, { withFileTypes: true });
535
+ for (const entrada of entradas) {
536
+ if (entrada.isDirectory()) {
537
+ count += _contarArchivosRecursivo(path.join(dir, entrada.name));
538
+ } else {
539
+ count++;
540
+ }
541
+ }
542
+ } catch (_) {}
543
+ return count;
544
+ }
545
+
546
+ function _restaurarRecursivo(backupDir, baseDir, onFile) {
547
+ const entradas = fs.readdirSync(backupDir, { withFileTypes: true });
548
+ for (const entrada of entradas) {
549
+ const src = path.join(backupDir, entrada.name);
550
+ const dst = path.join(baseDir, entrada.name);
551
+
552
+ if (entrada.isDirectory()) {
553
+ if (!fs.existsSync(dst)) fs.mkdirSync(dst, { recursive: true });
554
+ _restaurarRecursivo(src, dst, onFile);
555
+ } else {
556
+ fs.copyFileSync(src, dst);
557
+ if (onFile) onFile();
558
+ }
559
+ }
560
+ }
561
+
562
+ // ---------------------------------------------------------------------------
563
+ // Exports
564
+ // ---------------------------------------------------------------------------
565
+
566
+ module.exports = {
567
+ // Nivel 1: Protección
568
+ esProtegido,
569
+ tieneModificacionesUsuario,
570
+ ARCHIVOS_PROTEGIDOS,
571
+ DIRECTORIOS_PROTEGIDOS,
572
+ PATRONES_PROTEGIDOS,
573
+
574
+ // Nivel 2: Backup
575
+ crearBackup,
576
+ registrarBackup,
577
+ listarBackups,
578
+ restaurarBackup,
579
+ limpiarBackups,
580
+ dirBackup,
581
+
582
+ // Nivel 3: Merge
583
+ mergeInstintos,
584
+ detectarOrigenSkill,
585
+ mergeSkills,
586
+ };