xonecode 0.5.1 → 0.8.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 (315) hide show
  1. package/apps/web/dist/assets/{index-BB3SamhR.css → index-Boak51UP.css} +1 -1
  2. package/apps/web/dist/assets/index-Cg28x6nG.js +477 -0
  3. package/apps/web/dist/assets/{php-D_2--9WK.js → php-Cu6F_QCJ.js} +1 -1
  4. package/apps/web/dist/assets/{ruby-DSHSDbk1.js → ruby-BiqQPoC6.js} +1 -1
  5. package/apps/web/dist/index.html +2 -2
  6. package/dist/agent/{cloudstudioClient.js → cloudstudio/cloudstudioClient.js} +10 -0
  7. package/dist/agent/cloudstudio/cloudstudioClient.js.map +1 -0
  8. package/dist/agent/{cloudstudioMcp.js → cloudstudio/cloudstudioMcp.js} +5 -5
  9. package/dist/agent/cloudstudio/cloudstudioMcp.js.map +1 -0
  10. package/dist/agent/{descarga.js → cloudstudio/descarga.js} +17 -7
  11. package/dist/agent/cloudstudio/descarga.js.map +1 -0
  12. package/dist/agent/cloudstudio/manifiesto.js.map +1 -0
  13. package/dist/agent/cloudstudio/ramaActiva.js +11 -0
  14. package/dist/agent/cloudstudio/ramaActiva.js.map +1 -0
  15. package/dist/agent/{subida.js → cloudstudio/subida.js} +16 -7
  16. package/dist/agent/cloudstudio/subida.js.map +1 -0
  17. package/dist/agent/{zip.js → cloudstudio/zip.js} +1 -1
  18. package/dist/agent/cloudstudio/zip.js.map +1 -0
  19. package/dist/agent/{authEnDisco.js → config/authEnDisco.js} +3 -3
  20. package/dist/agent/config/authEnDisco.js.map +1 -0
  21. package/dist/agent/{catalogoModelos.js → config/catalogoModelos.js} +47 -1
  22. package/dist/agent/config/catalogoModelos.js.map +1 -0
  23. package/dist/agent/{configEnDisco.js → config/configEnDisco.js} +6 -6
  24. package/dist/agent/config/configEnDisco.js.map +1 -0
  25. package/dist/agent/{crearProyecto.js → config/crearProyecto.js} +2 -2
  26. package/dist/agent/config/crearProyecto.js.map +1 -0
  27. package/dist/agent/config/entorno.js.map +1 -0
  28. package/dist/agent/config/gemini.js.map +1 -0
  29. package/dist/agent/config/modelos.js +235 -0
  30. package/dist/agent/config/modelos.js.map +1 -0
  31. package/dist/agent/{modelosDeMotor.js → config/modelosDeMotor.js} +1 -1
  32. package/dist/agent/config/modelosDeMotor.js.map +1 -0
  33. package/dist/agent/config/mudanzaEnDisco.js +121 -0
  34. package/dist/agent/config/mudanzaEnDisco.js.map +1 -0
  35. package/dist/agent/{persona.js → config/persona.js} +1 -1
  36. package/dist/agent/config/persona.js.map +1 -0
  37. package/dist/agent/config/selectorEnMaquina.js +45 -0
  38. package/dist/agent/config/selectorEnMaquina.js.map +1 -0
  39. package/dist/agent/{settingsEnDisco.js → config/settingsEnDisco.js} +37 -2
  40. package/dist/agent/config/settingsEnDisco.js.map +1 -0
  41. package/dist/agent/{versionEnDisco.js → config/versionEnDisco.js} +8 -4
  42. package/dist/agent/config/versionEnDisco.js.map +1 -0
  43. package/dist/agent/dispositivos/arranqueDeEmulador.js +146 -0
  44. package/dist/agent/dispositivos/arranqueDeEmulador.js.map +1 -0
  45. package/dist/agent/{dispositivosEnMaquina.js → dispositivos/dispositivosEnMaquina.js} +93 -6
  46. package/dist/agent/dispositivos/dispositivosEnMaquina.js.map +1 -0
  47. package/dist/agent/dispositivos/hotswap.js.map +1 -0
  48. package/dist/agent/dispositivos/instalacionEnMaquina.js.map +1 -0
  49. package/dist/agent/dispositivos/juezVisual.js +152 -0
  50. package/dist/agent/dispositivos/juezVisual.js.map +1 -0
  51. package/dist/agent/{lanzamientoEnMaquina.js → dispositivos/lanzamientoEnMaquina.js} +1 -1
  52. package/dist/agent/dispositivos/lanzamientoEnMaquina.js.map +1 -0
  53. package/dist/agent/{paqueteDelProyecto.js → dispositivos/paqueteDelProyecto.js} +5 -5
  54. package/dist/agent/dispositivos/paqueteDelProyecto.js.map +1 -0
  55. package/dist/agent/dispositivos/procesosEnMaquina.js.map +1 -0
  56. package/dist/agent/dispositivos/sensorDeArranque.js +154 -0
  57. package/dist/agent/dispositivos/sensorDeArranque.js.map +1 -0
  58. package/dist/agent/exportarPdf.js +140 -0
  59. package/dist/agent/exportarPdf.js.map +1 -0
  60. package/dist/agent/{arbolDeProyecto.js → grafo/arbolDeProyecto.js} +2 -2
  61. package/dist/agent/grafo/arbolDeProyecto.js.map +1 -0
  62. package/dist/agent/{artefactosEnDisco.js → grafo/artefactosEnDisco.js} +2 -2
  63. package/dist/agent/grafo/artefactosEnDisco.js.map +1 -0
  64. package/dist/agent/{busquedaRegex.js → grafo/busquedaRegex.js} +41 -1
  65. package/dist/agent/grafo/busquedaRegex.js.map +1 -0
  66. package/dist/agent/grafo/criticaVisual.js +115 -0
  67. package/dist/agent/grafo/criticaVisual.js.map +1 -0
  68. package/dist/agent/grafo/excluirTools.js +82 -0
  69. package/dist/agent/grafo/excluirTools.js.map +1 -0
  70. package/dist/agent/{memoriaDeProyecto.js → grafo/memoriaDeProyecto.js} +1 -1
  71. package/dist/agent/grafo/memoriaDeProyecto.js.map +1 -0
  72. package/dist/agent/grafo/navegacionXone.js +231 -0
  73. package/dist/agent/grafo/navegacionXone.js.map +1 -0
  74. package/dist/agent/{perfiles.js → grafo/perfiles.js} +96 -10
  75. package/dist/agent/grafo/perfiles.js.map +1 -0
  76. package/dist/agent/{proyecto.js → grafo/proyecto.js} +274 -24
  77. package/dist/agent/grafo/proyecto.js.map +1 -0
  78. package/dist/agent/grafo/skills.js +425 -0
  79. package/dist/agent/grafo/skills.js.map +1 -0
  80. package/dist/agent/grafo/xoneAgent.js +566 -0
  81. package/dist/agent/grafo/xoneAgent.js.map +1 -0
  82. package/dist/agent/navegacion/estilosEnDisco.js +110 -0
  83. package/dist/agent/navegacion/estilosEnDisco.js.map +1 -0
  84. package/dist/agent/navegacion/hechosEnDisco.js +26 -0
  85. package/dist/agent/navegacion/hechosEnDisco.js.map +1 -0
  86. package/dist/agent/navegacion/indiceEnDisco.js +36 -0
  87. package/dist/agent/navegacion/indiceEnDisco.js.map +1 -0
  88. package/dist/agent/navegacion/modeloDeProyecto.js +228 -0
  89. package/dist/agent/navegacion/modeloDeProyecto.js.map +1 -0
  90. package/dist/agent/raizDelPaquete.js +56 -0
  91. package/dist/agent/raizDelPaquete.js.map +1 -0
  92. package/dist/agent/{checkpointer.js → sesiones/checkpointer.js} +1 -1
  93. package/dist/agent/sesiones/checkpointer.js.map +1 -0
  94. package/dist/agent/sesiones/git.js.map +1 -0
  95. package/dist/agent/{gitSync.js → sesiones/gitSync.js} +3 -3
  96. package/dist/agent/sesiones/gitSync.js.map +1 -0
  97. package/dist/agent/{sesionGit.js → sesiones/sesionGit.js} +2 -2
  98. package/dist/agent/sesiones/sesionGit.js.map +1 -0
  99. package/dist/agent/subagentes/agentesEnDisco.js +818 -0
  100. package/dist/agent/subagentes/agentesEnDisco.js.map +1 -0
  101. package/dist/agent/subagentes/consumoExterno.js.map +1 -0
  102. package/dist/agent/subagentes/escrituraDeCodex.js.map +1 -0
  103. package/dist/agent/{escrituraDeOpencode.js → subagentes/escrituraDeOpencode.js} +1 -1
  104. package/dist/agent/subagentes/escrituraDeOpencode.js.map +1 -0
  105. package/dist/agent/{escrituraExterna.js → subagentes/escrituraExterna.js} +59 -6
  106. package/dist/agent/subagentes/escrituraExterna.js.map +1 -0
  107. package/dist/agent/subagentes/pluginDeSkills.js +99 -0
  108. package/dist/agent/subagentes/pluginDeSkills.js.map +1 -0
  109. package/dist/agent/subagentes/subagenteCodex.js.map +1 -0
  110. package/dist/agent/{subagenteExterno.js → subagentes/subagenteExterno.js} +48 -0
  111. package/dist/agent/subagentes/subagenteExterno.js.map +1 -0
  112. package/dist/agent/{subagenteOpencode.js → subagentes/subagenteOpencode.js} +53 -1
  113. package/dist/agent/subagentes/subagenteOpencode.js.map +1 -0
  114. package/dist/agent/{aumentador.js → tareas/aumentador.js} +2 -2
  115. package/dist/agent/tareas/aumentador.js.map +1 -0
  116. package/dist/agent/{juezDeTarea.js → tareas/juezDeTarea.js} +6 -6
  117. package/dist/agent/tareas/juezDeTarea.js.map +1 -0
  118. package/dist/agent/{tareasEnDisco.js → tareas/tareasEnDisco.js} +53 -4
  119. package/dist/agent/tareas/tareasEnDisco.js.map +1 -0
  120. package/dist/agent/{diagnosticoDeTools.js → turno/diagnosticoDeTools.js} +5 -1
  121. package/dist/agent/turno/diagnosticoDeTools.js.map +1 -0
  122. package/dist/agent/{guionizado.js → turno/guionizado.js} +1 -1
  123. package/dist/agent/turno/guionizado.js.map +1 -0
  124. package/dist/agent/turno/informeDeTraza.js +245 -0
  125. package/dist/agent/turno/informeDeTraza.js.map +1 -0
  126. package/dist/agent/turno/inspectorDePrompt.js +205 -0
  127. package/dist/agent/turno/inspectorDePrompt.js.map +1 -0
  128. package/dist/agent/{instantanea.js → turno/instantanea.js} +7 -2
  129. package/dist/agent/turno/instantanea.js.map +1 -0
  130. package/dist/agent/{interrupts.js → turno/interrupts.js} +2 -2
  131. package/dist/agent/turno/interrupts.js.map +1 -0
  132. package/dist/agent/turno/mensajes.js.map +1 -0
  133. package/dist/agent/turno/normalizar.js.map +1 -0
  134. package/dist/agent/{puente.js → turno/puente.js} +71 -4
  135. package/dist/agent/turno/puente.js.map +1 -0
  136. package/dist/agent/turno/resumenDeContexto.js +260 -0
  137. package/dist/agent/turno/resumenDeContexto.js.map +1 -0
  138. package/dist/agent/{resumenDeTool.js → turno/resumenDeTool.js} +33 -0
  139. package/dist/agent/turno/resumenDeTool.js.map +1 -0
  140. package/dist/agent/turno/rubrica.js +91 -0
  141. package/dist/agent/turno/rubrica.js.map +1 -0
  142. package/dist/agent/turno/textoDeTool.js.map +1 -0
  143. package/dist/agent/{turnoReal.js → turno/turnoReal.js} +210 -25
  144. package/dist/agent/turno/turnoReal.js.map +1 -0
  145. package/dist/agent/turno/verificador.js.map +1 -0
  146. package/dist/cli/config.js +1 -1
  147. package/dist/cli/config.js.map +1 -1
  148. package/dist/cli/consola.js +72 -9
  149. package/dist/cli/consola.js.map +1 -1
  150. package/dist/cli/describe.js +2 -2
  151. package/dist/cli/describe.js.map +1 -1
  152. package/dist/cli/doctor.js +1 -1
  153. package/dist/cli/doctor.js.map +1 -1
  154. package/dist/cli/fuentesDeDisco.js +29 -0
  155. package/dist/cli/fuentesDeDisco.js.map +1 -0
  156. package/dist/cli/main.js +87 -31
  157. package/dist/cli/main.js.map +1 -1
  158. package/dist/cli/run.js +40 -10
  159. package/dist/cli/run.js.map +1 -1
  160. package/dist/cli/traza.js +48 -0
  161. package/dist/cli/traza.js.map +1 -0
  162. package/dist/cli/tui/correrTui.js +4 -4
  163. package/dist/cli/tui/correrTui.js.map +1 -1
  164. package/dist/cli/verify.js +1 -1
  165. package/dist/cli/verify.js.map +1 -1
  166. package/dist/core/actos.js +1 -1
  167. package/dist/core/adjuntos.js +2 -2
  168. package/dist/core/agentes.js +247 -7
  169. package/dist/core/agentes.js.map +1 -1
  170. package/dist/core/artefactos.js +4 -4
  171. package/dist/core/config.js +1 -1
  172. package/dist/core/contextos.js +12 -1
  173. package/dist/core/contextos.js.map +1 -1
  174. package/dist/core/descargas.js +1 -1
  175. package/dist/core/dispositivos.js +53 -3
  176. package/dist/core/dispositivos.js.map +1 -1
  177. package/dist/core/esfuerzo.js +141 -0
  178. package/dist/core/esfuerzo.js.map +1 -0
  179. package/dist/core/esqueleto.js +1 -1
  180. package/dist/core/estilos.js +78 -0
  181. package/dist/core/estilos.js.map +1 -0
  182. package/dist/core/exportacion.js +140 -0
  183. package/dist/core/exportacion.js.map +1 -0
  184. package/dist/core/hechosDelProyecto.js +87 -0
  185. package/dist/core/hechosDelProyecto.js.map +1 -0
  186. package/dist/core/logDeDispositivo.js +143 -0
  187. package/dist/core/logDeDispositivo.js.map +1 -0
  188. package/dist/core/modelos.js +48 -3
  189. package/dist/core/modelos.js.map +1 -1
  190. package/dist/core/mudanzaDeWorkspace.js +93 -0
  191. package/dist/core/mudanzaDeWorkspace.js.map +1 -0
  192. package/dist/core/navegacion.js +134 -0
  193. package/dist/core/navegacion.js.map +1 -0
  194. package/dist/core/notify.js +5 -0
  195. package/dist/core/notify.js.map +1 -1
  196. package/dist/core/planDeSubida.js +1 -1
  197. package/dist/core/planes.js +70 -0
  198. package/dist/core/planes.js.map +1 -0
  199. package/dist/core/ports.js +4 -0
  200. package/dist/core/ports.js.map +1 -1
  201. package/dist/core/rubrica.js +90 -0
  202. package/dist/core/rubrica.js.map +1 -0
  203. package/dist/core/selectorDeCarpeta.js +87 -0
  204. package/dist/core/selectorDeCarpeta.js.map +1 -0
  205. package/dist/core/settings.js +56 -7
  206. package/dist/core/settings.js.map +1 -1
  207. package/dist/core/shellDeAgente.js +144 -0
  208. package/dist/core/shellDeAgente.js.map +1 -0
  209. package/dist/core/skills.js +158 -0
  210. package/dist/core/skills.js.map +1 -0
  211. package/dist/core/topeAgotado.js +69 -0
  212. package/dist/core/topeAgotado.js.map +1 -0
  213. package/dist/core/zipDeSkill.js +107 -0
  214. package/dist/core/zipDeSkill.js.map +1 -0
  215. package/dist/web/servidor/arranque.js +853 -54
  216. package/dist/web/servidor/arranque.js.map +1 -1
  217. package/dist/web/servidor/corredorDeTareas.js +3 -3
  218. package/dist/web/servidor/corredorDeTareas.js.map +1 -1
  219. package/dist/web/servidor/sesiones.js +34 -6
  220. package/dist/web/servidor/sesiones.js.map +1 -1
  221. package/dist/web/servidor/transporte.js +1 -1
  222. package/dist/web/servidor/transporte.js.map +1 -1
  223. package/dist/web/servidor/vestibulo.js +62 -13
  224. package/dist/web/servidor/vestibulo.js.map +1 -1
  225. package/package.json +7 -4
  226. package/skills/archify/SKILL.md +25 -2
  227. package/skills/artifacts-builder/SKILL.md +23 -0
  228. package/skills/xone-hotswap/SKILL.md +96 -0
  229. package/skills/xone-hotswap/scripts/xone-arrancar-android +202 -0
  230. package/skills/xone-hotswap/scripts/xone-arrancar-ios +85 -0
  231. package/skills/xone-hotswap/scripts/xone-captura-android +93 -0
  232. package/skills/xone-hotswap/scripts/xone-desplegar-android +439 -0
  233. package/skills/xone-hotswap/scripts/xone-hotswap +201 -0
  234. package/skills/xone-hotswap/scripts/xone-log-android +102 -0
  235. package/skills/xone-hotswap/scripts/xone-reiniciar-android +132 -0
  236. package/skills/xone-plan-builder/SKILL.md +22 -4
  237. package/skills/xone-spec-builder/SKILL.md +37 -7
  238. package/apps/web/dist/assets/index-CFYAoHdw.js +0 -477
  239. package/dist/agent/agentesEnDisco.js +0 -539
  240. package/dist/agent/agentesEnDisco.js.map +0 -1
  241. package/dist/agent/arbolDeProyecto.js.map +0 -1
  242. package/dist/agent/artefactosEnDisco.js.map +0 -1
  243. package/dist/agent/aumentador.js.map +0 -1
  244. package/dist/agent/authEnDisco.js.map +0 -1
  245. package/dist/agent/busquedaRegex.js.map +0 -1
  246. package/dist/agent/catalogoModelos.js.map +0 -1
  247. package/dist/agent/checkpointer.js.map +0 -1
  248. package/dist/agent/cloudstudioClient.js.map +0 -1
  249. package/dist/agent/cloudstudioMcp.js.map +0 -1
  250. package/dist/agent/configEnDisco.js.map +0 -1
  251. package/dist/agent/consumoExterno.js.map +0 -1
  252. package/dist/agent/crearProyecto.js.map +0 -1
  253. package/dist/agent/descarga.js.map +0 -1
  254. package/dist/agent/diagnosticoDeTools.js.map +0 -1
  255. package/dist/agent/dispositivosEnMaquina.js.map +0 -1
  256. package/dist/agent/entorno.js.map +0 -1
  257. package/dist/agent/escrituraDeCodex.js.map +0 -1
  258. package/dist/agent/escrituraDeOpencode.js.map +0 -1
  259. package/dist/agent/escrituraExterna.js.map +0 -1
  260. package/dist/agent/gemini.js.map +0 -1
  261. package/dist/agent/git.js.map +0 -1
  262. package/dist/agent/gitSync.js.map +0 -1
  263. package/dist/agent/guionizado.js.map +0 -1
  264. package/dist/agent/hotswap.js.map +0 -1
  265. package/dist/agent/instalacionEnMaquina.js.map +0 -1
  266. package/dist/agent/instantanea.js.map +0 -1
  267. package/dist/agent/interrupts.js.map +0 -1
  268. package/dist/agent/juezDeTarea.js.map +0 -1
  269. package/dist/agent/lanzamientoEnMaquina.js.map +0 -1
  270. package/dist/agent/manifiesto.js.map +0 -1
  271. package/dist/agent/memoriaDeProyecto.js.map +0 -1
  272. package/dist/agent/mensajes.js.map +0 -1
  273. package/dist/agent/modelos.js +0 -130
  274. package/dist/agent/modelos.js.map +0 -1
  275. package/dist/agent/modelosDeMotor.js.map +0 -1
  276. package/dist/agent/normalizar.js.map +0 -1
  277. package/dist/agent/paqueteDelProyecto.js.map +0 -1
  278. package/dist/agent/perfiles.js.map +0 -1
  279. package/dist/agent/persona.js.map +0 -1
  280. package/dist/agent/procesosEnMaquina.js.map +0 -1
  281. package/dist/agent/proyecto.js.map +0 -1
  282. package/dist/agent/puente.js.map +0 -1
  283. package/dist/agent/resumenDeContexto.js +0 -30
  284. package/dist/agent/resumenDeContexto.js.map +0 -1
  285. package/dist/agent/resumenDeTool.js.map +0 -1
  286. package/dist/agent/sesionGit.js.map +0 -1
  287. package/dist/agent/settingsEnDisco.js.map +0 -1
  288. package/dist/agent/skills.js +0 -65
  289. package/dist/agent/skills.js.map +0 -1
  290. package/dist/agent/subagenteCodex.js.map +0 -1
  291. package/dist/agent/subagenteExterno.js.map +0 -1
  292. package/dist/agent/subagenteOpencode.js.map +0 -1
  293. package/dist/agent/subida.js.map +0 -1
  294. package/dist/agent/tareasEnDisco.js.map +0 -1
  295. package/dist/agent/textoDeTool.js.map +0 -1
  296. package/dist/agent/turnoReal.js.map +0 -1
  297. package/dist/agent/verificador.js.map +0 -1
  298. package/dist/agent/versionEnDisco.js.map +0 -1
  299. package/dist/agent/xoneAgent.js +0 -347
  300. package/dist/agent/xoneAgent.js.map +0 -1
  301. package/dist/agent/zip.js.map +0 -1
  302. /package/dist/agent/{manifiesto.js → cloudstudio/manifiesto.js} +0 -0
  303. /package/dist/agent/{entorno.js → config/entorno.js} +0 -0
  304. /package/dist/agent/{gemini.js → config/gemini.js} +0 -0
  305. /package/dist/agent/{hotswap.js → dispositivos/hotswap.js} +0 -0
  306. /package/dist/agent/{instalacionEnMaquina.js → dispositivos/instalacionEnMaquina.js} +0 -0
  307. /package/dist/agent/{procesosEnMaquina.js → dispositivos/procesosEnMaquina.js} +0 -0
  308. /package/dist/agent/{git.js → sesiones/git.js} +0 -0
  309. /package/dist/agent/{consumoExterno.js → subagentes/consumoExterno.js} +0 -0
  310. /package/dist/agent/{escrituraDeCodex.js → subagentes/escrituraDeCodex.js} +0 -0
  311. /package/dist/agent/{subagenteCodex.js → subagentes/subagenteCodex.js} +0 -0
  312. /package/dist/agent/{mensajes.js → turno/mensajes.js} +0 -0
  313. /package/dist/agent/{normalizar.js → turno/normalizar.js} +0 -0
  314. /package/dist/agent/{textoDeTool.js → turno/textoDeTool.js} +0 -0
  315. /package/dist/agent/{verificador.js → turno/verificador.js} +0 -0
