xonecode 0.38.44 → 0.39.2

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 (323) hide show
  1. package/dist/agent/cloudstudio/cloudstudioClient.d.ts +29 -0
  2. package/dist/agent/cloudstudio/cloudstudioMcp.d.ts +414 -0
  3. package/dist/agent/cloudstudio/conexionDeServidor.d.ts +37 -0
  4. package/dist/agent/cloudstudio/conexionDeServidor.js +63 -0
  5. package/dist/agent/cloudstudio/conexionDeServidor.js.map +1 -0
  6. package/dist/agent/cloudstudio/crearRama.d.ts +15 -0
  7. package/dist/agent/cloudstudio/crearRama.js +16 -0
  8. package/dist/agent/cloudstudio/crearRama.js.map +1 -0
  9. package/dist/agent/cloudstudio/descarga.d.ts +44 -0
  10. package/dist/agent/cloudstudio/manifiesto.d.ts +25 -0
  11. package/dist/agent/cloudstudio/ramaActiva.d.ts +24 -0
  12. package/dist/agent/cloudstudio/subida.d.ts +61 -0
  13. package/dist/agent/cloudstudio/subida.js +7 -1
  14. package/dist/agent/cloudstudio/subida.js.map +1 -1
  15. package/dist/agent/cloudstudio/validarTrasDescarga.d.ts +13 -0
  16. package/dist/agent/cloudstudio/zip.d.ts +13 -0
  17. package/dist/agent/conectores/conectoresEnDisco.d.ts +47 -0
  18. package/dist/agent/conectores/gestorJira.d.ts +50 -0
  19. package/dist/agent/conectores/gestorNotion.d.ts +45 -0
  20. package/dist/agent/conectores/proveedorDeConector.d.ts +43 -0
  21. package/dist/agent/conectores/servicioDeConectores.d.ts +112 -0
  22. package/dist/agent/config/authEnDisco.d.ts +43 -0
  23. package/dist/agent/config/catalogoModelos.d.ts +79 -0
  24. package/dist/agent/config/configEnDisco.d.ts +235 -0
  25. package/dist/agent/config/crearProyecto.d.ts +20 -0
  26. package/dist/agent/config/diagnosticoDeNodeEnMaquina.d.ts +44 -0
  27. package/dist/agent/config/ecoDeRazonamiento.d.ts +104 -0
  28. package/dist/agent/config/entorno.d.ts +83 -0
  29. package/dist/agent/config/fuentesEnRed.d.ts +12 -0
  30. package/dist/agent/config/gemini.d.ts +5 -0
  31. package/dist/agent/config/iconosEnRed.d.ts +10 -0
  32. package/dist/agent/config/identidadEnDisco.d.ts +27 -0
  33. package/dist/agent/config/modelos.d.ts +77 -0
  34. package/dist/agent/config/modelosDeMotor.d.ts +52 -0
  35. package/dist/agent/config/mudanzaEnDisco.d.ts +99 -0
  36. package/dist/agent/config/persona.d.ts +1 -0
  37. package/dist/agent/config/selectorEnMaquina.d.ts +35 -0
  38. package/dist/agent/config/settingsEnDisco.d.ts +206 -0
  39. package/dist/agent/config/versionEnDisco.d.ts +17 -0
  40. package/dist/agent/dispositivos/arranqueDeEmulador.d.ts +60 -0
  41. package/dist/agent/dispositivos/cajasDeMaqueta.d.ts +61 -0
  42. package/dist/agent/dispositivos/decodificarImagen.d.ts +21 -0
  43. package/dist/agent/dispositivos/descargaDeHerramientas.d.ts +44 -0
  44. package/dist/agent/dispositivos/dispositivosEnMaquina.d.ts +161 -0
  45. package/dist/agent/dispositivos/geometriaEnDisco.d.ts +17 -0
  46. package/dist/agent/dispositivos/hotswap.d.ts +194 -0
  47. package/dist/agent/dispositivos/instalacionEnMaquina.d.ts +156 -0
  48. package/dist/agent/dispositivos/juezVisual.d.ts +144 -0
  49. package/dist/agent/dispositivos/lanzamientoEnMaquina.d.ts +197 -0
  50. package/dist/agent/dispositivos/paqueteDelProyecto.d.ts +28 -0
  51. package/dist/agent/dispositivos/procesosEnMaquina.d.ts +154 -0
  52. package/dist/agent/dispositivos/recargaEnAparato.d.ts +30 -0
  53. package/dist/agent/dispositivos/sensorDeArranque.d.ts +42 -0
  54. package/dist/agent/exportarPdf.d.ts +72 -0
  55. package/dist/agent/grafo/aprendido.d.ts +28 -0
  56. package/dist/agent/grafo/arbolDeProyecto.d.ts +205 -0
  57. package/dist/agent/grafo/artefactosEnDisco.d.ts +35 -0
  58. package/dist/agent/grafo/atributosXone.d.ts +31 -0
  59. package/dist/agent/grafo/buscarIcono.d.ts +32 -0
  60. package/dist/agent/grafo/busquedaRegex.d.ts +56 -0
  61. package/dist/agent/grafo/codificacionDelProyecto.d.ts +7 -0
  62. package/dist/agent/grafo/compararCapturas.d.ts +22 -0
  63. package/dist/agent/grafo/copiarArtefacto.d.ts +64 -0
  64. package/dist/agent/grafo/criticaVisual.d.ts +60 -0
  65. package/dist/agent/grafo/describirImagen.d.ts +79 -0
  66. package/dist/agent/grafo/diferenciaDeCapturas.d.ts +33 -0
  67. package/dist/agent/grafo/ejecucionCancelable.d.ts +45 -0
  68. package/dist/agent/grafo/escriturasEnSerie.d.ts +31 -0
  69. package/dist/agent/grafo/excluirTools.d.ts +37 -0
  70. package/dist/agent/grafo/fuentesDeGoogle.d.ts +37 -0
  71. package/dist/agent/grafo/generarFondoSvg.d.ts +52 -0
  72. package/dist/agent/grafo/incorporarAdjunto.d.ts +98 -0
  73. package/dist/agent/grafo/lectorDeReferencias.d.ts +28 -0
  74. package/dist/agent/grafo/marcarCriteriosDelPlan.d.ts +47 -0
  75. package/dist/agent/grafo/memoriaDeProyecto.d.ts +15 -0
  76. package/dist/agent/grafo/navegacionXone.d.ts +60 -0
  77. package/dist/agent/grafo/opcionesDeFicheros.d.ts +23 -0
  78. package/dist/agent/grafo/perfiles.d.ts +225 -0
  79. package/dist/agent/grafo/proyecto.d.ts +450 -0
  80. package/dist/agent/grafo/skills.d.ts +181 -0
  81. package/dist/agent/grafo/traerDeLaMaquina.d.ts +60 -0
  82. package/dist/agent/grafo/unirSecciones.d.ts +20 -0
  83. package/dist/agent/grafo/validacionXone.d.ts +35 -0
  84. package/dist/agent/grafo/validarFicheroXone.d.ts +33 -0
  85. package/dist/agent/grafo/xoneAgent.d.ts +166 -0
  86. package/dist/agent/motores/motoresLocales.d.ts +87 -0
  87. package/dist/agent/motores/trueforge/capacidades.d.ts +183 -0
  88. package/dist/agent/motores/trueforge/convertirAP.d.ts +38 -0
  89. package/dist/agent/motores/trueforge/detencion.d.ts +70 -0
  90. package/dist/agent/motores/trueforge/esperas.d.ts +38 -0
  91. package/dist/agent/motores/trueforge/eventosTrueforge.d.ts +56 -0
  92. package/dist/agent/motores/trueforge/informesDeHijos.d.ts +48 -0
  93. package/dist/agent/motores/trueforge/medidaAutomatica.d.ts +37 -0
  94. package/dist/agent/motores/trueforge/memoriaDeEspecialistas.d.ts +60 -0
  95. package/dist/agent/motores/trueforge/memoriaTrueforge.d.ts +131 -0
  96. package/dist/agent/motores/trueforge/metricasTrueforge.d.ts +45 -0
  97. package/dist/agent/motores/trueforge/modeloExterno.d.ts +9 -0
  98. package/dist/agent/motores/trueforge/modeloLangchain.d.ts +69 -0
  99. package/dist/agent/motores/trueforge/notas.d.ts +48 -0
  100. package/dist/agent/motores/trueforge/proponerTareas.d.ts +30 -0
  101. package/dist/agent/motores/trueforge/recortes.d.ts +47 -0
  102. package/dist/agent/motores/trueforge/resumenSeguro.d.ts +33 -0
  103. package/dist/agent/motores/trueforge/sesionTrueforge.d.ts +273 -0
  104. package/dist/agent/motores/trueforge/skillsTrueforge.d.ts +16 -0
  105. package/dist/agent/motores/trueforge/toolsDeConectores.d.ts +36 -0
  106. package/dist/agent/motores/trueforge/toolsDeFichero.d.ts +146 -0
  107. package/dist/agent/motores/trueforge/toolsPropias.d.ts +38 -0
  108. package/dist/agent/motores/trueforge/traerDeStitch.d.ts +63 -0
  109. package/dist/agent/motores/trueforge/trueforge.d.ts +35 -0
  110. package/dist/agent/navegacion/estilosEnDisco.d.ts +41 -0
  111. package/dist/agent/navegacion/hechosEnDisco.d.ts +19 -0
  112. package/dist/agent/navegacion/indiceEnDisco.d.ts +50 -0
  113. package/dist/agent/navegacion/modeloDeProyecto.d.ts +86 -0
  114. package/dist/agent/planesEnDisco.d.ts +18 -0
  115. package/dist/agent/publicarPlan.d.ts +20 -0
  116. package/dist/agent/raizDelPaquete.d.ts +9 -0
  117. package/dist/agent/remoto/ngrokEnMaquina.d.ts +44 -0
  118. package/dist/agent/remoto/puenteWebSocket.d.ts +59 -0
  119. package/dist/agent/remoto/tunelNgrok.d.ts +31 -0
  120. package/dist/agent/renombrarSobre.d.ts +14 -0
  121. package/dist/agent/sesiones/adjuntosDeSesion.d.ts +64 -0
  122. package/dist/agent/sesiones/baseDeFichero.d.ts +9 -0
  123. package/dist/agent/sesiones/checkpointer.d.ts +146 -0
  124. package/dist/agent/sesiones/git.d.ts +66 -0
  125. package/dist/agent/sesiones/gitSync.d.ts +264 -0
  126. package/dist/agent/sesiones/memoriaDeHilo.d.ts +4 -0
  127. package/dist/agent/sesiones/modeloDelCambio.d.ts +7 -0
  128. package/dist/agent/sesiones/parcheEnTexto.d.ts +9 -0
  129. package/dist/agent/sesiones/sesionGit.d.ts +155 -0
  130. package/dist/agent/subagentes/actividadDeCodex.d.ts +8 -0
  131. package/dist/agent/subagentes/agentesEnDisco.d.ts +198 -0
  132. package/dist/agent/subagentes/consumoExterno.d.ts +83 -0
  133. package/dist/agent/subagentes/ejecutableEnWindows.d.ts +53 -0
  134. package/dist/agent/subagentes/escrituraDeCodex.d.ts +94 -0
  135. package/dist/agent/subagentes/escrituraDeOpencode.d.ts +67 -0
  136. package/dist/agent/subagentes/escrituraExterna.d.ts +419 -0
  137. package/dist/agent/subagentes/pluginDeSkills.d.ts +84 -0
  138. package/dist/agent/subagentes/subagenteCodex.d.ts +76 -0
  139. package/dist/agent/subagentes/subagenteExterno.d.ts +169 -0
  140. package/dist/agent/subagentes/subagenteOpencode.d.ts +126 -0
  141. package/dist/agent/tareas/aumentador.d.ts +99 -0
  142. package/dist/agent/tareas/juezDeTarea.d.ts +64 -0
  143. package/dist/agent/tareas/reflejoEnElGestor.d.ts +38 -0
  144. package/dist/agent/tareas/sondeoDelGestor.d.ts +49 -0
  145. package/dist/agent/tareas/tareasEnDisco.d.ts +141 -0
  146. package/dist/agent/trazaDeErroresEnDisco.d.ts +10 -0
  147. package/dist/agent/turno/depuracion.d.ts +1 -0
  148. package/dist/agent/turno/diagnosticoDeTools.d.ts +124 -0
  149. package/dist/agent/turno/ficherosDelProyecto.d.ts +10 -0
  150. package/dist/agent/turno/guionizado.d.ts +18 -0
  151. package/dist/agent/turno/informeDeTraza.d.ts +220 -0
  152. package/dist/agent/turno/inspectorDePrompt.d.ts +150 -0
  153. package/dist/agent/turno/instantanea.d.ts +16 -0
  154. package/dist/agent/turno/interrupts.d.ts +54 -0
  155. package/dist/agent/turno/juezDelTurnoConModelo.d.ts +26 -0
  156. package/dist/agent/turno/mensajes.d.ts +23 -0
  157. package/dist/agent/turno/normalizar.d.ts +15 -0
  158. package/dist/agent/turno/puente.d.ts +196 -0
  159. package/dist/agent/turno/registroDeFallos.d.ts +39 -0
  160. package/dist/agent/turno/resumenDeContexto.d.ts +269 -0
  161. package/dist/agent/turno/resumenDeTool.d.ts +33 -0
  162. package/dist/agent/turno/rubrica.d.ts +35 -0
  163. package/dist/agent/turno/sesionReal.d.ts +89 -0
  164. package/dist/agent/turno/textoDeTool.d.ts +19 -0
  165. package/dist/agent/turno/turnoReal.d.ts +210 -0
  166. package/dist/agent/turno/verificacion.d.ts +85 -0
  167. package/dist/agent/turno/verificador.d.ts +66 -0
  168. package/dist/bin.d.ts +2 -0
  169. package/dist/cli/acuseDeModelo.d.ts +18 -0
  170. package/dist/cli/aprobar.d.ts +162 -0
  171. package/dist/cli/config.d.ts +17 -0
  172. package/dist/cli/consola.d.ts +473 -0
  173. package/dist/cli/describe.d.ts +7 -0
  174. package/dist/cli/doctor.d.ts +8 -0
  175. package/dist/cli/fuentesDeDisco.d.ts +25 -0
  176. package/dist/cli/main.d.ts +291 -0
  177. package/dist/cli/markdown.d.ts +126 -0
  178. package/dist/cli/panel.d.ts +38 -0
  179. package/dist/cli/podar.d.ts +38 -0
  180. package/dist/cli/run.d.ts +30 -0
  181. package/dist/cli/spinner.d.ts +37 -0
  182. package/dist/cli/stdio.d.ts +94 -0
  183. package/dist/cli/tema.d.ts +68 -0
  184. package/dist/cli/tokens.d.ts +16 -0
  185. package/dist/cli/traza.d.ts +19 -0
  186. package/dist/cli/tui/app.d.ts +23 -0
  187. package/dist/cli/tui/aprobarTui.d.ts +46 -0
  188. package/dist/cli/tui/barra.d.ts +43 -0
  189. package/dist/cli/tui/correrTui.d.ts +119 -0
  190. package/dist/cli/tui/entrada.d.ts +14 -0
  191. package/dist/cli/tui/filas.d.ts +13 -0
  192. package/dist/cli/tui/logo.d.ts +20 -0
  193. package/dist/cli/tui/pielTui.d.ts +15 -0
  194. package/dist/cli/tui/raton.d.ts +68 -0
  195. package/dist/cli/tui/sidebar.d.ts +63 -0
  196. package/dist/cli/tui/store.d.ts +102 -0
  197. package/dist/cli/tui/tarjeta.d.ts +8 -0
  198. package/dist/cli/tui/temaInk.d.ts +67 -0
  199. package/dist/cli/tui/transcript.d.ts +32 -0
  200. package/dist/cli/verify.d.ts +9 -0
  201. package/dist/cli/wizardInicial.d.ts +59 -0
  202. package/dist/core/actos.d.ts +437 -0
  203. package/dist/core/adjuntos.d.ts +77 -0
  204. package/dist/core/agentes.d.ts +353 -0
  205. package/dist/core/analisisDeSesion.d.ts +63 -0
  206. package/dist/core/aprendido.d.ts +41 -0
  207. package/dist/core/artefactos.d.ts +74 -0
  208. package/dist/core/atributosXone.d.ts +53 -0
  209. package/dist/core/bitacora.d.ts +21 -0
  210. package/dist/core/cloudstudio.d.ts +168 -0
  211. package/dist/core/codificacion.d.ts +81 -0
  212. package/dist/core/comandoExterno.d.ts +49 -0
  213. package/dist/core/compararCapturas.d.ts +136 -0
  214. package/dist/core/conectores.d.ts +296 -0
  215. package/dist/core/config.d.ts +148 -0
  216. package/dist/core/contextos.d.ts +54 -0
  217. package/dist/core/convertirAP.d.ts +56 -0
  218. package/dist/core/copiaDeAvd.d.ts +44 -0
  219. package/dist/core/cssBienFormado.d.ts +22 -0
  220. package/dist/core/deps.d.ts +28 -0
  221. package/dist/core/descargas.d.ts +61 -0
  222. package/dist/core/descripcionDePantalla.d.ts +121 -0
  223. package/dist/core/descriptoresDeApp.d.ts +108 -0
  224. package/dist/core/diagnosticoDeNode.d.ts +51 -0
  225. package/dist/core/diff.d.ts +26 -0
  226. package/dist/core/diffDeColecciones.d.ts +54 -0
  227. package/dist/core/disenoVinculado.d.ts +17 -0
  228. package/dist/core/dispositivoDeSesion.d.ts +22 -0
  229. package/dist/core/dispositivoElegido.d.ts +17 -0
  230. package/dist/core/dispositivos.d.ts +469 -0
  231. package/dist/core/entrega.d.ts +341 -0
  232. package/dist/core/entrelazar.d.ts +48 -0
  233. package/dist/core/esfuerzo.d.ts +120 -0
  234. package/dist/core/esqueleto.d.ts +38 -0
  235. package/dist/core/estiloMedido.d.ts +70 -0
  236. package/dist/core/estilos.d.ts +76 -0
  237. package/dist/core/events.d.ts +218 -0
  238. package/dist/core/exportacion.d.ts +88 -0
  239. package/dist/core/fallos.d.ts +79 -0
  240. package/dist/core/fondosSvg.d.ts +115 -0
  241. package/dist/core/fotoDeColecciones.d.ts +45 -0
  242. package/dist/core/fuentes.d.ts +96 -0
  243. package/dist/core/geometriaDePantalla.d.ts +171 -0
  244. package/dist/core/gestorDeTareas.d.ts +295 -0
  245. package/dist/core/hechosDelProyecto.d.ts +70 -0
  246. package/dist/core/hotswap.d.ts +30 -0
  247. package/dist/core/iconos.d.ts +86 -0
  248. package/dist/core/identidadDeProveedor.d.ts +20 -0
  249. package/dist/core/idiomaDeLaRespuesta.d.ts +26 -0
  250. package/dist/core/imagenesDeDocumento.d.ts +40 -0
  251. package/dist/core/jsParaRhino.d.ts +3 -0
  252. package/dist/core/juezDelTurno.d.ts +95 -0
  253. package/dist/core/logDeDispositivo.d.ts +67 -0
  254. package/dist/core/memoria.d.ts +18 -0
  255. package/dist/core/metodoDeComparacionVisual.d.ts +20 -0
  256. package/dist/core/modelos.d.ts +198 -0
  257. package/dist/core/modoDeEscritura.d.ts +155 -0
  258. package/dist/core/motor.d.ts +43 -0
  259. package/dist/core/motoresLocales.d.ts +113 -0
  260. package/dist/core/mudanzaDeWorkspace.d.ts +112 -0
  261. package/dist/core/navegacion.d.ts +172 -0
  262. package/dist/core/notify.d.ts +77 -0
  263. package/dist/core/nucleoXone.d.ts +28 -0
  264. package/dist/core/panorama.d.ts +68 -0
  265. package/dist/core/paqueteDeSoporte.d.ts +100 -0
  266. package/dist/core/planDeSubida.d.ts +56 -0
  267. package/dist/core/planes.d.ts +53 -0
  268. package/dist/core/podaDeCheckpoint.d.ts +75 -0
  269. package/dist/core/ports.d.ts +1034 -0
  270. package/dist/core/puedeLanzarse.d.ts +181 -0
  271. package/dist/core/puertosDeAvd.d.ts +59 -0
  272. package/dist/core/recargaEnCaliente.d.ts +52 -0
  273. package/dist/core/referenciasDeImagen.d.ts +36 -0
  274. package/dist/core/remoto.d.ts +76 -0
  275. package/dist/core/repartoDeEncargo.d.ts +80 -0
  276. package/dist/core/rubrica.d.ts +78 -0
  277. package/dist/core/rutaVirtual.d.ts +29 -0
  278. package/dist/core/selectorDeCarpeta.d.ts +59 -0
  279. package/dist/core/serieDeEscrituras.d.ts +58 -0
  280. package/dist/core/settings.d.ts +421 -0
  281. package/dist/core/shellDeAgente.d.ts +177 -0
  282. package/dist/core/skills.d.ts +129 -0
  283. package/dist/core/stitch.d.ts +114 -0
  284. package/dist/core/tareas.d.ts +412 -0
  285. package/dist/core/tareasDelPlan.d.ts +123 -0
  286. package/dist/core/tareasEnElGestor.d.ts +117 -0
  287. package/dist/core/textos.d.ts +8 -0
  288. package/dist/core/topeAgotado.d.ts +55 -0
  289. package/dist/core/traerDeLaMaquina.d.ts +33 -0
  290. package/dist/core/trazaDeErrores.d.ts +83 -0
  291. package/dist/core/tunel.d.ts +45 -0
  292. package/dist/core/turno.d.ts +154 -0
  293. package/dist/core/validacionDeEscritura.d.ts +95 -0
  294. package/dist/core/verificacionDeSubida.d.ts +14 -0
  295. package/dist/core/version.d.ts +35 -0
  296. package/dist/core/xmlBienFormado.d.ts +23 -0
  297. package/dist/core/zipDeAdjunto.d.ts +28 -0
  298. package/dist/core/zipDeSkill.d.ts +74 -0
  299. package/dist/lib/tareaAutonoma.d.ts +36 -0
  300. package/dist/lib/tareaAutonoma.js +259 -0
  301. package/dist/lib/tareaAutonoma.js.map +1 -0
  302. package/dist/lib.d.ts +31 -0
  303. package/dist/lib.js +28 -0
  304. package/dist/lib.js.map +1 -0
  305. package/dist/vendor/hitl.d.ts +69 -0
  306. package/dist/vendor/skillLoaders/catalog.d.ts +27 -0
  307. package/dist/vendor/sqliteSaver.d.ts +22 -0
  308. package/dist/vendor/tokenTracking.d.ts +22 -0
  309. package/dist/web/servidor/arranque.d.ts +1372 -0
  310. package/dist/web/servidor/consolaDeTarea.d.ts +166 -0
  311. package/dist/web/servidor/consolaWeb.d.ts +142 -0
  312. package/dist/web/servidor/corredorDeTareas.d.ts +395 -0
  313. package/dist/web/servidor/datosDeCierre.d.ts +4 -0
  314. package/dist/web/servidor/interrupcion.d.ts +39 -0
  315. package/dist/web/servidor/pielWeb.d.ts +32 -0
  316. package/dist/web/servidor/puenteRemoto.d.ts +80 -0
  317. package/dist/web/servidor/servidor.d.ts +53 -0
  318. package/dist/web/servidor/sesiones.d.ts +342 -0
  319. package/dist/web/servidor/soporte.d.ts +65 -0
  320. package/dist/web/servidor/transporte.d.ts +2751 -0
  321. package/dist/web/servidor/vestibulo.d.ts +952 -0
  322. package/dist/web/servidor/visorOpenui.d.ts +33 -0
  323. package/package.json +9 -1
