@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,263 @@
1
+ #!/usr/bin/env node
2
+ 'use strict';
3
+
4
+ /**
5
+ * lib/agent-comms.js
6
+ * Agent Communications — Protocolo de comunicacion entre agentes SWL.
7
+ *
8
+ * Define tipos de mensaje estructurados para coordinacion de agentes:
9
+ * - TaskHandoff: delegar trabajo con contexto
10
+ * - Query/Response: intercambio de informacion
11
+ * - Completed: notificacion de completitud
12
+ * - Conflict: deteccion de ediciones concurrentes
13
+ *
14
+ * Los mensajes se persisten en .planning/comms/ como JSON.
15
+ *
16
+ * API publica:
17
+ * MESSAGE_TYPES → constantes de tipo
18
+ * enviarMensaje(baseDir, mensaje) → { id, type, from, to, ... }
19
+ * leerMensajesPendientes(baseDir, agentName) → object[]
20
+ * marcarProcesado(baseDir, messageId) → boolean
21
+ * detectarConflicto(baseDir, agentName, file) → object|null
22
+ * limpiarMensajes(baseDir, horasMaximas?) → number
23
+ */
24
+
25
+ const fs = require('fs');
26
+ const path = require('path');
27
+
28
+ const { atomicWriteJSON } = require('./atomic-write');
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Constantes
32
+ // ---------------------------------------------------------------------------
33
+
34
+ const COMMS_DIR = '.planning/comms';
35
+
36
+ /** Ventana de tiempo para detectar conflictos de edicion concurrente (ms). */
37
+ const VENTANA_CONFLICTO_MS = 5 * 60 * 1000;
38
+
39
+ /** Tipos de mensaje validos del protocolo SWL inter-agent. */
40
+ const MESSAGE_TYPES = {
41
+ TASK_HANDOFF: 'task_handoff',
42
+ QUERY: 'query',
43
+ RESPONSE: 'response',
44
+ COMPLETED: 'completed',
45
+ CONFLICT: 'conflict',
46
+ };
47
+
48
+ // ---------------------------------------------------------------------------
49
+ // Utilidades internas
50
+ // ---------------------------------------------------------------------------
51
+
52
+ /**
53
+ * Asegura que el directorio de comunicaciones exista.
54
+ *
55
+ * @param {string} baseDir - Directorio raiz del proyecto.
56
+ * @returns {string} Ruta absoluta al directorio de comms.
57
+ */
58
+ function ensureCommsDir(baseDir) {
59
+ const dir = path.join(baseDir, COMMS_DIR);
60
+ if (!fs.existsSync(dir)) {
61
+ fs.mkdirSync(dir, { recursive: true });
62
+ }
63
+ return dir;
64
+ }
65
+
66
+ /**
67
+ * Genera un ID de mensaje unico basado en timestamp y aleatoriedad.
68
+ *
69
+ * Formato: msg-{timestamp_base36}-{random_4chars}
70
+ * Ejemplo: msg-lxyz1a-k9mq
71
+ *
72
+ * @returns {string}
73
+ */
74
+ function generarMessageId() {
75
+ const ts = Date.now().toString(36);
76
+ const rand = Math.random().toString(36).slice(2, 6);
77
+ return `msg-${ts}-${rand}`;
78
+ }
79
+
80
+ /**
81
+ * Lee y parsea un archivo JSON de mensaje de forma segura.
82
+ * Retorna null si el archivo no existe o tiene JSON invalido.
83
+ *
84
+ * @param {string} filePath - Ruta absoluta al archivo .json.
85
+ * @returns {object|null}
86
+ */
87
+ function leerMensajeSeguro(filePath) {
88
+ try {
89
+ return JSON.parse(fs.readFileSync(filePath, 'utf8'));
90
+ } catch (_) {
91
+ return null;
92
+ }
93
+ }
94
+
95
+ // ---------------------------------------------------------------------------
96
+ // API publica
97
+ // ---------------------------------------------------------------------------
98
+
99
+ /**
100
+ * Envia un mensaje entre agentes persistiendolo en .planning/comms/.
101
+ *
102
+ * @param {string} baseDir - Directorio raiz del proyecto.
103
+ * @param {object} opts
104
+ * @param {string} opts.type - Uno de MESSAGE_TYPES (requerido).
105
+ * @param {string} [opts.from] - Nombre del agente emisor.
106
+ * @param {string} [opts.to] - Nombre del destinatario o 'broadcast'.
107
+ * @param {object} [opts.payload] - Cuerpo del mensaje, estructura libre.
108
+ * @param {string[]} [opts.contextFiles] - Archivos relevantes al mensaje.
109
+ * @returns {object} Mensaje completo con id, timestamp y status 'pending'.
110
+ */
111
+ function enviarMensaje(baseDir, { type, from, to, payload, contextFiles } = {}) {
112
+ const dir = ensureCommsDir(baseDir);
113
+ const id = generarMessageId();
114
+
115
+ const msg = {
116
+ id,
117
+ type,
118
+ from: from || 'unknown',
119
+ to: to || 'broadcast',
120
+ payload: payload || {},
121
+ contextFiles: contextFiles || [],
122
+ timestamp: new Date().toISOString(),
123
+ status: 'pending',
124
+ };
125
+
126
+ const filePath = path.join(dir, `${id}.json`);
127
+ atomicWriteJSON(filePath, msg);
128
+ return msg;
129
+ }
130
+
131
+ /**
132
+ * Lee todos los mensajes pendientes dirigidos a un agente especifico,
133
+ * incluyendo mensajes broadcast.
134
+ *
135
+ * @param {string} baseDir - Directorio raiz del proyecto.
136
+ * @param {string} agentName - Nombre del agente destinatario.
137
+ * @returns {object[]} Mensajes pendientes ordenados por timestamp ascendente.
138
+ */
139
+ function leerMensajesPendientes(baseDir, agentName) {
140
+ const dir = path.join(baseDir, COMMS_DIR);
141
+ if (!fs.existsSync(dir)) return [];
142
+
143
+ return fs.readdirSync(dir)
144
+ .filter(f => f.startsWith('msg-') && f.endsWith('.json'))
145
+ .map(f => leerMensajeSeguro(path.join(dir, f)))
146
+ .filter(m =>
147
+ m !== null &&
148
+ m.status === 'pending' &&
149
+ (m.to === agentName || m.to === 'broadcast'),
150
+ )
151
+ .sort((a, b) => new Date(a.timestamp) - new Date(b.timestamp));
152
+ }
153
+
154
+ /**
155
+ * Marca un mensaje como procesado, registrando la hora de procesamiento.
156
+ *
157
+ * @param {string} baseDir - Directorio raiz del proyecto.
158
+ * @param {string} messageId - ID del mensaje a marcar.
159
+ * @returns {boolean} true si el mensaje existia y fue actualizado, false si no.
160
+ */
161
+ function marcarProcesado(baseDir, messageId) {
162
+ const filePath = path.join(baseDir, COMMS_DIR, `${messageId}.json`);
163
+ if (!fs.existsSync(filePath)) return false;
164
+
165
+ const msg = leerMensajeSeguro(filePath);
166
+ if (!msg) return false;
167
+
168
+ msg.status = 'processed';
169
+ msg.processedAt = new Date().toISOString();
170
+ atomicWriteJSON(filePath, msg);
171
+ return true;
172
+ }
173
+
174
+ /**
175
+ * Detecta conflictos de edicion concurrente: verifica si algun otro agente
176
+ * referencio el mismo archivo en un mensaje reciente (ventana de 5 minutos).
177
+ *
178
+ * @param {string} baseDir - Directorio raiz del proyecto.
179
+ * @param {string} agentName - Nombre del agente que quiere modificar el archivo.
180
+ * @param {string} filePath - Ruta del archivo que se desea modificar.
181
+ * @returns {object|null}
182
+ * Objeto de conflicto si se detecta:
183
+ * { conflicto, agenteConflicto, archivo, mensajeOriginal, timestamp }
184
+ * null si no hay conflicto.
185
+ */
186
+ function detectarConflicto(baseDir, agentName, filePath) {
187
+ const dir = path.join(baseDir, COMMS_DIR);
188
+ if (!fs.existsSync(dir)) return null;
189
+
190
+ const ahora = Date.now();
191
+
192
+ const mensajes = fs.readdirSync(dir)
193
+ .filter(f => f.startsWith('msg-') && f.endsWith('.json'))
194
+ .map(f => leerMensajeSeguro(path.join(dir, f)))
195
+ .filter(Boolean);
196
+
197
+ for (const msg of mensajes) {
198
+ // Ignorar mensajes del propio agente
199
+ if (msg.from === agentName) continue;
200
+
201
+ // Ignorar mensajes fuera de la ventana de deteccion
202
+ if (ahora - new Date(msg.timestamp).getTime() > VENTANA_CONFLICTO_MS) continue;
203
+
204
+ const archivos = msg.contextFiles || [];
205
+ if (archivos.includes(filePath)) {
206
+ return {
207
+ conflicto: true,
208
+ agenteConflicto: msg.from,
209
+ archivo: filePath,
210
+ mensajeOriginal: msg.id,
211
+ timestamp: msg.timestamp,
212
+ };
213
+ }
214
+ }
215
+
216
+ return null;
217
+ }
218
+
219
+ /**
220
+ * Elimina mensajes ya procesados cuya antiguedad supera el limite indicado.
221
+ * Los mensajes pendientes nunca se eliminan con esta funcion.
222
+ *
223
+ * @param {string} baseDir - Directorio raiz del proyecto.
224
+ * @param {number} [horasMaximas=24] - Edad maxima en horas para mensajes procesados.
225
+ * @returns {number} Cantidad de mensajes eliminados.
226
+ */
227
+ function limpiarMensajes(baseDir, horasMaximas = 24) {
228
+ const dir = path.join(baseDir, COMMS_DIR);
229
+ if (!fs.existsSync(dir)) return 0;
230
+
231
+ const ahora = Date.now();
232
+ const limite = horasMaximas * 60 * 60 * 1000;
233
+ let eliminados = 0;
234
+
235
+ for (const f of fs.readdirSync(dir)) {
236
+ if (!f.startsWith('msg-') || !f.endsWith('.json')) continue;
237
+
238
+ const msg = leerMensajeSeguro(path.join(dir, f));
239
+ if (!msg) continue;
240
+
241
+ const esViejo = ahora - new Date(msg.timestamp).getTime() > limite;
242
+ if (msg.status === 'processed' && esViejo) {
243
+ fs.unlinkSync(path.join(dir, f));
244
+ eliminados++;
245
+ }
246
+ }
247
+
248
+ return eliminados;
249
+ }
250
+
251
+ // ---------------------------------------------------------------------------
252
+ // Exportaciones
253
+ // ---------------------------------------------------------------------------
254
+
255
+ module.exports = {
256
+ MESSAGE_TYPES,
257
+ enviarMensaje,
258
+ leerMensajesPendientes,
259
+ marcarProcesado,
260
+ detectarConflicto,
261
+ limpiarMensajes,
262
+ COMMS_DIR,
263
+ };
@@ -0,0 +1,284 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Taxonomía de códigos de issue para escaneo de agentes y skills.
5
+ *
6
+ * Portado desde agent-scan-main / docs/issue-codes.md (Apache 2.0).
7
+ * Cubre amenazas en servidores MCP, skills de agentes y flujos tóxicos.
8
+ *
9
+ * Uso en hooks de escaneo:
10
+ * const { ISSUE_CODES, obtenerCodigo, formatearHallazgo } = require('./agent-issue-codes');
11
+ * const info = obtenerCodigo('W008');
12
+ * // → { codigo: 'W008', severidad: 'warning', titulo: 'Secretos hardcodeados en skill', ... }
13
+ *
14
+ * @module hooks/lib/agent-issue-codes
15
+ */
16
+
17
+ // ---------------------------------------------------------------------------
18
+ // Constante principal
19
+ // ---------------------------------------------------------------------------
20
+
21
+ /**
22
+ * Catálogo completo de códigos de issue estandarizados.
23
+ * Congelado para prevenir mutaciones en tiempo de ejecución.
24
+ *
25
+ * Severidades usadas:
26
+ * - 'critical' → bloquear inmediatamente, riesgo de supply chain attack
27
+ * - 'error' → problema grave, acción requerida
28
+ * - 'warning' → patrón riesgoso, investigar antes de continuar
29
+ * - 'info' → observación, baja prioridad
30
+ *
31
+ * @type {Readonly<Array<{codigo: string, severidad: string, titulo: string, descripcion: string}>>}
32
+ */
33
+ const ISSUE_CODES = Object.freeze([
34
+ // -------------------------------------------------------------------------
35
+ // Servidores MCP comprometidos (E001, E002, W001)
36
+ // -------------------------------------------------------------------------
37
+ {
38
+ codigo: 'E001',
39
+ severidad: 'critical',
40
+ titulo: 'Inyección de prompt en descripción de herramienta MCP',
41
+ descripcion: 'Se detectó una inyección de prompt en la descripción de una herramienta ' +
42
+ 'del servidor MCP. Ataque de envenenamiento de herramientas (tool poisoning): ' +
43
+ 'instrucciones adversariales ocultas que manipulan el comportamiento del agente. ' +
44
+ 'Desactivar la herramienta de inmediato.',
45
+ },
46
+ {
47
+ codigo: 'E002',
48
+ severidad: 'error',
49
+ titulo: 'Referencia entre servidores MCP (tool shadowing)',
50
+ descripcion: 'Una herramienta de un servidor MCP referencia una herramienta de otro servidor. ' +
51
+ 'Los servidores MCP deben ser autocontenidos. Cuando la descripción de una ' +
52
+ 'herramienta menciona herramientas de otro servidor, puede envenenar el ' +
53
+ 'comportamiento de esas herramientas de confianza (ataque de shadowing).',
54
+ },
55
+ {
56
+ codigo: 'W001',
57
+ severidad: 'warning',
58
+ titulo: 'Palabras sospechosas en descripción de herramienta MCP',
59
+ descripcion: 'La descripción de la herramienta contiene palabras frecuentes en ataques ' +
60
+ 'de inyección: "important", "crucial", "critical", "ignore", "override", ' +
61
+ '"bypass". Su presencia aislada no confirma intención maliciosa, pero amerita ' +
62
+ 'investigación, especialmente combinada con descripciones inusuales.',
63
+ },
64
+
65
+ // -------------------------------------------------------------------------
66
+ // Flujos tóxicos (W015–W020)
67
+ // -------------------------------------------------------------------------
68
+ {
69
+ codigo: 'W015',
70
+ severidad: 'warning',
71
+ titulo: 'Contenido no confiable expuesto al agente (alta confianza)',
72
+ descripcion: 'El servidor MCP expone al agente contenido potencialmente no confiable ' +
73
+ 'de fuentes externas sin sanitización adecuada. Riesgo de inyección indirecta ' +
74
+ 'de prompt. Detección de alta confianza: herramientas que claramente obtienen ' +
75
+ 'datos de fuentes públicas o controladas por el usuario.',
76
+ },
77
+ {
78
+ codigo: 'W016',
79
+ severidad: 'warning',
80
+ titulo: 'Posible contenido no confiable expuesto al agente (baja confianza)',
81
+ descripcion: 'Detección de baja confianza de exposición potencial a contenido de terceros. ' +
82
+ 'El servidor MCP puede exponer datos externos, pero el riesgo es menos ' +
83
+ 'certero. Verificar si la herramienta valida y sanitiza datos externos.',
84
+ },
85
+ {
86
+ codigo: 'W017',
87
+ severidad: 'warning',
88
+ titulo: 'Exposición de datos sensibles (alta sensibilidad)',
89
+ descripcion: 'El servidor MCP integra y recupera información altamente sensible: ' +
90
+ 'comunicaciones personales, registros financieros o bóvedas de credenciales. ' +
91
+ 'Cargar datos privados en el contexto del agente amplifica el riesgo de ' +
92
+ 'exfiltración ante inyecciones de prompt o vulnerabilidades de logging.',
93
+ },
94
+ {
95
+ codigo: 'W018',
96
+ severidad: 'warning',
97
+ titulo: 'Exposición de datos del espacio de trabajo',
98
+ descripcion: 'El servidor MCP otorga acceso a archivos locales, código del proyecto ' +
99
+ 'o almacenes de datos del usuario. Menos sensible que W017, pero introduce ' +
100
+ 'riesgo de fuga de propiedad intelectual o detalles internos del proyecto.',
101
+ },
102
+ {
103
+ codigo: 'W019',
104
+ severidad: 'warning',
105
+ titulo: 'Capacidades destructivas (infraestructura compartida)',
106
+ descripcion: 'El servidor MCP permite modificar infraestructura compartida, ejecutar ' +
107
+ 'comandos de sistema arbitrarios o afectar a otros usuarios. Incluye: ' +
108
+ 'comandos shell, interacción con el navegador autenticado, modificación de ' +
109
+ 'SaaS compartido o transacciones financieras irreversibles.',
110
+ },
111
+ {
112
+ codigo: 'W020',
113
+ severidad: 'warning',
114
+ titulo: 'Capacidades destructivas locales',
115
+ descripcion: 'El servidor MCP permite modificar o eliminar archivos locales, alterar ' +
116
+ 'configuraciones personales o cambiar el estado del entorno de un solo usuario. ' +
117
+ 'Radio de explosión contenido, pero permite pérdida permanente de datos locales.',
118
+ },
119
+
120
+ // -------------------------------------------------------------------------
121
+ // Skills comprometidas (E004, E005, E006)
122
+ // -------------------------------------------------------------------------
123
+ {
124
+ codigo: 'E004',
125
+ severidad: 'critical',
126
+ titulo: 'Inyección de prompt en skill',
127
+ descripcion: 'Se detectó una inyección de prompt en las instrucciones del skill. ' +
128
+ 'El skill contiene instrucciones ocultas o engañosas fuera de su propósito ' +
129
+ 'declarado que intentan anular las directrices de seguridad del agente.',
130
+ },
131
+ {
132
+ codigo: 'E005',
133
+ severidad: 'critical',
134
+ titulo: 'URL de descarga sospechosa en skill',
135
+ descripcion: 'Se detectó una URL sospechosa en las instrucciones del skill que podría ' +
136
+ 'llevar al agente a descargar y ejecutar scripts o binarios maliciosos. ' +
137
+ 'Incluye: ejecutables de fuentes no confiables, typosquatting de paquetes ' +
138
+ 'oficiales, acortadores de URL o hosting personal de archivos.',
139
+ },
140
+ {
141
+ codigo: 'E006',
142
+ severidad: 'critical',
143
+ titulo: 'Patrones de código malicioso en skill',
144
+ descripcion: 'Se detectaron patrones de alto riesgo en el contenido del skill: ' +
145
+ 'exfiltración de datos, puertas traseras, ejecución remota de código, ' +
146
+ 'robo de credenciales, ataques a la cadena de suministro u ofuscación.',
147
+ },
148
+
149
+ // -------------------------------------------------------------------------
150
+ // Skills vulnerables (W007–W014)
151
+ // -------------------------------------------------------------------------
152
+ {
153
+ codigo: 'W007',
154
+ severidad: 'warning',
155
+ titulo: 'Manejo inseguro de credenciales en skill',
156
+ descripcion: 'El skill maneja credenciales de forma insegura al requerir que el agente ' +
157
+ 'incluya valores secretos literales en su output generado. Expone credenciales ' +
158
+ 'en el contexto y el historial de conversación del agente.',
159
+ },
160
+ {
161
+ codigo: 'W008',
162
+ severidad: 'warning',
163
+ titulo: 'Secretos hardcodeados en skill',
164
+ descripcion: 'Se detectaron credenciales sensibles embebidas directamente en el contenido ' +
165
+ 'del skill: claves de API, tokens de acceso, claves privadas o secretos de ' +
166
+ 'servicio. Los secretos nunca deben estar hardcodeados en texto plano.',
167
+ },
168
+ {
169
+ codigo: 'W009',
170
+ severidad: 'warning',
171
+ titulo: 'Capacidad de ejecución financiera directa',
172
+ descripcion: 'El skill está diseñado para operaciones financieras directas: otorga al ' +
173
+ 'agente capacidad de mover dinero o ejecutar transacciones financieras — ' +
174
+ 'procesamiento de pagos, operaciones con criptomonedas, integraciones ' +
175
+ 'bancarias o ejecución de órdenes de mercado.',
176
+ },
177
+ {
178
+ codigo: 'W011',
179
+ severidad: 'warning',
180
+ titulo: 'Exposición a contenido de terceros no confiable',
181
+ descripcion: 'El skill expone al agente a contenido generado por usuarios de fuentes ' +
182
+ 'públicas de terceros, creando riesgo de inyección indirecta de prompt. ' +
183
+ 'Incluye: navegación de URLs arbitrarias, lectura de redes sociales o ' +
184
+ 'análisis de contenido de sitios desconocidos.',
185
+ },
186
+ {
187
+ codigo: 'W012',
188
+ severidad: 'warning',
189
+ titulo: 'Dependencia externa no verificable',
190
+ descripcion: 'El skill obtiene instrucciones o código desde una URL externa en tiempo ' +
191
+ 'de ejecución, y el contenido obtenido controla directamente los prompts ' +
192
+ 'del agente o ejecuta código. Permite que la fuente externa modifique el ' +
193
+ 'comportamiento del agente sin cambios en el skill (riesgo RCE remoto).',
194
+ },
195
+ {
196
+ codigo: 'W013',
197
+ severidad: 'warning',
198
+ titulo: 'Modificación de servicios del sistema',
199
+ descripcion: 'El skill instruye al agente a comprometer la seguridad o integridad de ' +
200
+ 'la máquina del usuario modificando servicios o configuraciones a nivel de ' +
201
+ 'sistema: obtener privilegios elevados, alterar scripts de inicio o cambiar ' +
202
+ 'configuraciones globales. Puede ser legítimo en casos raros — investigar.',
203
+ },
204
+ {
205
+ codigo: 'W014',
206
+ severidad: 'info',
207
+ titulo: 'Archivo SKILL.md faltante',
208
+ descripcion: 'El skill no tiene el archivo SKILL.md requerido. Este archivo provee ' +
209
+ 'metadatos esenciales y documentación sobre el propósito, capacidades y ' +
210
+ 'consideraciones de seguridad del skill. Sin él, el análisis de seguridad ' +
211
+ 'es incompleto y los usuarios no pueden evaluar el skill antes de usarlo.',
212
+ },
213
+ ]);
214
+
215
+ // ---------------------------------------------------------------------------
216
+ // Funciones auxiliares
217
+ // ---------------------------------------------------------------------------
218
+
219
+ /**
220
+ * Mapa de acceso rápido por código (O(1)).
221
+ * Construido una sola vez al cargar el módulo.
222
+ *
223
+ * @type {Map<string, object>}
224
+ */
225
+ const _MAPA_CODIGOS = new Map(ISSUE_CODES.map(issue => [issue.codigo, issue]));
226
+
227
+ /**
228
+ * Busca y devuelve la entrada completa de un código de issue.
229
+ *
230
+ * @param {string} codigo - Código a buscar (ej. 'W008', 'E001').
231
+ * @returns {{ codigo: string, severidad: string, titulo: string, descripcion: string }|null}
232
+ * El objeto de issue, o null si el código no existe.
233
+ *
234
+ * @example
235
+ * obtenerCodigo('W008')
236
+ * // → { codigo: 'W008', severidad: 'warning', titulo: 'Secretos hardcodeados en skill', ... }
237
+ *
238
+ * obtenerCodigo('X999') // → null
239
+ */
240
+ function obtenerCodigo(codigo) {
241
+ return _MAPA_CODIGOS.get(String(codigo || '')) || null;
242
+ }
243
+
244
+ /**
245
+ * Genera una línea de hallazgo legible para reportes de escaneo.
246
+ * Incluye el código, la severidad, la ubicación y el detalle contextual.
247
+ *
248
+ * @param {object} params - Datos del hallazgo.
249
+ * @param {string} params.codigo - Código de issue (ej. 'W008').
250
+ * @param {string} [params.archivo] - Ruta del archivo donde se detectó.
251
+ * @param {number} [params.linea] - Número de línea del hallazgo.
252
+ * @param {string} [params.detalle] - Información adicional específica del hallazgo.
253
+ * @returns {string} Línea formateada para incluir en reportes.
254
+ *
255
+ * @example
256
+ * formatearHallazgo({ codigo: 'W008', archivo: 'habilidades/mi-skill.md', linea: 15, detalle: 'API key detectada' })
257
+ * // → '[W008] warning — Secretos hardcodeados en skill\n Archivo: habilidades/mi-skill.md:15\n Detalle: API key detectada'
258
+ */
259
+ function formatearHallazgo({ codigo, archivo, linea, detalle } = {}) {
260
+ const issue = obtenerCodigo(codigo);
261
+
262
+ const encabezado = issue
263
+ ? `[${issue.codigo}] ${issue.severidad} — ${issue.titulo}`
264
+ : `[${String(codigo || 'DESCONOCIDO')}] — código no reconocido`;
265
+
266
+ const partes = [encabezado];
267
+
268
+ if (archivo) {
269
+ const ubicacion = linea ? `${archivo}:${linea}` : archivo;
270
+ partes.push(` Archivo: ${ubicacion}`);
271
+ }
272
+
273
+ if (detalle) {
274
+ partes.push(` Detalle: ${String(detalle)}`);
275
+ }
276
+
277
+ return partes.join('\n');
278
+ }
279
+
280
+ // ---------------------------------------------------------------------------
281
+ // Exports
282
+ // ---------------------------------------------------------------------------
283
+
284
+ module.exports = { ISSUE_CODES, obtenerCodigo, formatearHallazgo };