@@ -1,4 +1,4 @@
1
- import { textoDe } from "./puente.js";
1
+ import { textoDe } from "../turno/puente.js";
2
2
  /** El papel del juez, y solo del juez. Ver `core/modelos.ts`. */
3
3
  export const PAPEL_DEL_JUEZ = "afilado";
4
4
  /**
@@ -16,7 +16,7 @@ const TOPE_DE_HALLAZGO = 200;
16
16
  * No se pudo PREGUNTAR: no hay modelo, no hay clave, no hay red.
17
17
  *
18
18
  * Es fallo del entorno y no del proyecto, la misma familia que `ErrorDelSimulador`
19
- * (`agent/verificador.ts`), y por eso es un tipo propio: quien lo recoge tiene que poder
19
+ * (`agent/turno/verificador.ts`), y por eso es un tipo propio: quien lo recoge tiene que poder
20
20
  * distinguirlo de un veredicto para aparcar la tarea con el motivo correcto.
21
21
  */
22
22
  export class ErrorDelJuezDeTarea extends Error {
@@ -30,7 +30,7 @@ export class ErrorDelJuezDeTarea extends Error {
30
30
  *
31
31
  * **Dos sitios de envoltura, y la diferencia entre ellos está medida.** Construir el modelo
32
32
  * del papel falla ANTES de tocar la red y con un mensaje escrito para leerse: medido contra
33
- * `agent/modelos.ts`, un `afilado` apuntado a un proveedor sin clave lanza «falta la
33
+ * `agent/config/modelos.ts`, un `afilado` apuntado a un proveedor sin clave lanza «falta la
34
34
  * credencial para nvidia (NVIDIA_API_KEY); usa /provider nvidia» —el nuestro— o «Anthropic
35
35
  * API key not found» —el del SDK—, y ninguno de los dos lleva nada que no se pueda leer. Ese
36
36
  * mensaje SÍ se conserva: es la única línea que dice qué hacer.
@@ -74,7 +74,7 @@ export function invocarConModelos(modelos) {
74
74
  * **La severidad se dice en castellano y por su nombre**, y no era cosmético: `h.severidad`
75
75
  * se pintaba en crudo, así que un aviso llegaba como «warning» —el enum, en inglés, al lado
76
76
  * de un «ERROR» que sí estaba traducido y en mayúsculas—. La huella de reparación del
77
- * verificador (`agent/turnoReal.ts`) usa solo los ERRORES porque «un aviso que va y viene no
77
+ * verificador (`agent/turno/turnoReal.ts`) usa solo los ERRORES porque «un aviso que va y viene no
78
78
  * dice nada de si el error se arregla», y la puerta de entrega (`core/entrega.ts`) cuenta
79
79
  * solo errores: si esa distinción manda en el código, no puede llegarle borrosa al juez.
80
80
  *
@@ -93,7 +93,7 @@ const lineaDeHallazgo = (h) => `- ${h.severidad === "error" ? "ERROR" : h.severi
93
93
  * hallazgo del rojo falso: «se modificaron ficheros de lógica JavaScript durante el turno
94
94
  * según los hallazgos del verificador». Un hallazgo no dice quién escribió nada — dice que
95
95
  * el proyecto tiene una inconsistencia, y el simulador mira el proyecto ENTERO porque es su
96
- * API. Es la misma regla que gobierna el reparto en `agent/turnoReal.ts#conVerificacion`:
96
+ * API. Es la misma regla que gobierna el reparto en `agent/turno/turnoReal.ts#conVerificacion`:
97
97
  * «un error que ya estaba en un fichero que el agente no abrió no es del agente:
98
98
  * atribuírselo sería falso». Aquí se la dice también al juez.
99
99
  */
@@ -279,7 +279,7 @@ const unaFrase = (texto, tope) => texto
279
279
  * se busca el primer `{` y el último `}`. Lo que no parsee no es un error: es un veredicto
280
280
  * `indeterminado`, que no es verde.
281
281
  */
282
- function objetoDe(texto) {
282
+ export function objetoDe(texto) {
283
283
  const desde = texto.indexOf("{");
284
284
  const hasta = texto.lastIndexOf("}");
285
285
  if (desde === -1 || hasta <= desde)
@@ -0,0 +1 @@
1
+ {"version":3,"file":"juezDeTarea.js","sourceRoot":"","sources":["../../../src/agent/tareas/juezDeTarea.ts"],"names":[],"mappings":"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"}
@@ -14,11 +14,60 @@
14
14
  import { chmodSync, existsSync, linkSync, lstatSync, mkdirSync, readFileSync, realpathSync, renameSync, rmSync, statSync, writeFileSync, readdirSync } from "node:fs";
15
15
  import { homedir } from "node:os";
16
16
  import { join } from "node:path";
17
- import { conFeedback } from "../core/tareas.js";
18
- import { mimeDeAdjunto, nombreDeAdjuntoAceptable } from "../core/adjuntos.js";
17
+ import { conFeedback } from "../../core/tareas.js";
18
+ import { mimeDeAdjunto, nombreDeAdjuntoAceptable } from "../../core/adjuntos.js";
19
19
  /** Bytes que se aceptan por adjunto y por tarea. */
20
20
  export const TOPE_DE_ADJUNTO = 20_000_000;
21
21
  export const TOPE_DE_ADJUNTOS_POR_TAREA = 50_000_000;
22
+ /**
23
+ * Reescribe las raíces ABSOLUTAS del índice cuando una copia local se ha mudado de sitio.
24
+ *
25
+ * Vive aquí y no en quien muda porque el dueño del formato de `indice.json` es este fichero:
26
+ * un segundo sitio que sepa escribirlo divergiría del primero en cuanto uno de los dos se
27
+ * corrigiera. Quien llama solo aporta la TRADUCCIÓN (ausente = «esta raíz no la mudé yo»).
28
+ *
29
+ * **Se trabaja sobre el JSON crudo**, no sobre `Tarea`: la misma disciplina de
30
+ * `settingsEnDisco.ts`: pasar por un tipo descartaría en silencio del fichero del usuario
31
+ * cualquier campo que este proceso no conozca. Y si no hay índice, o no se puede leer, no se
32
+ * escribe nada: una cola que no está no es una cola rota.
33
+ *
34
+ * Devuelve cuántas entradas cambiaron. Cero no escribe el fichero: reescribirlo sin que haya
35
+ * cambiado nada movería su mtime sin motivo.
36
+ */
37
+ export function remapearRaicesDeTareas(base, traducir) {
38
+ const indice = join(base ?? join(homedir(), ".xonecode"), "tareas", "indice.json");
39
+ if (!existsSync(indice))
40
+ return 0;
41
+ let bruto;
42
+ try {
43
+ bruto = JSON.parse(readFileSync(indice, "utf8"));
44
+ }
45
+ catch {
46
+ return 0;
47
+ }
48
+ if (!Array.isArray(bruto))
49
+ return 0;
50
+ let cambiadas = 0;
51
+ const salida = bruto.map((entrada) => {
52
+ if (typeof entrada !== "object" || entrada === null)
53
+ return entrada;
54
+ const proyecto = entrada.proyecto;
55
+ if (typeof proyecto !== "object" || proyecto === null)
56
+ return entrada;
57
+ const raiz = proyecto.raiz;
58
+ if (typeof raiz !== "string")
59
+ return entrada;
60
+ const nueva = traducir(raiz);
61
+ if (nueva === undefined)
62
+ return entrada;
63
+ cambiadas += 1;
64
+ return { ...entrada, proyecto: { ...proyecto, raiz: nueva } };
65
+ });
66
+ if (cambiadas === 0)
67
+ return 0;
68
+ writeFileSync(indice, `${JSON.stringify(salida, null, 1)}\n`, { encoding: "utf8", mode: 0o600 });
69
+ return cambiadas;
70
+ }
22
71
  /** Un nombre de adjunto: un segmento llano y nada más. La lista BLANCA de forma vive en
23
72
  * `core/adjuntos.ts` —la comparten esto, la ruta de subida y el listado—, y de ella depende
24
73
  * que esto no escriba fuera. */
@@ -39,7 +88,7 @@ export function crearTareasEnDisco(opciones) {
39
88
  * La carpeta de adjuntos de una tarea, **si su camino REAL sigue dentro de la cola**.
40
89
  *
41
90
  * La barrera se aplica DOS veces, igual que la del lector de ficheros del proyecto
42
- * (`agent/arbolDeProyecto.ts`): sobre el TEXTO del id —de balde, antes de tocar el
91
+ * (`agent/grafo/arbolDeProyecto.ts`): sobre el TEXTO del id —de balde, antes de tocar el
43
92
  * disco— y sobre el camino REAL, que es lo único que caza un enlace simbólico. Y hace
44
93
  * falta, porque estaba medido: con `<base>/<id>` apuntando a otra carpeta,
45
94
  * `mkdirSync(…, {recursive:true})` lo SIGUE y `guardarAdjunto` escribía fuera de la cola.
@@ -412,7 +461,7 @@ export function crearTareasEnDisco(opciones) {
412
461
  * encaja ahí sin ensanchar ese tipo.
413
462
  *
414
463
  * **El rechazo se DEVUELVE, nunca se lanza.** Es la misma regla que `write_file`
415
- * (`agent/proyecto.ts`): quien llama —el cable, o un test— necesita poder decir por qué sin
464
+ * (`agent/grafo/proyecto.ts`): quien llama —el cable, o un test— necesita poder decir por qué sin
416
465
  * envolver esto en un `try`, y un `{hecho:false}` es más fácil de propagar hasta una persona
417
466
  * que una excepción.
418
467
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tareasEnDisco.js","sourceRoot":"","sources":["../../../src/agent/tareas/tareasEnDisco.ts"],"names":[],"mappings":"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"}
@@ -35,10 +35,14 @@ export function crearDiagnosticoDeTools(raiz, entorno = process.env) {
35
35
  modelo(origen, uso) {
36
36
  escribir({ tipo: "modelo", origen, ...uso });
37
37
  },
38
- herramienta(nombre, detalle, parametros, tracker) {
38
+ corte(origen, limite) {
39
+ escribir({ tipo: "corte", origen, limite });
40
+ },
41
+ herramienta(nombre, detalle, parametros, tracker, origen) {
39
42
  escribir({
40
43
  tipo: "tool",
41
44
  nombre,
45
+ ...(origen === undefined ? {} : { origen }),
42
46
  ...(detalle === undefined ? {} : { detalle }),
43
47
  ...(parametros === undefined ? {} : { parametros }),
44
48
  inputAcumulado: tracker.input,
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnosticoDeTools.js","sourceRoot":"","sources":["../../../src/agent/turno/diagnosticoDeTools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,iFAAiF;AACjF,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,mBAAmB,CAAC;AAgCtD,8EAA8E;AAC9E,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,kBAAkB,CAAC,CAAC;AACrD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAY,EACZ,UAA6B,OAAO,CAAC,GAAG;IAExC,IAAI,OAAO,CAAC,oBAAoB,CAAC,KAAK,GAAG;QAAE,OAAO,SAAS,CAAC;IAE5D,MAAM,IAAI,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACpC,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACzE,MAAM,QAAQ,GAAG,CAAC,MAA+B,EAAQ,EAAE;QACzD,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACxD,cAAc,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjH,CAAC;QAAC,MAAM,CAAC;YACP,wEAAwE;YACxE,+DAA+D;QACjE,CAAC;IACH,CAAC,CAAC;IAEF,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC7B,OAAO;QACL,MAAM,CAAC,MAAM,EAAE,GAAG;YAChB,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;QAC/C,CAAC;QACD,KAAK,CAAC,MAAM,EAAE,MAAM;YAClB,QAAQ,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;QACD,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM;YACtD,QAAQ,CAAC;gBACP,IAAI,EAAE,MAAM;gBACZ,MAAM;gBACN,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;gBAC3C,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC;gBAC7C,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;gBACnD,cAAc,EAAE,OAAO,CAAC,KAAK;gBAC7B,eAAe,EAAE,OAAO,CAAC,MAAM;gBAC/B,cAAc,EAAE,OAAO,CAAC,KAAK;aAC9B,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { ES_DOBLE } from "../core/ports.js";
1
+ import { ES_DOBLE } from "../../core/ports.js";
2
2
  /**
3
3
  * Un turno completo de pega, para ver el motor correr sin API ni red.
4
4
  *
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guionizado.js","sourceRoot":"","sources":["../../../src/agent/turno/guionizado.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAG/C;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAgB;IAGE;IAFpB,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;IAE3B,YAA6B,YAAY,CAAC;QAAb,cAAS,GAAT,SAAS,CAAI;IAAG,CAAC;IAE9C,KAAK,CAAC,CAAC,KAAK,CAAC,QAAgB;QAC3B,MAAM,KAAK,GAAG,KAAK,IAAmB,EAAE;YACtC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC;gBAAE,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;QAClF,CAAC,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QAC5C,MAAM,KAAK,EAAE,CAAC;QAEd,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QAC7C,MAAM;YACJ,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE;gBACN,EAAE,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,QAAQ,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;aACjE;SACF,CAAC;QACF,MAAM,KAAK,EAAE,CAAC;QAEd,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAC3E,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;YAC5C,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;QACD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;QAEvC,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACpE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QAClD,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;QAC5C,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QACnE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAExE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,6BAA6B,CAAC,EAAE,CAAC;YACpG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YACxD,MAAM,KAAK,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * El LECTOR de `.xonecode/traza-tools.jsonl`: a dónde se fueron los tokens.
3
+ *
4
+ * La traza la escribe `diagnosticoDeTools.ts` y hasta ahora no la leía nadie — un fichero
5
+ * que solo se escribe es un fichero que no contesta nada. Esto la agrega por ORIGEN (el
6
+ * orquestador y cada especialista) y por TOOL, que son las dos preguntas con las que se
7
+ * decide qué recortar: quién gasta, y qué se está leyendo dos veces.
8
+ *
9
+ * Es código PURO —recibe líneas, devuelve un resumen— y por eso lleva test: un contador que
10
+ * cuenta mal invalida en silencio todo lo que se decida mirándolo, igual que un juez de los
11
+ * evals. Quien toca disco es `cli/traza.ts`.
12
+ *
13
+ * **La trampa del formato, y es la razón de la primera prueba**: en una línea `modelo`,
14
+ * `input`, `output` y `cache` son los de ESA llamada, pero `llamadas` es el acumulado del
15
+ * tracker en ese instante (1, 2, 3…) y además es GLOBAL, no del origen. Sumarlo daría seis
16
+ * llamadas donde hubo tres. Las llamadas se cuentan por línea.
17
+ */
18
+ /**
19
+ * Tokens EQUIVALENTES para comparar dos ejecuciones del mismo modelo, no una factura.
20
+ *
21
+ * Asume la caché a un décimo, que es el orden de magnitud que declaran los proveedores que
22
+ * la cobran. La misma cuenta que imprime el corredor de evals, y vive aquí para que sea UNA:
23
+ * dos fórmulas para el mismo número son dos números que acaban divergiendo.
24
+ */
25
+ export function costeEfectivo(uso) {
26
+ return Math.round(uso.input - 0.9 * uso.cache + uso.output);
27
+ }
28
+ /**
29
+ * `offset+limit` de los parámetros, o nada.
30
+ *
31
+ * Se piden los DOS: un `offset` suelto no dice cuánto se leyó, y es justo lo que hay que ver
32
+ * para saber si una lectura fue un fragmento o el fichero entero.
33
+ */
34
+ function rangoDe(parametros) {
35
+ if (typeof parametros !== "object" || parametros === null)
36
+ return undefined;
37
+ const p = parametros;
38
+ if (typeof p.offset !== "number" || typeof p.limit !== "number")
39
+ return undefined;
40
+ return `${p.offset}+${p.limit}`;
41
+ }
42
+ function numero(valor) {
43
+ return typeof valor === "number" && Number.isFinite(valor) ? valor : 0;
44
+ }
45
+ function texto(valor) {
46
+ return typeof valor === "string" && valor !== "" ? valor : undefined;
47
+ }
48
+ /**
49
+ * Agrupa las líneas por sesión, en el orden en que aparece cada una.
50
+ *
51
+ * El fichero es append-only y una máquina acumula varias ejecuciones: sin partir por
52
+ * `sesion` el informe sumaría el turno de ayer al de ahora y nadie lo notaría, porque la
53
+ * cifra resultante es perfectamente plausible.
54
+ */
55
+ export function resumirTraza(lineas) {
56
+ const sesiones = new Map();
57
+ let ultima;
58
+ /**
59
+ * Lo ilegible no trae `sesion`, así que se apunta en la última abierta — y si aún no hay
60
+ * ninguna, ESPERA a la siguiente. Abrir una sesión «?» para alojarlo metería en la lista
61
+ * una ejecución que nunca ocurrió, y una traza se lee contando sesiones.
62
+ */
63
+ let ilegiblesSinDueño = 0;
64
+ const abrir = (id) => {
65
+ const ya = sesiones.get(id);
66
+ if (ya !== undefined)
67
+ return ya;
68
+ const nueva = {
69
+ sesion: { id, llamadas: 0, input: 0, output: 0, cache: 0, contexto: 0, origenes: [], tools: [], toolsDelOrquestador: 0, ilegibles: 0 },
70
+ porOrigen: new Map(),
71
+ porTool: new Map(),
72
+ };
73
+ sesiones.set(id, nueva);
74
+ nueva.sesion.ilegibles += ilegiblesSinDueño;
75
+ ilegiblesSinDueño = 0;
76
+ return nueva;
77
+ };
78
+ for (const linea of lineas) {
79
+ if (linea.trim() === "")
80
+ continue;
81
+ let evento;
82
+ try {
83
+ const leido = JSON.parse(linea);
84
+ if (typeof leido !== "object" || leido === null)
85
+ throw new Error("no es un objeto");
86
+ evento = leido;
87
+ }
88
+ catch {
89
+ if (ultima === undefined)
90
+ ilegiblesSinDueño += 1;
91
+ else
92
+ ultima.sesion.ilegibles += 1;
93
+ continue;
94
+ }
95
+ const actual = abrir(texto(evento.sesion) ?? ultima?.sesion.id ?? "?");
96
+ ultima = actual;
97
+ if (evento.tipo === "modelo") {
98
+ const input = numero(evento.input);
99
+ const output = numero(evento.output);
100
+ const cache = numero(evento.cache);
101
+ const contexto = numero(evento.contexto);
102
+ const origen = texto(evento.origen) ?? "(sin origen)";
103
+ actual.sesion.llamadas += 1;
104
+ actual.sesion.input += input;
105
+ actual.sesion.output += output;
106
+ actual.sesion.cache += cache;
107
+ actual.sesion.contexto = Math.max(actual.sesion.contexto, contexto);
108
+ const gasto = actual.porOrigen.get(origen) ?? { origen, llamadas: 0, input: 0, output: 0, cache: 0, contexto: 0, cortes: 0 };
109
+ gasto.llamadas += 1;
110
+ gasto.input += input;
111
+ gasto.output += output;
112
+ gasto.cache += cache;
113
+ gasto.contexto = Math.max(gasto.contexto, contexto);
114
+ actual.porOrigen.set(origen, gasto);
115
+ continue;
116
+ }
117
+ if (evento.tipo === "corte") {
118
+ // Un corte puede llegar ANTES que cualquier línea de modelo de ese origen, así que la
119
+ // entrada se crea aquí si falta: si no, el corte se perdería por llegar el primero.
120
+ const origen = texto(evento.origen) ?? "(sin origen)";
121
+ const gasto = actual.porOrigen.get(origen) ?? { origen, llamadas: 0, input: 0, output: 0, cache: 0, contexto: 0, cortes: 0 };
122
+ gasto.cortes += 1;
123
+ actual.porOrigen.set(origen, gasto);
124
+ continue;
125
+ }
126
+ if (evento.tipo === "tool") {
127
+ const nombre = texto(evento.nombre) ?? "(sin nombre)";
128
+ // Ausente NO se cuenta como del orquestador: una traza vieja, de antes de que esto se
129
+ // registrara, diría que el orquestador gastó cero — que es «no consta», no «ninguna».
130
+ if (texto(evento.origen) === "orquestador")
131
+ actual.sesion.toolsDelOrquestador += 1;
132
+ const entrada = actual.porTool.get(nombre) ?? {
133
+ uso: { nombre, veces: 0, blancos: [], distintos: 0 },
134
+ blancos: new Map(),
135
+ };
136
+ entrada.uso.veces += 1;
137
+ const detalle = texto(evento.detalle);
138
+ if (detalle !== undefined) {
139
+ const rango = rangoDe(evento.parametros);
140
+ const clave = `${detalle}\u0000${rango ?? ""}`;
141
+ const ya = entrada.blancos.get(clave);
142
+ if (ya === undefined)
143
+ entrada.blancos.set(clave, { detalle, ...(rango === undefined ? {} : { rango }), veces: 1 });
144
+ else
145
+ ya.veces += 1;
146
+ }
147
+ actual.porTool.set(nombre, entrada);
148
+ }
149
+ }
150
+ // Un fichero ENTERO ilegible sí tiene que decir algo: ahí la sesión sin nombre no compite
151
+ // con ninguna de verdad, y devolver una lista vacía se leería como «no hay traza».
152
+ if (ilegiblesSinDueño > 0 && sesiones.size === 0)
153
+ abrir("?");
154
+ return [...sesiones.values()].map(({ sesion, porOrigen, porTool }) => ({
155
+ ...sesion,
156
+ origenes: [...porOrigen.values()].sort((a, b) => costeEfectivo(b) - costeEfectivo(a)),
157
+ tools: [...porTool.values()].map(({ uso, blancos }) => ({
158
+ ...uso,
159
+ // Estable: `sort` conserva el orden de llegada entre iguales, así que dentro de los
160
+ // que salieron una vez se leen en el orden en que ocurrieron.
161
+ blancos: [...blancos.values()].sort((a, b) => b.veces - a.veces),
162
+ distintos: blancos.size,
163
+ })),
164
+ }));
165
+ }
166
+ function cifra(n) {
167
+ return n.toLocaleString("es-ES");
168
+ }
169
+ /** Cuántos blancos se enseñan por tool antes de contar el resto. */
170
+ const TOPE_DE_BLANCOS = 10;
171
+ function porcentajeDeCache(uso) {
172
+ return uso.input === 0 ? 0 : Math.round((100 * uso.cache) / uso.input);
173
+ }
174
+ /** Una línea por origen y una por tool. Sin colores: esto es un informe, no una piel. */
175
+ export function pintarSesion(sesion) {
176
+ const lineas = [];
177
+ lineas.push(`--- traza ${sesion.id} ---`);
178
+ lineas.push(` ${sesion.llamadas} llamada(s) · entrada ${cifra(sesion.input)} · salida ${cifra(sesion.output)} · ` +
179
+ `caché ${porcentajeDeCache(sesion)}% · efectivo ≈${cifra(costeEfectivo(sesion))} · ventana máx ${cifra(sesion.contexto)}`);
180
+ if (sesion.origenes.length > 0) {
181
+ lineas.push(" por origen (lo que más cuesta, primero)");
182
+ for (const o of sesion.origenes) {
183
+ const parte = sesion.input + sesion.output === 0 ? 0 : Math.round((100 * costeEfectivo(o)) / costeEfectivo(sesion));
184
+ lineas.push(` ${o.origen.padEnd(18)} ${String(o.llamadas).padStart(3)} llam · entrada ${cifra(o.input)} · salida ${cifra(o.output)} · ` +
185
+ `caché ${porcentajeDeCache(o)}% · efectivo ≈${cifra(costeEfectivo(o))} (${parte}%)` +
186
+ // Al FINAL de su línea y no en una aparte: lo que hay que poder leer de un vistazo es
187
+ // «estas llamadas no son las de un agente que terminó». Separado en otra línea se lee
188
+ // como una nota al pie de algo que ya se dio por bueno.
189
+ (o.cortes > 0 ? ` ⚠ CORTADO por tope${o.cortes > 1 ? ` ×${o.cortes}` : ""}` : ""));
190
+ }
191
+ }
192
+ if (sesion.tools.length > 0) {
193
+ // El reparto solo se dice si CONSTA. Una traza de antes de que el origen se registrara
194
+ // daría cero, y un cero medido y un cero por ausencia no se distinguirían.
195
+ const total = sesion.tools.reduce((s, x) => s + x.veces, 0);
196
+ const orq = sesion.toolsDelOrquestador;
197
+ lineas.push(orq === 0
198
+ ? " tools"
199
+ : ` tools (orquestador ${orq} de ${total}, el resto de los especialistas)`);
200
+ for (const t of sesion.tools) {
201
+ // «Seis lecturas» y «seis ficheros» no son lo mismo, así que se dicen los dos: lo
202
+ // primero es el trabajo y lo segundo el alcance, y solo juntos se ve una relectura.
203
+ const alcance = t.distintos === 0 ? "" : ` · ${t.distintos} distinto${t.distintos === 1 ? "" : "s"}`;
204
+ lineas.push(` ${t.nombre.padEnd(18)} ×${t.veces}${alcance}`);
205
+ for (const b of t.blancos.slice(0, TOPE_DE_BLANCOS)) {
206
+ lineas.push(` ${b.detalle}${b.rango === undefined ? "" : ` ${b.rango}`}${b.veces > 1 ? ` ×${b.veces}` : ""}`);
207
+ }
208
+ // Lo que no cabe se CUENTA, nunca se calla: una lista recortada en silencio se lee
209
+ // como la lista entera, y aquí eso sería «solo tocó estos diez ficheros».
210
+ const fuera = t.blancos.length - TOPE_DE_BLANCOS;
211
+ if (fuera > 0)
212
+ lineas.push(` … y ${fuera} más`);
213
+ }
214
+ }
215
+ if (sesion.ilegibles > 0)
216
+ lineas.push(` ${sesion.ilegibles} línea(s) ilegibles, no contadas`);
217
+ return lineas;
218
+ }
219
+ /**
220
+ * Lo que costó UN turno, para cerrarlo con una cifra en vez de con un silencio.
221
+ *
222
+ * **Las dos cuentas no se suman**, y por eso son dos filas: los tokens del grafo van contra
223
+ * la clave de API de quien corre y los del agente EXTERNO contra su suscripción. Un token es
224
+ * un token, pero su precio no, así que un total sería una cifra que no significa nada.
225
+ *
226
+ * La cuenta externa **ausente se calla**: una fila de ceros afirma que se midió un agente
227
+ * externo que no corrió. Y una `ventana` de cero es «no se pudo medir», no «cabe todo»:
228
+ * misma regla que `consumoPersistible`, que tampoco la estampa.
229
+ *
230
+ * Vive aquí y no en `cli/run.ts` por el patrón de fallo de este repo: compuesta dentro de
231
+ * `correrReal` —que todos sus tests doblan— la regla quedaría escrita y sin nadie mirándola.
232
+ */
233
+ export function pintarGasto(consumo, llamadas) {
234
+ const fila = (nombre, c, llam) => ` ${nombre.padEnd(8)}${llam === undefined ? " " : `${String(llam).padStart(3)} llam `}· ` +
235
+ `entrada ${cifra(c.entrada)} · salida ${cifra(c.salida)} · caché ${porcentajeDeCache({ input: c.entrada, cache: c.cache })}% · ` +
236
+ `efectivo ≈${cifra(costeEfectivo({ input: c.entrada, output: c.salida, cache: c.cache }))}`;
237
+ const lineas = ["--- gasto del turno ---", fila("modelo", consumo.modelo, llamadas)];
238
+ const e = consumo.externo;
239
+ if (e.entrada > 0 || e.salida > 0)
240
+ lineas.push(fila("externo", e));
241
+ if (consumo.contexto > 0)
242
+ lineas.push(` ventana ${cifra(consumo.contexto)} de entrada en la última llamada`);
243
+ return lineas;
244
+ }
245
+ //# sourceMappingURL=informeDeTraza.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"informeDeTraza.js","sourceRoot":"","sources":["../../../src/agent/turno/informeDeTraza.ts"],"names":[],"mappings":"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"}