@@ -0,0 +1,150 @@
1
+ /**
2
+ * El INSPECTOR: qué entra de verdad al modelo en cada llamada.
3
+ *
4
+ * Todo lo que se ha medido en este harness hasta ahora era lo que SALE —tokens contados por el
5
+ * proveedor, tools llamadas, ficheros leídos—, y de ahí se DEDUCÍA lo que entra. Eso llegó
6
+ * lejos, pero se quedó corto dos veces el mismo día: cuando un especialista perdió su encargo en
7
+ * el resumen hubo que reconstruirlo leyendo la fuente de la librería, y cuando el chat empezó a
8
+ * enseñar ficheros enteros hubo que adivinar por dónde se colaban. Con esto se mira.
9
+ *
10
+ * Es un `wrapModelCall`, o sea el último sitio antes de que la petición salga: lo que ve es
11
+ * exactamente lo que el modelo va a recibir, después de TODOS los middleware —el resumen, la
12
+ * devolución del encargo, la conversión de los `ToolMessage`— y no lo que alguien creía haber
13
+ * puesto.
14
+ *
15
+ * ## Dos niveles, y el de por omisión no lleva contenido
16
+ *
17
+ * - `XONECODE_TRACE_PROMPT=1` apunta la FORMA: origen, cuántos mensajes, de qué tipo, cuánto
18
+ * ocupa cada uno, el tamaño del prompt de sistema y cuántas tools van declaradas. Con eso se
19
+ * contesta la pregunta cara —a dónde se va el contexto— sin sacar a disco una línea del
20
+ * proyecto.
21
+ * - `XONECODE_TRACE_PROMPT=todo` añade el TEXTO. Es lo que hace falta para ver por qué un
22
+ * agente contesta lo que contesta, y por eso existe; pero saca a disco el contenido de lo que
23
+ * se haya leído, así que se pide aparte y a sabiendas. Es la misma disciplina que
24
+ * `diagnosticoDeTools.ts`, que nunca guarda contenido: aquí el contenido ES la pregunta, así
25
+ * que no se puede prohibir — se puede hacer explícito.
26
+ *
27
+ * El fichero vive en `.xonecode/`, que está denegada al agente, fuera de git y fuera de lo que
28
+ * sube a CloudStudio.
29
+ */
30
+ import { createMiddleware } from "langchain";
31
+ export declare const VARIABLE_TRAZA_PROMPT = "XONECODE_TRACE_PROMPT";
32
+ export declare const NOMBRE_TRAZA_PROMPT = "traza-prompt.jsonl";
33
+ /** Ruta pública, solo para poder decirle a alguien dónde quedó su diagnóstico. */
34
+ export declare function rutaTrazaDePrompt(raiz: string): string;
35
+ /** Qué se apunta de cada mensaje. El `texto` solo con el nivel `todo`. */
36
+ export interface MensajeInspeccionado {
37
+ tipo: string;
38
+ caracteres: number;
39
+ /** Cuántas tool calls pide, si pide alguna. Ausente si ninguna. */
40
+ toolCalls?: number;
41
+ texto?: string;
42
+ }
43
+ /** Una tool declarada: su nombre y lo que ocupa su esquema. */
44
+ export interface EsquemaInspeccionado {
45
+ nombre: string;
46
+ caracteres: number;
47
+ }
48
+ export interface LlamadaInspeccionada {
49
+ origen: string;
50
+ mensajes: MensajeInspeccionado[];
51
+ sistema: {
52
+ caracteres: number;
53
+ texto?: string;
54
+ };
55
+ tools: number;
56
+ /**
57
+ * Lo que ocupan los ESQUEMAS de las tools, que es la mitad que faltaba.
58
+ *
59
+ * Medido el 17-09-2026 con la primera versión de esto: el inspector decía 8.151 caracteres
60
+ * —unos 2k tokens— en la última llamada de un turno que pagó 3.900 tokens por llamada. La
61
+ * diferencia eran los esquemas, que se reenvían ENTEROS en cada petición y aquí se contaban
62
+ * como un número («tools: 8») en vez de como tamaño. Es lo mismo que documenta el harness de
63
+ * deepseek: «schema tokens repeat on every request; restricting a tool removes its entire
64
+ * schema cost for that agent».
65
+ */
66
+ esquemas: {
67
+ caracteres: number;
68
+ porTool: EsquemaInspeccionado[];
69
+ };
70
+ /**
71
+ * La HUELLA de lo que va delante: el prompt de sistema y los esquemas, en su orden.
72
+ *
73
+ * Es lo que decide si la caché de un proveedor puede enganchar, porque toda caché de prompt
74
+ * es por PREFIJO: si esto cambia entre dos llamadas, aunque sea por el orden de las tools o
75
+ * por una descripción generada, la reutilización se rompe desde el primer byte distinto. Y se
76
+ * contesta con un hash en vez de con el texto, así que la pregunta se puede responder sin
77
+ * sacar una línea del proyecto a disco.
78
+ */
79
+ prefijo: {
80
+ caracteres: number;
81
+ huella: string;
82
+ };
83
+ /** La suma de TODO lo que va en la petición: sistema, mensajes y esquemas. */
84
+ caracteresTotales: number;
85
+ /**
86
+ * Lo que el PROVEEDOR dice que costó esa misma llamada.
87
+ *
88
+ * Es la otra mitad, y va en la MISMA línea a propósito: el inspector cuenta caracteres y la
89
+ * factura viene en tokens, así que separarlos obliga a cruzar dos ficheros a ojo para
90
+ * contestar «¿de dónde salió esta cifra?». Juntos, una línea dice lo que entró y lo que
91
+ * costó. La primera medida con esto puesto habría enseñado de golpe que los esquemas eran el
92
+ * 80 % del turno, en vez de deducirlo restando.
93
+ *
94
+ * Ausente cuando el proveedor no lo manda: un cero aquí sería una medición que nadie hizo.
95
+ */
96
+ uso?: {
97
+ entrada: number;
98
+ salida: number;
99
+ cache: number;
100
+ };
101
+ }
102
+ /**
103
+ * Lo que ocupa el esquema de una tool, tal y como viaja.
104
+ *
105
+ * Se serializa lo que la librería expone —nombre, descripción y esquema de parámetros— porque
106
+ * una tool de LangChain no publica su forma de red. Es una ESTIMACIÓN y se dice: sirve para
107
+ * comparar unas tools con otras y para ver cuánto pesa la cabecera, no para cuadrar con la
108
+ * factura del proveedor.
109
+ */
110
+ /**
111
+ * El esquema de una tool como TEXTO: nombre, descripción y parámetros.
112
+ *
113
+ * Es lo que se mide y lo que se huele, y tiene que ser el CONTENIDO y no un resumen: la primera
114
+ * versión hacía la huella sobre `{nombre, caracteres}`, o sea sobre la propia medida, y entonces
115
+ * una descripción que cambiara conservando el largo habría dado la misma huella. Una huella que
116
+ * no cambia cuando cambia lo que representa no vale para nada.
117
+ */
118
+ export declare function textoDeEsquema(t: unknown): string;
119
+ export declare function esquemaDeTool(t: unknown): EsquemaInspeccionado;
120
+ /** El tipo de un mensaje, venga como venga: langchain no lo expone igual en todos. */
121
+ export declare function tipoDeMensaje(msg: unknown): string;
122
+ /**
123
+ * El consumo que declara una respuesta del modelo, si lo declara.
124
+ *
125
+ * Se mira `usage_metadata` (el estándar de LangChain, que los tres adaptadores que usamos
126
+ * rellenan) y su `input_token_details.cache_read`. Lo que no venga se queda AUSENTE en vez de
127
+ * volverse cero: ya hay bastantes ceros inventados en este oficio.
128
+ */
129
+ export declare function usoDeRespuesta(respuesta: unknown): {
130
+ entrada: number;
131
+ salida: number;
132
+ cache: number;
133
+ } | undefined;
134
+ /** El texto de un mensaje, con los bloques concatenados. Nunca `undefined`. */
135
+ export declare function textoDeMensaje(msg: unknown): string;
136
+ /**
137
+ * La FOTO de una petición al modelo, sin tocar disco: pura, y por eso con test.
138
+ *
139
+ * `conTexto` decide si se lleva el contenido. Separar el cálculo de la escritura es lo que
140
+ * permite comprobar que la forma es correcta sin montar un agente ni escribir un fichero.
141
+ */
142
+ export declare function inspeccionarLlamada(origen: string, peticion: unknown, conTexto: boolean): LlamadaInspeccionada;
143
+ /**
144
+ * El middleware. Devuelve `undefined` si la traza no está pedida, para no montarlo.
145
+ *
146
+ * Se pone al FINAL de la lista de cada agente: el primero envuelve al siguiente, así que el
147
+ * último es el que ve la petición ya pasada por todos los demás — que es justo lo que se quiere
148
+ * inspeccionar. Puesto delante mentiría enseñando lo que otros van a cambiar después.
149
+ */
150
+ export declare function inspectorDePrompt(raiz: string, origen: string, entorno?: NodeJS.ProcessEnv): ReturnType<typeof createMiddleware> | undefined;
@@ -0,0 +1,16 @@
1
+ export interface Cambio {
2
+ /** Ruta relativa al PROYECTO, no al repo: el prefijo ya viene recortado. */
3
+ ruta: string;
4
+ clase: "nuevo" | "modificado" | "borrado";
5
+ }
6
+ export interface Instantanea {
7
+ /** Cómo se tomó. Un deshacer del que no sabes cuál es, no es un deshacer. */
8
+ via: "git" | "huellas";
9
+ cambios(): Promise<Cambio[]>;
10
+ /** El diff con contenido, que es el formato que un modelo lee bien. Vacío sin git. */
11
+ diff(): Promise<string>;
12
+ }
13
+ export declare function tomarInstantanea(raiz: string, git: {
14
+ usable: boolean;
15
+ prefijo: string;
16
+ }): Promise<Instantanea>;
@@ -0,0 +1,54 @@
1
+ import { buildResume, type Decision, type PendingInterrupt } from "../../vendor/hitl.js";
2
+ import type { PendienteDeAprobacion } from "../../core/events.js";
3
+ import { type LineaDeDiff } from "../../core/diff.js";
4
+ export { buildResume, type Decision, type PendingInterrupt };
5
+ /**
6
+ * Los interrupts pendientes de un hilo, en el vocabulario de xonecode.
7
+ *
8
+ * **Se pregunta al ESTADO, no al resultado del stream.** La clave `__interrupt__` solo
9
+ * existe en la llamada que pausó; el estado sobrevive al proceso y es la fuente de verdad.
10
+ * Es la misma razón por la que se puede pausar en un proceso y aprobar desde otro.
11
+ */
12
+ export declare function pendientesDe(agente: unknown, config: unknown): Promise<PendienteDeAprobacion[]>;
13
+ /**
14
+ * De la forma de deepagents a la de xonecode.
15
+ *
16
+ * El `origen` sale de la `description`, que es donde `hitlDe()` metió el nombre del perfil
17
+ * —`[dev] quiere escribir un fichero del proyecto`—: **el interrupt no dice de qué
18
+ * subagente viene**, y `dev` y `mockup` comparten `write_file`.
19
+ *
20
+ * **Y una vez extraído, el prefijo se QUITA de la descripción.** Las tres pieles pintan los
21
+ * dos campos, uno debajo del otro (`cli/aprobar.ts`, `cli/tui/aprobarTui.tsx`,
22
+ * `componentes/Aprobacion.tsx`), así que dejarlo decía lo mismo dos veces pegado: «[dev]
23
+ * quiere modificar un fichero del proyecto» y justo debajo «quién: dev». Se quita aquí y no
24
+ * en cada piel porque el dato es uno y el sitio donde vive es `origen` — tres recortes a
25
+ * mano son tres sitios donde divergir. Sin corchete no hay nada que quitar y la descripción
26
+ * se queda tal cual: es la de un interrupt que no pasó por `hitlDe` (el `Ejecutar <tool>`
27
+ * de reserva de `collectPending`), y ahí `origen` es el nombre de la tool.
28
+ */
29
+ export declare function aPendiente(p: PendingInterrupt): PendienteDeAprobacion;
30
+ /**
31
+ * Qué fichero se va a tocar, para poder decirlo sin enseñar los argumentos.
32
+ *
33
+ * Los argumentos NO se publican: `write_file` lleva el contenido entero. Pero aprobar a
34
+ * ciegas es peor que no aprobar, así que se extrae **solo la ruta** de la lista blanca de
35
+ * claves que la llevan.
36
+ */
37
+ export declare function ficheroDe(p: PendingInterrupt): string | undefined;
38
+ /** El antes y el después de un pendiente, listos para decidir: la ruta y sus líneas de diff. */
39
+ export interface VistaDelCambio {
40
+ ruta: string;
41
+ lineas: LineaDeDiff[];
42
+ }
43
+ /**
44
+ * La vista del cambio que pide un pendiente: el ANTES es el disco (el interrupt para
45
+ * ANTES de escribir, así que disco == antes) y el DESPUÉS sale de los argumentos.
46
+ *
47
+ * Este es el ÚNICO sitio donde el contenido sale de los argumentos, y es a propósito:
48
+ * la aprobación es el paso donde enseñar el contenido es la REGLA — aprobar a ciegas
49
+ * es peor que no aprobar. Fuera de aquí, la lista blanca de `resumenDeTool.ts` manda.
50
+ *
51
+ * `leer` entra por parámetro (en producción lee del disco; en los tests, un mapa) y
52
+ * una tool que no es de escritura, o args incompletos, no produce vista — no crash.
53
+ */
54
+ export declare function cambioDe(p: PendingInterrupt, leer: (ruta: string) => string): VistaDelCambio | undefined;
@@ -0,0 +1,26 @@
1
+ import { type HechosDelTurno, type VeredictoDelTurno } from "../../core/juezDelTurno.js";
2
+ import type { ModelosPort } from "../../core/ports.js";
3
+ /**
4
+ * El juez del turno cableado a un modelo de verdad.
5
+ *
6
+ * Reusa `invocarConModelos` y `PAPEL_DEL_JUEZ` del juez de TAREAS en vez de repetirlos: es
7
+ * la misma pregunta con otro alcance —«¿esto cumple lo que se pidió?»— y el papel `afilado`
8
+ * está reservado justo para eso. Dos caminos para invocar al juez serían dos sitios donde
9
+ * elegir el modelo, y ya pasó con las cuatro copias de `VARIABLES_POR_PROVEEDOR`.
10
+ *
11
+ * **Lo caro de este juez es lo que NO se le manda.** Ve el objetivo, la respuesta y cuatro
12
+ * hechos medidos; nunca el contenido de un fichero ni el transcript. Por eso una llamada
13
+ * suya cuesta del orden de unos cientos de tokens contra los cientos de miles de un turno,
14
+ * y puede correr en todos sin que se note en la cuenta.
15
+ *
16
+ * **Un fallo suyo NO lanza**: devuelve `dudoso` con el motivo. Es una opinión sobre trabajo
17
+ * que ya está hecho, y el turno lo trata como tal — `turnoReal.ts` también tiene su `catch`,
18
+ * porque un juez que se cae no puede llevarse por delante lo que el turno logró. Aquí se
19
+ * prefiere el veredicto degradado al throw: así el aviso dice «no está claro» en vez de
20
+ * «no se pudo consultar», que es más honesto sobre lo que le pasa a quien lee.
21
+ */
22
+ export declare function crearJuezDelTurno(modelos: ModelosPort): (caso: {
23
+ objetivo: string;
24
+ respuesta: string;
25
+ hechos: HechosDelTurno;
26
+ }) => Promise<VeredictoDelTurno>;
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Decide si un trozo de `messages` se pinta, y si abre una línea nueva.
3
+ *
4
+ * Dos cosas distintas que el modo `messages` mezcla:
5
+ * - los TROZOS del LLM, que comparten el `id` del run;
6
+ * - los mensajes ENTEROS que un nodo añade al estado, con id propio.
7
+ *
8
+ * Un id ya visto y completo es una reemisión: se descarta. Un id distinto del que está
9
+ * abierto es un mensaje nuevo, y quien pinta tiene que cerrar la línea anterior.
10
+ */
11
+ export interface Decision {
12
+ pintar: boolean;
13
+ /** Cierra la línea abierta antes de pintar: es otro mensaje, no un trozo más. */
14
+ cierraLinea: boolean;
15
+ }
16
+ export declare class Mensajes {
17
+ private abierto;
18
+ private readonly cerrados;
19
+ /** `texto` vacío o `undefined` no pinta: Gemini manda trozos finales sin texto. */
20
+ trozo(id: string | undefined, texto: string | undefined): Decision;
21
+ /** Fin del turno: lo abierto se da por cerrado. */
22
+ fin(): void;
23
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * De la forma cruda del stream de langgraph a una sola forma.
3
+ *
4
+ * La forma depende de `subgraphs` (medido contra langgraph 1.4.8, ver
5
+ * `formaDelChunk.test.ts`), y el fallo de leerla mal es MUDO: no lanza, simplemente deja
6
+ * de casar y no se pinta nada. Por eso se normaliza aquí y nadie más arriba ve la
7
+ * diferencia — activar o desactivar la bandera deja de ser un cambio con radio.
8
+ */
9
+ export interface ChunkNormalizado {
10
+ /** Namespace del subgrafo. Vacío = el grafo padre. */
11
+ ns: string[];
12
+ modo: string;
13
+ dato: unknown;
14
+ }
15
+ export declare function normalizar(chunk: unknown): ChunkNormalizado | null;
@@ -0,0 +1,196 @@
1
+ import { type ParametrosSeguros } from "./resumenDeTool.js";
2
+ import type { DomainEvent, PendienteDeAprobacion } from "../../core/events.js";
3
+ /** El texto de un mensaje, venga como venga. */
4
+ export declare function textoDe(msg: unknown): string;
5
+ /**
6
+ * El RAZONAMIENTO de un mensaje, cuando el proveedor lo publica en bloques.
7
+ *
8
+ * Gemini lo manda como `{ type: "thinking", thinking: "…" }` dentro de `content`
9
+ * (`@langchain/google-genai`, `common.js`), o sea que `textoDe` —que solo mira `b.text`— lo
10
+ * dejaba fuera. Estaba bien dejarlo fuera de la RESPUESTA; lo que faltaba era tener por
11
+ * dónde enseñarlo aparte.
12
+ *
13
+ * Se aceptan las dos formas que hay sueltas por el ecosistema: el bloque `thinking` con su
14
+ * campo homónimo y el `{ text, thought: true }` que usan otros adaptadores.
15
+ */
16
+ /**
17
+ * El razonamiento que se ENSEÑA: el de `razonamientoDe` más el que un cliente compatible con
18
+ * OpenAI deja en `additional_kwargs.reasoning_content` —DeepSeek, por `@langchain/openai`—, que
19
+ * no viaja en bloques y por eso no se veía nunca.
20
+ *
21
+ * **Es solo para pintar**, y por eso es otra función y no un caso más de la de arriba: la de
22
+ * arriba también decide qué razonamiento se GUARDA en la memoria de un hilo de TrueForge
23
+ * (`modeloLangchain.ts`), y el de DeepSeek no entra ahí — su eco lo repone el `fetch`
24
+ * (`ecoDeRazonamiento.ts`), y meterlo en la foto de la sesión la engordaría para nada.
25
+ */
26
+ export declare function razonamientoVisibleDe(msg: unknown): string;
27
+ export declare function razonamientoDe(msg: unknown): string;
28
+ /**
29
+ * Los nombres de tool de un chunk de `updates`, con su detalle de la lista blanca y su ID.
30
+ *
31
+ * **El `id` viaja porque el mismo chunk trae la historia ENTERA.** Un `updates` de un subgrafo
32
+ * no llega con los mensajes nuevos: llega con los acumulados, así que sin distinguir cuáles ya
33
+ * se contaron, cada paso reemite todas las tools anteriores. Medido sobre un turno real: 286
34
+ * eventos `execute` para **10 comandos distintos**, con el primero repetido 43 veces — y eso
35
+ * se ve en la PANTALLA, en tramos repetidos, además de inflar la traza y el contador de pasos.
36
+ *
37
+ * El `id` de un `tool_call` es identidad, no parecido: dos llamadas idénticas a la misma tool
38
+ * con los mismos argumentos son dos llamadas, y colapsarlas por su contenido escondería trabajo
39
+ * de verdad. Por eso se deduplica por ahí y no por el par nombre+argumentos.
40
+ */
41
+ export declare function toolsDe(dato: unknown): Array<{
42
+ nombre: string;
43
+ detalle?: string;
44
+ parametros?: ParametrosSeguros;
45
+ id?: string;
46
+ respuesta?: string;
47
+ }>;
48
+ /**
49
+ * Lo que cada tool DEVOLVIÓ, medido en caracteres, por el id de su llamada.
50
+ *
51
+ * **Contar llamadas no dice a dónde van los tokens.** Un `read_file` y otro `read_file` son
52
+ * una linea igual en la traza y pueden ser doscientos caracteres o veinte mil: lo que se paga
53
+ * es lo que ENTRA en el contexto, no cuántas veces se pidió. Sin esto, la pregunta «¿que me
54
+ * esta costando este turno?» solo se podía contestar por eliminación.
55
+ *
56
+ * **Van los CARACTERES, nunca el contenido** —la misma regla que `core/events.ts`: el
57
+ * resultado de un `read_file` es el fichero entero y el de una tool MCP lleva el bearer—. Un
58
+ * tamaño no es contenido, y es lo único que hace falta para repartir el gasto.
59
+ *
60
+ * No se convierte a tokens: la razón caracteres/token cambia con el modelo y con lo que haya
61
+ * dentro, así que dar una cifra de tokens aquí sería inventarse una precisión que no se tiene.
62
+ */
63
+ export declare function resultadosDe(dato: unknown): Array<{
64
+ id: string;
65
+ chars: number;
66
+ }>;
67
+ /**
68
+ * ¿Este chunk lo emite el grafo PADRE, o un especialista?
69
+ *
70
+ * **Medido el 2026-08-30**, sobre un turno real con delegación. Los namespaces que
71
+ * llegan con `subgraphs: true` son exactamente tres formas:
72
+ *
73
+ * | namespace | quién | chunks |
74
+ * |----------------------------------------|---------------|-------:|
75
+ * | `["model_request:…"]` | el padre | 148 |
76
+ * | `["tools:…", "model_request:…"]` | un especialista | 745 |
77
+ * | `["tools:…", "tools:…"]` | tools de un especialista | 12 |
78
+ *
79
+ * Un especialista SIEMPRE lleva el segmento `tools:` delante, porque se le invoca con la
80
+ * tool `task`. Así que la frontera es la LONGITUD.
81
+ *
82
+ * **El fallo que esto cierra era mudo y caro.** Antes se descartaba todo `ns` no vacío,
83
+ * dando por hecho que el padre venía con `ns: []` — cierto para `updates`, FALSO para
84
+ * `messages`, que llegan con `["model_request:<uuid>"]`. Consecuencia: se descartaban
85
+ * TODOS los tokens, respuesta incluida. El turno corría entero, enseñaba sus tools,
86
+ * decía «sin cambios en el proyecto»… y no contestaba nada. Sin excepción y sin aviso.
87
+ *
88
+ * Y los números explican por qué el filtro tiene que existir: 745 chunks de especialista
89
+ * frente a 148 del padre. Emitirlos todos sería volcar el razonamiento interno de los
90
+ * especialistas encima de la respuesta.
91
+ */
92
+ export declare function esDelPadre(ns: readonly string[]): boolean;
93
+ /**
94
+ * El `origen` es EXACTO, no una inferencia, y por eso solo distingue dos.
95
+ *
96
+ * Sale de `esDelPadre`, que está medido: un especialista SIEMPRE lleva un segmento `tools:`
97
+ * delante en su namespace, porque se le invoca con la tool `task`. Lo que el namespace NO dice
98
+ * es CUÁL especialista — sus segmentos son `tools:<uuid>` y `model_request:<uuid>`, ids opacos.
99
+ *
100
+ * **Y se queda así a propósito.** Antes de esto, la única forma de repartir tools por origen era
101
+ * una heurística sobre el fichero de traza (imputarlas al siguiente registro de modelo), que se
102
+ * veía que fallaba: daba 21 tools a un especialista cuyo tope son 20. Un número que parece un
103
+ * dato y es una inferencia es peor que no tenerlo. Esto son dos cubos ciertos en vez de cinco
104
+ * dudosos, y el que hacía falta —cuánto gasta el orquestador— es uno de los dos.
105
+ */
106
+ export type OrigenDeTool = "orquestador" | "especialista";
107
+ /**
108
+ * De quién es esta tool, por el namespace del chunk.
109
+ *
110
+ * **No usa `esDelPadre`, y equivocarme con eso costó una medida falsa.** Aquel predicado es la
111
+ * LONGITUD del namespace y está medido para `messages`, donde el padre llega como
112
+ * `["model_request:<uuid>"]` — longitud 1. En `updates`, que es el modo por el que llegan los
113
+ * `tool_calls`, el padre llega con `[]` y un especialista con `["tools:<id>"]`, también
114
+ * longitud 1. Aplicar allí la regla de la longitud imputaba al orquestador TODAS las tools:
115
+ * el informe decía «orquestador 70 de 70» en un turno donde un especialista hizo 16 llamadas
116
+ * y se comió su tope.
117
+ *
118
+ * La regla buena es la que el propio comentario de `esDelPadre` ya declaraba: **un
119
+ * especialista SIEMPRE lleva un segmento `tools:` delante**, porque se le invoca con la tool
120
+ * `task`. Eso vale en los dos modos y no depende de cuántos segmentos haya.
121
+ */
122
+ export declare function origenDeTool(ns: readonly string[]): OrigenDeTool;
123
+ export type AlLlamarTool = (tool: {
124
+ nombre: string;
125
+ detalle?: string;
126
+ parametros?: ParametrosSeguros;
127
+ origen: OrigenDeTool;
128
+ /** Cuántos caracteres devolvió, si ya se sabe. Ver `alResponderTool`. */
129
+ chars?: number;
130
+ /**
131
+ * Id del MENSAJE del modelo que pidió esta tool. Dos tools con el mismo valor se
132
+ * pidieron en la MISMA respuesta, que es lo único que decide si van en paralelo.
133
+ *
134
+ * Existe porque sin él la traza no podía contestarlo y había que adivinarlo. Medido
135
+ * sobre un turno real de 69 tools: agrupar por el reloj exacto daba 18 en rafaga (el
136
+ * milisegundo PARTE una rafaga) y agrupar por los contadores del tracker daba 38, con
137
+ * dos grupos de 1.000 ms de span, o sea rezagados FUNDIDOS en una respuesta ajena. Dos
138
+ * metodos, dos respuestas, y ninguno comprobable. Además `origen` solo tiene dos
139
+ * valores, así que dos especialistas a la vez son indistinguibles: el id del mensaje
140
+ * tambien los separa.
141
+ */
142
+ respuesta?: string;
143
+ }) => void;
144
+ /**
145
+ * Lo que `aEventos` tiene que recordar ENTRE RONDAS, en un solo sitio.
146
+ *
147
+ * **Las tres cosas de aquí dentro vivían sueltas dentro de `aEventos`, y las tres estaban mal
148
+ * por la misma razón**: `turnoReal.ts` la llama DENTRO del bucle de rondas y el stream
149
+ * reentrega la historia acumulada al reanudar, así que con estado local cada ronda empezaba en
150
+ * blanco. Medido dos veces: primero las tools se recontaban, y al arreglar solo aquello se
151
+ * quedaron mal los resultados —62 medidos para 57 llamadas, con 98.439 caracteres sin
152
+ * atribuir, el 43 % del total—.
153
+ *
154
+ * Van en un objeto y no en tres parámetros porque la razón es UNA —el alcance es el turno— y
155
+ * porque tres opcionales sueltos son tres sitios donde olvidarse de uno, y ese olvido es mudo.
156
+ */
157
+ export interface MemoriaDelTurno {
158
+ /** Los `tool_call` ya contados, por id. */
159
+ vistas: Set<string>;
160
+ /** Los resultados ya medidos, por el id de su llamada. */
161
+ resultados: Set<string>;
162
+ /** De qué tool era cada llamada, para poder repartir el peso de su resultado. */
163
+ deQuien: Map<string, {
164
+ nombre: string;
165
+ detalle?: string;
166
+ }>;
167
+ }
168
+ export declare function crearMemoriaDelTurno(): MemoriaDelTurno;
169
+ /**
170
+ * Lo que una tool devolvió: CUÁNTO pesa, nunca qué era.
171
+ *
172
+ * Lleva `nombre` y `detalle` porque un peso suelto no se puede repartir: el id de una llamada
173
+ * no significa nada en un informe. Salen del `tool_call`, que se procesa ANTES que los
174
+ * resultados del mismo chunk — **la historia acumulada reentrega los dos JUNTOS**, así que
175
+ * mirar los resultados primero dejaba sin nombre a todo lo de las rondas siguientes.
176
+ */
177
+ export type AlResponderTool = (r: {
178
+ id: string;
179
+ chars: number;
180
+ nombre?: string;
181
+ detalle?: string;
182
+ }) => void;
183
+ /**
184
+ * Convierte el stream del grafo en `DomainEvent`.
185
+ *
186
+ * **Se lee con `subgraphs: true`**, porque sin él lo que hacen los especialistas —que son
187
+ * grafos compilados invocados dentro de un nodo— no llega al padre, y el fallo es MUDO. El
188
+ * precio, medido: el chunk pasa de `[modo, dato]` a `[namespace, modo, dato]`, y de eso se
189
+ * encarga `normalizar`.
190
+ *
191
+ * Los tokens que se emiten son SOLO los del grafo padre. Los de un
192
+ * especialista son su razonamiento interno, no la respuesta: enseñarlos convierte la
193
+ * consola en un volcado. Su trabajo se cuenta por `tool`, que es lo que el usuario
194
+ * necesita ver mientras espera.
195
+ */
196
+ export declare function aEventos(stream: AsyncIterable<unknown>, pendientes?: () => Promise<PendienteDeAprobacion[]>, alLlamarTool?: AlLlamarTool, memoriaDelTurno?: MemoriaDelTurno, alResponderTool?: AlResponderTool): AsyncIterable<DomainEvent>;
@@ -0,0 +1,39 @@
1
+ export declare const NOMBRE_REGISTRO_DE_FALLOS = "fallos.jsonl";
2
+ /**
3
+ * Cómo se NOMBRA el registro ante quien acaba de ver el error: relativo a la raíz del
4
+ * proyecto. La ruta absoluta lleva el nombre de la cuenta del sistema y viajaba por el cable
5
+ * dentro del aviso («Queda apuntado en /Users/…»), y ninguna ruta de la máquina viaja por
6
+ * ahí; además era la línea que, sin partir, sacaba la barra de scroll horizontal del chat.
7
+ */
8
+ export declare const RUTA_VISIBLE_DE_FALLOS = ".xonecode/fallos.jsonl";
9
+ /** Dónde queda, para poder decírselo a quien acaba de ver el error. */
10
+ export declare function rutaDeFallos(raiz: string): string;
11
+ export interface RegistroDeFallos {
12
+ /** Apunta el fallo y devuelve el texto pegable, o `undefined` si no se pudo escribir. */
13
+ anotar(fallo: {
14
+ error: unknown;
15
+ peticion?: string;
16
+ modelos?: Record<string, string>;
17
+ pasos?: readonly string[];
18
+ }): {
19
+ ruta: string;
20
+ legible: string;
21
+ } | undefined;
22
+ }
23
+ /**
24
+ * El registro de fallos de un proyecto. **Siempre encendido, y ésa es la decisión.**
25
+ *
26
+ * La traza de tools es opt-in (`XONECODE_TRACE_TOOLS`) y tiene sentido: se enciende cuando
27
+ * vas a MEDIR. Esto es lo contrario — un fallo no se planea, y el problema de una bandera
28
+ * es exactamente que cuando pasó no estaba puesta. Toda la investigación de hoy se hizo
29
+ * sobre lo que se pudo pegar del chat, con el error truncado y sin saber ni el modelo.
30
+ *
31
+ * Se puede permitir estar siempre porque solo escribe cuando algo revienta y lo que
32
+ * escribe cabe en una pantalla: ni prompts, ni argumentos, ni contenido de ficheros (ver
33
+ * `core/fallos.ts`). Un turno normal no toca este fichero.
34
+ *
35
+ * Síncrono y con el fallo tragado, como la traza: anotar un error no puede provocar otro,
36
+ * y un `appendFileSync` de trescientos bytes que se pierde si el proceso muere sería justo
37
+ * el caso en el que hacía falta.
38
+ */
39
+ export declare function crearRegistroDeFallos(raiz: string, chat?: string | (() => string | undefined)): RegistroDeFallos;