@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,134 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Esquema de tipos de span para telemetría de agentes.
5
+ *
6
+ * Portado desde openai-agents-python / src/agents/tracing/span_data.py
7
+ * Licencia origen: MIT. Traducción a JS: SWL (español es-MX).
8
+ *
9
+ * Proporciona la taxonomía de 13 tipos de span usados en el sistema de
10
+ * trazas OTLP-lite de swl-ses, garantizando consistencia entre el hook
11
+ * telemetria-agentes.js y los exportadores que consumen .planning/traces/.
12
+ *
13
+ * @module scripts/lib/span-schema
14
+ */
15
+
16
+ // ---------------------------------------------------------------------------
17
+ // Constantes
18
+ // ---------------------------------------------------------------------------
19
+
20
+ /**
21
+ * Tipos de span válidos en el sistema de trazas.
22
+ * Congelado para prevenir mutaciones accidentales en tiempo de ejecución.
23
+ *
24
+ * Correspondencia con openai-agents-python:
25
+ * - agent → AgentSpanData
26
+ * - function → FunctionSpanData
27
+ * - generation → GenerationSpanData
28
+ * - handoff → HandoffSpanData
29
+ * - guardrail → GuardrailSpanData
30
+ * - turn → TurnSpanData
31
+ * - task → TaskSpanData
32
+ * - mcp_list_tools → MCPListToolsSpanData
33
+ * - response → ResponseSpanData
34
+ * - speech → SpeechSpanData
35
+ * - transcription → TranscriptionSpanData
36
+ * - speech_group → SpeechGroupSpanData
37
+ * - custom → CustomSpanData
38
+ *
39
+ * @type {Readonly<{[key: string]: string}>}
40
+ */
41
+ const SPAN_TYPES = Object.freeze({
42
+ /** Invocación de un agente SWL (subagente orquestado). */
43
+ AGENT: 'agent',
44
+ /** Invocación de una herramienta/función por el agente. */
45
+ FUNCTION: 'function',
46
+ /** Llamada de generación al modelo LLM. */
47
+ GENERATION: 'generation',
48
+ /** Traspaso de control entre agentes (handoff). */
49
+ HANDOFF: 'handoff',
50
+ /** Activación de un guardrail de validación de input/output. */
51
+ GUARDRAIL: 'guardrail',
52
+ /** Un turno del loop del agente. */
53
+ TURN: 'turn',
54
+ /** Una ejecución completa de alto nivel (task runner run). */
55
+ TASK: 'task',
56
+ /** Listado de herramientas disponibles en un servidor MCP. */
57
+ MCP_LIST_TOOLS: 'mcp_list_tools',
58
+ /** Span de respuesta del modelo (responses API). */
59
+ RESPONSE: 'response',
60
+ /** Síntesis de voz (TTS). */
61
+ SPEECH: 'speech',
62
+ /** Transcripción de voz a texto (STT). */
63
+ TRANSCRIPTION: 'transcription',
64
+ /** Agrupación de spans de voz relacionados. */
65
+ SPEECH_GROUP: 'speech_group',
66
+ /** Span personalizado para eventos sin categoría definida. */
67
+ CUSTOM: 'custom',
68
+ });
69
+
70
+ /**
71
+ * Conjunto de valores válidos (para validación O(1)).
72
+ * @type {Set<string>}
73
+ */
74
+ const _TIPOS_VALIDOS = new Set(Object.values(SPAN_TYPES));
75
+
76
+ // ---------------------------------------------------------------------------
77
+ // Funciones exportadas
78
+ // ---------------------------------------------------------------------------
79
+
80
+ /**
81
+ * Verifica si un string es un tipo de span válido en la taxonomía.
82
+ *
83
+ * @param {string} tipo - Valor a verificar.
84
+ * @returns {boolean} true si es un tipo de span reconocido.
85
+ *
86
+ * @example
87
+ * esTipoSpanValido('agent') // → true
88
+ * esTipoSpanValido('unknown') // → false
89
+ */
90
+ function esTipoSpanValido(tipo) {
91
+ return _TIPOS_VALIDOS.has(tipo);
92
+ }
93
+
94
+ /**
95
+ * Construye un objeto de span estandarizado con los campos requeridos.
96
+ * Valida el tipo antes de construir — lanza TypeError si el tipo no es válido.
97
+ *
98
+ * @param {object} opciones - Parámetros del span.
99
+ * @param {string} opciones.tipo - Tipo de span (debe estar en SPAN_TYPES).
100
+ * @param {string} opciones.nombre - Nombre descriptivo del span (ej. "agent:revisor-swl").
101
+ * @param {object} [opciones.datos] - Payload específico del tipo de span.
102
+ * @param {string} [opciones.timestamp] - ISO timestamp de inicio (por defecto: ahora).
103
+ * @param {string} [opciones.traceId] - ID de traza padre (opcional).
104
+ * @param {string} [opciones.parentSpanId] - ID del span padre (opcional).
105
+ * @returns {{ tipo: string, nombre: string, datos: object, timestamp: string, traceId: string|null, parentSpanId: string|null }}
106
+ *
107
+ * @throws {TypeError} Si el tipo no es un valor válido de SPAN_TYPES.
108
+ *
109
+ * @example
110
+ * construirSpan({ tipo: 'agent', nombre: 'agent:planificador-swl' })
111
+ * // → { tipo: 'agent', nombre: 'agent:planificador-swl', datos: {}, timestamp: '...', traceId: null, parentSpanId: null }
112
+ */
113
+ function construirSpan({ tipo, nombre, datos = {}, timestamp, traceId = null, parentSpanId = null }) {
114
+ if (!esTipoSpanValido(tipo)) {
115
+ throw new TypeError(
116
+ `Tipo de span inválido: "${tipo}". Tipos válidos: ${[..._TIPOS_VALIDOS].join(', ')}`
117
+ );
118
+ }
119
+
120
+ return {
121
+ tipo,
122
+ nombre: String(nombre || ''),
123
+ datos: datos && typeof datos === 'object' ? { ...datos } : {},
124
+ timestamp: timestamp || new Date().toISOString(),
125
+ traceId: traceId || null,
126
+ parentSpanId: parentSpanId || null,
127
+ };
128
+ }
129
+
130
+ // ---------------------------------------------------------------------------
131
+ // Exports
132
+ // ---------------------------------------------------------------------------
133
+
134
+ module.exports = { SPAN_TYPES, esTipoSpanValido, construirSpan };
@@ -0,0 +1,255 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * tool-cost-analyzer.js
5
+ *
6
+ * Consulta ~/.claude/usage.db (SQLite generado por claude-usage) y devuelve
7
+ * métricas de costo por tool_name. Útil para identificar qué herramientas SWL
8
+ * consumen más tokens en sesiones reales.
9
+ *
10
+ * Uso programático:
11
+ * const analyzer = require('./tool-cost-analyzer');
12
+ * const metricas = await analyzer.obtenerMetricasPorHerramienta({ dias: 30 });
13
+ *
14
+ * Requiere: better-sqlite3 o sqlite3. Usa execFile('python') como fallback.
15
+ */
16
+
17
+ const { execFile } = require('child_process');
18
+ const path = require('path');
19
+ const os = require('os');
20
+ const fs = require('fs');
21
+
22
+ const DB_PATH = path.join(os.homedir(), '.claude', 'usage.db');
23
+
24
+ // Precios estimados por 1M tokens (USD) — actualizados a 2026-04-17
25
+ const PRECIOS = {
26
+ 'claude-opus-4-7': { input: 15.00, output: 75.00, cache_read: 1.50, cache_creation: 18.75 },
27
+ 'claude-opus-4-6': { input: 15.00, output: 75.00, cache_read: 1.50, cache_creation: 18.75 },
28
+ 'claude-sonnet-4-6': { input: 3.00, output: 15.00, cache_read: 0.30, cache_creation: 3.75 },
29
+ 'claude-haiku-4-5': { input: 0.80, output: 4.00, cache_read: 0.08, cache_creation: 1.00 },
30
+ };
31
+ const PRECIO_DEFAULT = { input: 3.00, output: 15.00, cache_read: 0.30, cache_creation: 3.75 };
32
+
33
+ /**
34
+ * Calcula el costo estimado a partir de tokens y modelo.
35
+ */
36
+ function calcularCosto(tokens, modelo) {
37
+ const precios = PRECIOS[modelo] || PRECIO_DEFAULT;
38
+ return (
39
+ ((tokens.input || 0) * precios.input / 1_000_000) +
40
+ ((tokens.output || 0) * precios.output / 1_000_000) +
41
+ ((tokens.cache_read || 0) * precios.cache_read / 1_000_000) +
42
+ ((tokens.cache_creation || 0) * precios.cache_creation / 1_000_000)
43
+ );
44
+ }
45
+
46
+ /**
47
+ * Ejecuta una consulta SQLite usando Python como fallback (zero npm deps).
48
+ * @param {string} sql
49
+ * @returns {Promise<Array>}
50
+ */
51
+ function consultarSQLite(sql) {
52
+ return new Promise((resolve, reject) => {
53
+ if (!fs.existsSync(DB_PATH)) {
54
+ return resolve([]);
55
+ }
56
+
57
+ const pythonCmd = process.platform === 'win32' ? 'python' : 'python3';
58
+ const script = `
59
+ import sqlite3, json, sys
60
+ conn = sqlite3.connect(r'${DB_PATH.replace(/\\/g, '\\\\')}')
61
+ conn.row_factory = sqlite3.Row
62
+ rows = conn.execute(${JSON.stringify(sql)}).fetchall()
63
+ print(json.dumps([dict(r) for r in rows]))
64
+ `;
65
+ execFile(pythonCmd, ['-c', script], { timeout: 15_000 }, (err, stdout) => {
66
+ if (err) return reject(err);
67
+ try {
68
+ resolve(JSON.parse(stdout.trim() || '[]'));
69
+ } catch (e) {
70
+ reject(e);
71
+ }
72
+ });
73
+ });
74
+ }
75
+
76
+ /**
77
+ * Obtiene métricas agregadas por tool_name para los últimos N días.
78
+ *
79
+ * @param {object} opciones
80
+ * @param {number} [opciones.dias=30] — Rango de días a consultar
81
+ * @param {number} [opciones.topN=20] — Número de herramientas a retornar
82
+ * @returns {Promise<Array<{tool_name, llamadas, input_tokens, output_tokens, costo_usd}>>}
83
+ */
84
+ async function obtenerMetricasPorHerramienta({ dias = 30, topN = 20 } = {}) {
85
+ const fechaDesde = new Date(Date.now() - dias * 86_400_000).toISOString();
86
+
87
+ const sql = `
88
+ SELECT
89
+ COALESCE(tool_name, '(sin herramienta)') AS tool_name,
90
+ COUNT(*) AS llamadas,
91
+ SUM(input_tokens) AS input_tokens,
92
+ SUM(output_tokens) AS output_tokens,
93
+ SUM(cache_read_tokens) AS cache_read,
94
+ SUM(cache_creation_tokens) AS cache_creation,
95
+ MAX(model) AS modelo
96
+ FROM turns
97
+ WHERE timestamp >= '${fechaDesde}'
98
+ GROUP BY tool_name
99
+ ORDER BY input_tokens + output_tokens DESC
100
+ LIMIT ${topN}
101
+ `;
102
+
103
+ const filas = await consultarSQLite(sql);
104
+
105
+ return filas.map(f => ({
106
+ tool_name: f.tool_name,
107
+ llamadas: f.llamadas,
108
+ input_tokens: f.input_tokens || 0,
109
+ output_tokens: f.output_tokens || 0,
110
+ costo_usd: calcularCosto({
111
+ input: f.input_tokens,
112
+ output: f.output_tokens,
113
+ cache_read: f.cache_read,
114
+ cache_creation: f.cache_creation,
115
+ }, f.modelo),
116
+ }));
117
+ }
118
+
119
+ /**
120
+ * Obtiene resumen global de sesiones (total tokens, costo, sesiones) para N días.
121
+ *
122
+ * @param {object} opciones
123
+ * @param {number} [opciones.dias=30]
124
+ * @returns {Promise<{sesiones, turns, input_tokens, output_tokens, costo_usd}>}
125
+ */
126
+ async function obtenerResumenGlobal({ dias = 30 } = {}) {
127
+ const fechaDesde = new Date(Date.now() - dias * 86_400_000).toISOString();
128
+
129
+ const sql = `
130
+ SELECT
131
+ COUNT(DISTINCT session_id) AS sesiones,
132
+ COUNT(*) AS turns,
133
+ SUM(input_tokens) AS input_tokens,
134
+ SUM(output_tokens) AS output_tokens,
135
+ SUM(cache_read_tokens) AS cache_read,
136
+ SUM(cache_creation_tokens) AS cache_creation
137
+ FROM turns
138
+ WHERE timestamp >= '${fechaDesde}'
139
+ `;
140
+
141
+ const [f] = await consultarSQLite(sql);
142
+ if (!f) return { sesiones: 0, turns: 0, input_tokens: 0, output_tokens: 0, costo_usd: 0 };
143
+
144
+ return {
145
+ sesiones: f.sesiones || 0,
146
+ turns: f.turns || 0,
147
+ input_tokens: f.input_tokens || 0,
148
+ output_tokens: f.output_tokens || 0,
149
+ costo_usd: calcularCosto({
150
+ input: f.input_tokens,
151
+ output: f.output_tokens,
152
+ cache_read: f.cache_read,
153
+ cache_creation: f.cache_creation,
154
+ }, 'claude-sonnet-4-6'),
155
+ };
156
+ }
157
+
158
+ /**
159
+ * Obtiene métricas por nombre de agente SWL (columna agent_name).
160
+ * Solo disponible si la DB fue escaneada con scanner.py v5.3.3+.
161
+ *
162
+ * @param {object} opciones
163
+ * @param {number} [opciones.dias=30]
164
+ * @param {number} [opciones.topN=15]
165
+ * @returns {Promise<Array<{agent_name, llamadas, input_tokens, output_tokens, costo_usd}>>}
166
+ */
167
+ async function obtenerMetricasPorAgente({ dias = 30, topN = 15 } = {}) {
168
+ const fechaDesde = new Date(Date.now() - dias * 86_400_000).toISOString();
169
+
170
+ const sql = `
171
+ SELECT
172
+ agent_name,
173
+ COUNT(*) AS llamadas,
174
+ SUM(input_tokens) AS input_tokens,
175
+ SUM(output_tokens) AS output_tokens,
176
+ SUM(cache_read_tokens) AS cache_read,
177
+ SUM(cache_creation_tokens) AS cache_creation,
178
+ MAX(model) AS modelo
179
+ FROM turns
180
+ WHERE agent_name IS NOT NULL
181
+ AND timestamp >= '${fechaDesde}'
182
+ GROUP BY agent_name
183
+ ORDER BY input_tokens + output_tokens DESC
184
+ LIMIT ${topN}
185
+ `;
186
+
187
+ const filas = await consultarSQLite(sql);
188
+
189
+ return filas.map(f => ({
190
+ agent_name: f.agent_name,
191
+ llamadas: f.llamadas,
192
+ input_tokens: f.input_tokens || 0,
193
+ output_tokens: f.output_tokens || 0,
194
+ costo_usd: calcularCosto({
195
+ input: f.input_tokens,
196
+ output: f.output_tokens,
197
+ cache_read: f.cache_read,
198
+ cache_creation: f.cache_creation,
199
+ }, f.modelo),
200
+ }));
201
+ }
202
+
203
+ /**
204
+ * Obtiene métricas por nombre de skill SWL (columna skill_name).
205
+ * Solo disponible si la DB fue escaneada con scanner.py v5.3.3+.
206
+ *
207
+ * @param {object} opciones
208
+ * @param {number} [opciones.dias=30]
209
+ * @param {number} [opciones.topN=15]
210
+ * @returns {Promise<Array<{skill_name, llamadas, input_tokens, output_tokens, costo_usd}>>}
211
+ */
212
+ async function obtenerMetricasPorSkill({ dias = 30, topN = 15 } = {}) {
213
+ const fechaDesde = new Date(Date.now() - dias * 86_400_000).toISOString();
214
+
215
+ const sql = `
216
+ SELECT
217
+ skill_name,
218
+ COUNT(*) AS llamadas,
219
+ SUM(input_tokens) AS input_tokens,
220
+ SUM(output_tokens) AS output_tokens,
221
+ SUM(cache_read_tokens) AS cache_read,
222
+ SUM(cache_creation_tokens) AS cache_creation,
223
+ MAX(model) AS modelo
224
+ FROM turns
225
+ WHERE skill_name IS NOT NULL
226
+ AND timestamp >= '${fechaDesde}'
227
+ GROUP BY skill_name
228
+ ORDER BY input_tokens + output_tokens DESC
229
+ LIMIT ${topN}
230
+ `;
231
+
232
+ const filas = await consultarSQLite(sql);
233
+
234
+ return filas.map(f => ({
235
+ skill_name: f.skill_name,
236
+ llamadas: f.llamadas,
237
+ input_tokens: f.input_tokens || 0,
238
+ output_tokens: f.output_tokens || 0,
239
+ costo_usd: calcularCosto({
240
+ input: f.input_tokens,
241
+ output: f.output_tokens,
242
+ cache_read: f.cache_read,
243
+ cache_creation: f.cache_creation,
244
+ }, f.modelo),
245
+ }));
246
+ }
247
+
248
+ module.exports = {
249
+ obtenerMetricasPorHerramienta,
250
+ obtenerMetricasPorAgente,
251
+ obtenerMetricasPorSkill,
252
+ obtenerResumenGlobal,
253
+ calcularCosto,
254
+ DB_PATH,
255
+ };
@@ -0,0 +1,286 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ * Interfaz formal TracingProcessor para el sistema de trazabilidad SWL.
5
+ *
6
+ * Portado y adaptado desde:
7
+ * openai-agents-python/src/agents/tracing/processor_interface.py
8
+ * Patrón: Open/Closed — múltiples exportadores sin modificar el núcleo.
9
+ * Zero-deps. Solo módulos nativos de Node.js.
10
+ *
11
+ * Clases exportadas:
12
+ * - TracingProcessor — interfaz abstracta para procesadores de trazas
13
+ * - TracingExporter — interfaz abstracta para exportadores de spans
14
+ * - MultiProcessor — implementación Composite que propaga a N procesadores
15
+ *
16
+ * @module scripts/lib/tracing-processor-interface
17
+ */
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // TracingProcessor — interfaz base
21
+ // ---------------------------------------------------------------------------
22
+
23
+ /**
24
+ * Interfaz abstracta para procesadores de trazas y spans del sistema SWL.
25
+ *
26
+ * Todos los exportadores de trazas (OTLP local, Langfuse, Jaeger, consola)
27
+ * deben extender esta clase e implementar sus seis métodos.
28
+ *
29
+ * Contrato:
30
+ * - Los métodos deben retornar rápido; no bloquear el flujo del agente.
31
+ * - Los errores internos deben capturarse; nunca propagarse al caller.
32
+ * - Todos los métodos son síncronos por defecto; las subclases pueden
33
+ * usar callbacks o colas internas para operaciones asíncronas.
34
+ *
35
+ * @abstract
36
+ */
37
+ class TracingProcessor {
38
+ /**
39
+ * Invocado cuando inicia una nueva traza (flujo de alto nivel).
40
+ *
41
+ * @param {object} traza - Objeto de traza con al menos { traceId, nombre, inicio }.
42
+ * @returns {void}
43
+ * @abstract
44
+ */
45
+ onTraceStart(traza) { // eslint-disable-line no-unused-vars
46
+ throw new Error(
47
+ `${this.constructor.name} debe implementar onTraceStart(traza).`
48
+ );
49
+ }
50
+
51
+ /**
52
+ * Invocado cuando finaliza una traza. Momento idóneo para exportar
53
+ * la traza completa con todos sus spans asociados.
54
+ *
55
+ * @param {object} traza - Objeto de traza completa con spans.
56
+ * @returns {void}
57
+ * @abstract
58
+ */
59
+ onTraceEnd(traza) { // eslint-disable-line no-unused-vars
60
+ throw new Error(
61
+ `${this.constructor.name} debe implementar onTraceEnd(traza).`
62
+ );
63
+ }
64
+
65
+ /**
66
+ * Invocado cuando inicia un span (operación individual dentro de una traza).
67
+ *
68
+ * @param {object} span - Objeto de span con al menos { spanId, traceId, nombre, inicio }.
69
+ * @returns {void}
70
+ * @abstract
71
+ */
72
+ onSpanStart(span) { // eslint-disable-line no-unused-vars
73
+ throw new Error(
74
+ `${this.constructor.name} debe implementar onSpanStart(span).`
75
+ );
76
+ }
77
+
78
+ /**
79
+ * Invocado cuando finaliza un span, con todos sus datos finales disponibles.
80
+ * Es el punto principal de exportación en la mayoría de procesadores.
81
+ *
82
+ * @param {object} span - Objeto de span completo con { spanId, traceId, nombre,
83
+ * inicio, fin, duracionMs, estado, atributos }.
84
+ * @returns {void}
85
+ * @abstract
86
+ */
87
+ onSpanEnd(span) { // eslint-disable-line no-unused-vars
88
+ throw new Error(
89
+ `${this.constructor.name} debe implementar onSpanEnd(span).`
90
+ );
91
+ }
92
+
93
+ /**
94
+ * Cierra el procesador de forma limpia. Debe vaciar buffers pendientes,
95
+ * cerrar archivos abiertos y liberar recursos antes de retornar.
96
+ *
97
+ * @returns {void}
98
+ * @abstract
99
+ */
100
+ shutdown() {
101
+ throw new Error(
102
+ `${this.constructor.name} debe implementar shutdown().`
103
+ );
104
+ }
105
+
106
+ /**
107
+ * Fuerza el volcado inmediato de cualquier buffer o cola interna.
108
+ * Útil antes de un shutdown o cuando se necesita garantía de persistencia.
109
+ *
110
+ * @returns {void}
111
+ * @abstract
112
+ */
113
+ forceFlush() {
114
+ throw new Error(
115
+ `${this.constructor.name} debe implementar forceFlush().`
116
+ );
117
+ }
118
+
119
+ // ---------------------------------------------------------------------------
120
+ // Utilidades estáticas
121
+ // ---------------------------------------------------------------------------
122
+
123
+ /**
124
+ * Verifica que una instancia implementa todos los métodos requeridos
125
+ * de la interfaz TracingProcessor.
126
+ *
127
+ * @param {any} instancia - Objeto a verificar.
128
+ * @returns {boolean} true si todos los métodos están implementados.
129
+ *
130
+ * @example
131
+ * TracingProcessor.esProcesadorValido(new MiProcesador()) // → true
132
+ * TracingProcessor.esProcesadorValido({}) // → false
133
+ */
134
+ static esProcesadorValido(instancia) {
135
+ if (!instancia || typeof instancia !== 'object') return false;
136
+ const metodosRequeridos = [
137
+ 'onTraceStart', 'onTraceEnd',
138
+ 'onSpanStart', 'onSpanEnd',
139
+ 'shutdown', 'forceFlush',
140
+ ];
141
+ return metodosRequeridos.every(
142
+ metodo => typeof instancia[metodo] === 'function'
143
+ );
144
+ }
145
+ }
146
+
147
+ // ---------------------------------------------------------------------------
148
+ // TracingExporter — interfaz para exportadores de ítems
149
+ // ---------------------------------------------------------------------------
150
+
151
+ /**
152
+ * Interfaz abstracta para exportadores de spans y trazas.
153
+ *
154
+ * Un exportador recibe un array de ítems (spans o trazas) ya finalizados
155
+ * y los envía a un destino: archivo, endpoint HTTP, consola, etc.
156
+ *
157
+ * A diferencia de TracingProcessor (que reacciona a eventos del ciclo de vida),
158
+ * TracingExporter opera en modo batch sobre ítems ya completos.
159
+ *
160
+ * @abstract
161
+ */
162
+ class TracingExporter {
163
+ /**
164
+ * Exporta un array de spans o trazas a un destino externo.
165
+ *
166
+ * El método debe ser tolerante a fallos: si un ítem falla, el resto
167
+ * deben exportarse igualmente. Los errores no recuperables deben
168
+ * registrarse internamente, nunca propagarse al caller.
169
+ *
170
+ * @param {object[]} items - Array de spans o trazas a exportar.
171
+ * @returns {void}
172
+ * @abstract
173
+ */
174
+ export(items) { // eslint-disable-line no-unused-vars
175
+ throw new Error(
176
+ `${this.constructor.name} debe implementar export(items).`
177
+ );
178
+ }
179
+ }
180
+
181
+ // ---------------------------------------------------------------------------
182
+ // MultiProcessor — patrón Composite
183
+ // ---------------------------------------------------------------------------
184
+
185
+ /**
186
+ * Procesador compuesto que propaga todos los eventos de ciclo de vida
187
+ * a una lista de procesadores hijos (patrón Composite).
188
+ *
189
+ * Características:
190
+ * - Aislamiento de errores: si un hijo lanza, los demás reciben el evento.
191
+ * - Composición dinámica: se pueden agregar/quitar procesadores en tiempo
192
+ * de ejecución con addProcessor / removeProcessor.
193
+ * - Compatible con TracingProcessor.esProcesadorValido().
194
+ *
195
+ * @extends TracingProcessor
196
+ *
197
+ * @example
198
+ * const multi = new MultiProcessor([
199
+ * new OtlpLocalProcessor(cwd),
200
+ * new ConsoleSpanExporter(),
201
+ * ]);
202
+ * multi.onSpanEnd(span); // propaga a ambos
203
+ */
204
+ class MultiProcessor extends TracingProcessor {
205
+ /**
206
+ * @param {TracingProcessor[]} [procesadores] - Lista inicial de procesadores hijos.
207
+ */
208
+ constructor(procesadores = []) {
209
+ super();
210
+ /** @type {TracingProcessor[]} */
211
+ this._procesadores = [...procesadores];
212
+ }
213
+
214
+ /**
215
+ * Agrega un procesador hijo a la lista.
216
+ *
217
+ * @param {TracingProcessor} procesador - Instancia que implementa TracingProcessor.
218
+ * @throws {TypeError} Si el argumento no implementa la interfaz completa.
219
+ */
220
+ addProcessor(procesador) {
221
+ if (!TracingProcessor.esProcesadorValido(procesador)) {
222
+ throw new TypeError(
223
+ 'addProcessor: el argumento debe implementar la interfaz TracingProcessor completa.'
224
+ );
225
+ }
226
+ this._procesadores.push(procesador);
227
+ }
228
+
229
+ /**
230
+ * Elimina un procesador hijo de la lista (por referencia de objeto).
231
+ *
232
+ * @param {TracingProcessor} procesador - Instancia a eliminar.
233
+ */
234
+ removeProcessor(procesador) {
235
+ this._procesadores = this._procesadores.filter(p => p !== procesador);
236
+ }
237
+
238
+ /**
239
+ * Propaga un evento a todos los hijos con aislamiento de errores.
240
+ *
241
+ * @private
242
+ * @param {string} metodo - Nombre del método a invocar.
243
+ * @param {any} arg - Argumento a pasar al método.
244
+ */
245
+ _propagar(metodo, arg) {
246
+ for (const p of this._procesadores) {
247
+ try {
248
+ p[metodo](arg);
249
+ } catch (_) {
250
+ // Aislamiento: si un hijo falla, los demás deben seguir recibiendo
251
+ }
252
+ }
253
+ }
254
+
255
+ /** @override */
256
+ onTraceStart(traza) { this._propagar('onTraceStart', traza); }
257
+
258
+ /** @override */
259
+ onTraceEnd(traza) { this._propagar('onTraceEnd', traza); }
260
+
261
+ /** @override */
262
+ onSpanStart(span) { this._propagar('onSpanStart', span); }
263
+
264
+ /** @override */
265
+ onSpanEnd(span) { this._propagar('onSpanEnd', span); }
266
+
267
+ /** @override */
268
+ shutdown() {
269
+ for (const p of this._procesadores) {
270
+ try { p.shutdown(); } catch (_) {}
271
+ }
272
+ }
273
+
274
+ /** @override */
275
+ forceFlush() {
276
+ for (const p of this._procesadores) {
277
+ try { p.forceFlush(); } catch (_) {}
278
+ }
279
+ }
280
+ }
281
+
282
+ // ---------------------------------------------------------------------------
283
+ // Exports
284
+ // ---------------------------------------------------------------------------
285
+
286
+ module.exports = { TracingProcessor, TracingExporter, MultiProcessor };