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
@@ -0,0 +1,235 @@
1
+ import { ChatOpenAI } from "@langchain/openai";
2
+ import { ChatAnthropic } from "@langchain/anthropic";
3
+ import { ChatOllama } from "@langchain/ollama";
4
+ import { COMPATIBLES_OPENAI, compatibleConOpenAi, esProveedorPersonalizado, parsear, resolver, pideThinkingAdaptativo, aceptaThinkingAdaptativo, } from "../../core/modelos.js";
5
+ import { topeDeSalida } from "../../core/contextos.js";
6
+ import { esfuerzoAplicable } from "../../core/esfuerzo.js";
7
+ import { baseUrlDeOllama, baseUrlDeOllamaCloud } from "./catalogoModelos.js";
8
+ import { ChatGoogleGenerativeAICompatible } from "./gemini.js";
9
+ /**
10
+ * Construye el modelo de cada papel. NO lleva la marca de doble: es real.
11
+ *
12
+ * Los clientes se construyen PEREZOSAMENTE, al pedir el papel: `describe` solo llama a
13
+ * `descripcion()`, y construir cuatro clientes para imprimir un texto obligaría a tener
14
+ * las claves puestas para poder mirar la configuración — justo lo que este comando evita.
15
+ */
16
+ export class Modelos {
17
+ eleccion;
18
+ /**
19
+ * Los proveedores personalizados, y es una FUNCIÓN y no una lista a propósito.
20
+ *
21
+ * `fuentes` se lee UNA vez, al arrancar el proceso, así que una lista capturada aquí
22
+ * dejaba muerto el flujo que el usuario hace primero: dar de alta un proveedor en
23
+ * Ajustes, ponerle la clave, elegir su modelo y hablar — y el turno reventaba con «no
24
+ * está dado de alta; añádelo en Ajustes», que es justo lo que acababa de hacer. Quien
25
+ * construye pasa `proveedoresPersonalizados` (`agent/config/configEnDisco.ts`), que relee el
26
+ * config global; sin nada, se cae a lo que trajera `fuentes`, que es lo que había.
27
+ *
28
+ * Del `config.json` GLOBAL y de ningún otro: la regla la impone `core/config.ts` al
29
+ * validar, y aquí no se vuelve a mirar el del proyecto ni por descuido.
30
+ */
31
+ personalizados;
32
+ /**
33
+ * Lo que el servidor ya sabe de un modelo porque se lo PREGUNTÓ, y entra por aquí en vez
34
+ * de consultarse dentro.
35
+ *
36
+ * Hoy solo Ollama: sus capacidades se piden con `POST /api/show`, que es asíncrono y toca
37
+ * la red, mientras que construir un modelo es síncrono —`paraPapel` devuelve el cliente,
38
+ * no una promesa— y lo llama el grafo en mitad de un turno. Son las dos cadencias que ya
39
+ * declara `contextos.ts` sobre el `max_input_tokens` del catálogo vivo, y la salida es la
40
+ * misma que con los proveedores personalizados: una FUNCIÓN que quien construye rellena
41
+ * con lo que ya midió, en vez de una consulta escondida aquí dentro.
42
+ *
43
+ * **Ausente es la dirección segura**: sin capacidades, `nivelesDeEsfuerzo` no afirma nada
44
+ * de un modelo de Ollama y el parámetro no se manda. Eso importa porque pedirle pensar a
45
+ * un modelo que no piensa NO es una respuesta peor — medido, `ministral-3:3b` contesta
46
+ * `"ministral-3:3b" does not support thinking` y el turno se cae.
47
+ */
48
+ capacidades;
49
+ /**
50
+ * El esfuerzo de la SESIÓN, que es el que vale cuando quien pide un modelo no dice otro.
51
+ *
52
+ * Va en el constructor y no en cada llamada porque así los diez llamadores de
53
+ * `paraPapel` —el turno, el juez, el aumentador, el juez visual— no cambian ni una línea:
54
+ * la sesión ya reconstruye `Modelos` cuando el usuario toca algo (es como funciona
55
+ * `/modelo`), así que el sitio donde esto entra ya existe.
56
+ *
57
+ * Un subagente que fije el SUYO gana, porque `paraModelo` recibe el nivel explícito.
58
+ */
59
+ esfuerzoDeLaSesion;
60
+ constructor(fuentes = {}, personalizados, capacidades, esfuerzo) {
61
+ this.eleccion = resolver(fuentes);
62
+ this.personalizados = personalizados ?? (() => fuentes.global?.proveedores ?? []);
63
+ this.capacidades = capacidades ?? (() => undefined);
64
+ this.esfuerzoDeLaSesion = esfuerzo;
65
+ }
66
+ paraPapel(papel, esfuerzo) {
67
+ return construirModelo(this.eleccion[papel], this.personalizados(), esfuerzo ?? this.esfuerzoDeLaSesion, this.capacidades);
68
+ }
69
+ /**
70
+ * Un modelo concreto por su «proveedor/modelo». `parsear` es la MISMA función que valida
71
+ * `--modelo` y `/modelo`, no una copia: un id mal escrito en el `.md` de un agente tiene
72
+ * que fallar igual y con el mismo mensaje que uno mal escrito en la línea de comandos.
73
+ */
74
+ paraModelo(id, esfuerzo) {
75
+ return construirModelo(parsear(id), this.personalizados(), esfuerzo ?? this.esfuerzoDeLaSesion, this.capacidades);
76
+ }
77
+ descripcion() {
78
+ const salida = {};
79
+ for (const [papel, e] of Object.entries(this.eleccion)) {
80
+ salida[papel] = `${e.proveedor}/${e.modelo} (${e.origen})`;
81
+ }
82
+ return salida;
83
+ }
84
+ }
85
+ /**
86
+ * El cliente de OpenAI apuntado a otro host: NVIDIA, Groq y xAI publican la misma API.
87
+ *
88
+ * La clave se exige AQUÍ y no se deja en `undefined`, que es lo que hace el caso de
89
+ * `openai`. No es simetría rota: `ChatOpenAI` sin `apiKey` se la busca él en
90
+ * `OPENAI_API_KEY`, así que un `NVIDIA_API_KEY` sin poner haría que la clave de OpenAI
91
+ * del usuario viajara a `integrate.api.nvidia.com` con la primera petición. El mensaje es
92
+ * el mismo que da el catálogo cuando falta la credencial, porque es el mismo problema.
93
+ */
94
+ /**
95
+ * **`reasoningEffort` NO sirve aquí, y falla EN SILENCIO.** Medido en `@langchain/openai`
96
+ * 1.5.5: `_getReasoningParams` empieza con `if (!isReasoningModel(this.model)) return;`, y
97
+ * ese predicado (`utils/misc.js`) solo reconoce los nombres de OpenAI — `/^o\d/` y
98
+ * `gpt-5*`. Un `deepseek-flash`, un `openai/gpt-oss-20b` o un `nvidia/nemotron-3-…` no
99
+ * casan, así que el campo se descarta antes de componer la petición y el payload sale sin
100
+ * él: ni error, ni aviso, ni diferencia visible — el mismo patrón que el `max_tokens` de
101
+ * 4096 de Anthropic, y descubierto igual, preguntándole al cliente por sus parámetros.
102
+ *
103
+ * `modelKwargs` es la puerta que sí llega: el cliente lo vuelca tal cual en el cuerpo.
104
+ * Comprobado en la prueba de costura, que es lo único que puede sostener esta afirmación.
105
+ */
106
+ function construirCompatibleOpenAi(proveedor, modelo, { baseUrl, variable }, esfuerzo) {
107
+ const apiKey = process.env[variable];
108
+ if (apiKey === undefined || apiKey.trim() === "") {
109
+ throw new Error(`falta la credencial para ${proveedor} (${variable}); usa /provider ${proveedor}`);
110
+ }
111
+ return new ChatOpenAI({
112
+ model: modelo, apiKey, configuration: { baseURL: baseUrl },
113
+ ...(esfuerzo === undefined ? {} : { modelKwargs: { reasoning_effort: esfuerzo } }),
114
+ });
115
+ }
116
+ /** El cliente de un `{proveedor, modelo}`, venga de un papel o de la elección de un agente. */
117
+ function construirModelo({ proveedor, modelo }, personalizados = [], esfuerzoPedido, capacidades = () => undefined) {
118
+ /**
119
+ * **El nivel se criba AQUÍ y contra ESTE modelo, no donde se eligió.**
120
+ *
121
+ * Elegir y aplicar están separados en el tiempo: el esfuerzo se fija una vez y el
122
+ * modelo se cambia después, así que un `xhigh` puesto con Opus 5 sigue puesto cuando
123
+ * alguien se pasa a Gemini —que no lo tiene— o a un Ollama que no piensa. Mandarlo
124
+ * entonces no da una respuesta peor: da un 400 en Gemini y un
125
+ * `does not support thinking` en Ollama.
126
+ *
127
+ * `esfuerzoAplicable` devuelve `undefined` en ese caso y cada rama omite el parámetro,
128
+ * que es exactamente lo que este harness hacía antes de que esto existiera. No se
129
+ * sustituye por el nivel más parecido: bajar un `xhigh` a `high` por nuestra cuenta
130
+ * sería decidir en nombre de alguien, y aquí eso se paga en tokens que no pidió.
131
+ */
132
+ const esfuerzo = esfuerzoAplicable(esfuerzoPedido, proveedor, modelo, capacidades(proveedor, modelo));
133
+ // Un personalizado se resuelve ANTES del switch, contra el registro: sin él no hay URL
134
+ // base, y eso es un alta que falta y no un proveedor roto. El switch de abajo sigue
135
+ // siendo exhaustivo sobre los de serie.
136
+ if (esProveedorPersonalizado(proveedor)) {
137
+ const fila = compatibleConOpenAi(proveedor, personalizados);
138
+ if (fila === undefined) {
139
+ throw new Error(`el proveedor personalizado «${proveedor}» no está dado de alta; añádelo en Ajustes → Proveedores`);
140
+ }
141
+ return construirCompatibleOpenAi(proveedor, modelo, fila, esfuerzo);
142
+ }
143
+ switch (proveedor) {
144
+ case "nvidia":
145
+ case "groq":
146
+ case "xai":
147
+ case "deepseek":
148
+ // Enumerados uno a uno, y no un `default`, para que el switch siga siendo
149
+ // exhaustivo: el día que se añada un proveedor, esto tiene que dar un error de
150
+ // compilación y no construir un cliente equivocado en silencio.
151
+ return construirCompatibleOpenAi(proveedor, modelo, COMPATIBLES_OPENAI[proveedor], esfuerzo);
152
+ case "openai":
153
+ return new ChatOpenAI({
154
+ model: modelo,
155
+ apiKey: process.env.OPENAI_API_KEY,
156
+ // Sin fila en la tabla, `esfuerzo` siempre llega `undefined` y esto no manda nada:
157
+ // el cableado está puesto para el día que alguien MIDA qué modelos de OpenAI lo
158
+ // aceptan, que es una fila de datos y no un cambio aquí. Va por `modelKwargs`
159
+ // como los compatibles —y no por `reasoningEffort`— para que sea EL MISMO camino
160
+ // en los cinco: el filtro `isReasoningModel` reconoce los ids de OpenAI, pero un
161
+ // segundo camino sería un segundo sitio donde esto puede dejar de llegar.
162
+ ...(esfuerzo === undefined ? {} : { modelKwargs: { reasoning_effort: esfuerzo } }),
163
+ });
164
+ case "anthropic":
165
+ // El tope de salida se fija A MANO y el razonamiento se pide cuando hace falta;
166
+ // las dos decisiones son datos de `core/` (`topeDeSalida`,
167
+ // `pideThinkingAdaptativo`) y están ahí documentadas con lo que se midió.
168
+ //
169
+ // En corto: el `max_tokens` por omisión de la dependencia sale de una tabla por
170
+ // prefijo y un id que no conoce cae en 4096 SIN DECIRLO —medido con
171
+ // `claude-sonnet-5`—, que en un harness que escribe ficheros corta a media
172
+ // escritura; y omitir `thinking` corre sin pensar en la generación 4.6-4.8,
173
+ // mientras que pedirlo a Haiku o a lo anterior a 4.6 sería un 400.
174
+ return new ChatAnthropic({
175
+ model: modelo,
176
+ apiKey: process.env.ANTHROPIC_API_KEY,
177
+ ...(topeDeSalida("anthropic", modelo) === undefined
178
+ ? {}
179
+ : { maxTokens: topeDeSalida("anthropic", modelo) }),
180
+ // El razonamiento se pide cuando hace falta (la generación 4.6-4.8, que sin
181
+ // pedirlo corre sin pensar) Y TAMBIÉN cuando se manda esfuerzo: las dos cosas
182
+ // están acopladas, y `claude-opus-5` con `effort:"max"` y sin `thinking` explícito
183
+ // es una petición que el propio cliente se niega a componer. Medido contra su
184
+ // validador, que corre en local y por eso lo caza la prueba de costura.
185
+ ...(pideThinkingAdaptativo("anthropic", modelo)
186
+ || (esfuerzo !== undefined && aceptaThinkingAdaptativo("anthropic", modelo))
187
+ ? { thinking: { type: "adaptive" } }
188
+ : {}),
189
+ // El esfuerzo va DENTRO de `outputConfig`, no suelto, y acompaña al `thinking`:
190
+ // omitirlo ya es `high` en esta casa, así que esto solo viaja cuando se pide otra
191
+ // cosa. La frontera de qué modelos lo aceptan es hermana de la del `thinking`
192
+ // —Haiku 4.5 y lo anterior dan error con los dos— y vive en `core/esfuerzo.ts`.
193
+ ...(esfuerzo === undefined ? {} : { outputConfig: { effort: esfuerzo } }),
194
+ });
195
+ case "ollama":
196
+ return new ChatOllama({
197
+ model: modelo,
198
+ baseUrl: baseUrlDeOllama(),
199
+ ...(esfuerzo === undefined ? {} : { think: esfuerzo }),
200
+ });
201
+ case "ollama-cloud":
202
+ return new ChatOllama({
203
+ model: modelo,
204
+ baseUrl: baseUrlDeOllamaCloud(),
205
+ headers: { authorization: `Bearer ${process.env.OLLAMA_API_KEY ?? ""}` },
206
+ ...(esfuerzo === undefined ? {} : { think: esfuerzo }),
207
+ });
208
+ case "gemini":
209
+ return new ChatGoogleGenerativeAICompatible({
210
+ model: modelo,
211
+ apiKey: process.env.GOOGLE_API_KEY,
212
+ // Gemini no lo llama esfuerzo: lo suyo es `thinkingConfig.thinkingLevel` y en
213
+ // VERSALES. La traducción se hace aquí y no en `core/` porque es la forma del
214
+ // cliente, igual que `outputConfig` es la de Anthropic — la tabla dice QUÉ
215
+ // niveles hay, y cada rama sabe cómo se escriben los suyos.
216
+ ...(esfuerzo === undefined
217
+ ? {}
218
+ : { thinkingConfig: { thinkingLevel: esfuerzo.toUpperCase() } }),
219
+ });
220
+ }
221
+ /**
222
+ * **La guarda que hacía que el comentario de arriba fuera verdad.**
223
+ *
224
+ * Ese comentario promete que añadir un proveedor da un error de compilación aquí, y no
225
+ * lo daba: sin esto el `switch` sin salida devuelve `undefined`, que encaja en el
226
+ * `unknown` del retorno. Se vio al añadir `deepseek`: compilaba limpio y el proveedor
227
+ * nuevo se habría colado devolviendo un modelo `undefined`, para reventar más adelante
228
+ * lejos de la causa. Con el `never`, el caso que falte no compila — que es lo que el
229
+ * comentario decía y no cumplía.
230
+ */
231
+ return ((nunca) => {
232
+ throw new Error(`proveedor sin construir: ${String(nunca)}`);
233
+ })(proveedor);
234
+ }
235
+ //# sourceMappingURL=modelos.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelos.js","sourceRoot":"","sources":["../../../src/agent/config/modelos.ts"],"names":[],"mappings":"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"}
@@ -4,7 +4,7 @@
4
4
  * Un subagente corre de cuatro formas —dentro de xonecode, en Claude Code, en Codex o en
5
5
  * OpenCode— y el modelo se elige distinto en cada una. Este módulo contesta la pregunta «¿entre
6
6
  * qué puedo elegir?» para las tres externas; la del motor `modelo` ya la contesta el catálogo de
7
- * proveedores de siempre (`agent/catalogoModelos.ts`), y duplicarla aquí sería una segunda
7
+ * proveedores de siempre (`agent/config/catalogoModelos.ts`), y duplicarla aquí sería una segunda
8
8
  * lista que diverge.
9
9
  *
10
10
  * **Ninguna de las listas está inventada, y esa es la regla del fichero.** La de Claude Code
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelosDeMotor.js","sourceRoot":"","sources":["../../../src/agent/config/modelosDeMotor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * La mudanza de una vez de las copias locales que siguen en el reparto VIEJO
3
+ * (`<base>/<entorno>/workspace/<proyecto>`) al de ahora (`<workspace>/<entorno>/<proyecto>`).
4
+ *
5
+ * **No es cosmética, y por eso se hace sola.** `dentroDelWorkspace` es lo que decide si el
6
+ * harness puede commitear al cerrar cada turno, y compara la raíz contra el workspace: con
7
+ * el reparto nuevo, una copia que se quedara en el sitio viejo dejaría de estar dentro y los
8
+ * commits por turno se pararían EN SILENCIO — que es exactamente el fallo mudo que este repo
9
+ * persigue en todas partes. Dejarlas donde están no era una opción; dejarlas y avisar,
10
+ * tampoco, porque el aviso saldría en cada arranque para siempre.
11
+ *
12
+ * La decisión de QUÉ se muda es pura y vive en `core/mudanzaDeWorkspace.ts`. Aquí solo está
13
+ * lo que toca disco: mover, reescribir los dos almacenes con raíces absolutas y CONTARLO.
14
+ */
15
+ import { existsSync, mkdirSync, readdirSync, renameSync, rmdirSync, unlinkSync } from "node:fs";
16
+ import { homedir } from "node:os";
17
+ import { dirname, join } from "node:path";
18
+ import { mudanzasPendientes, rutaMudada } from "../../core/mudanzaDeWorkspace.js";
19
+ import { remapearSinAprobacion } from "./settingsEnDisco.js";
20
+ import { remapearRaicesDeTareas } from "../tareas/tareasEnDisco.js";
21
+ import { BASURA_DEL_SO } from "../sesiones/gitSync.js";
22
+ /** Las CARPETAS que cuelgan de una ruta. Un fichero suelto no es un proyecto, y un
23
+ * `.DS_Store` es un nombre de segmento tan válido como cualquier otro. */
24
+ function carpetasDe(ruta) {
25
+ try {
26
+ return readdirSync(ruta, { withFileTypes: true })
27
+ .filter((e) => e.isDirectory())
28
+ .map((e) => e.name);
29
+ }
30
+ catch {
31
+ return [];
32
+ }
33
+ }
34
+ /**
35
+ * Retira una carpeta del reparto viejo que ya no pinta nada — y solo si NO queda nada del
36
+ * usuario dentro.
37
+ *
38
+ * `rmdir` no vacía carpetas, así que él solo ya es la garantía. Lo único que se borra antes
39
+ * es la BASURA DEL SO, y de la lista CERRADA que `gitSync.ts` ya mantiene para lo mismo: sin
40
+ * esto, un `.DS_Store` que Finder dejó al mirar la carpeta bastaba para que el husco vacío
41
+ * se quedara en `~/.xonecode` para siempre, que es justo lo que esta mudanza venía a quitar.
42
+ * Medido sobre un caso real: los dos husos tenían uno.
43
+ */
44
+ function retirarSiSobra(carpeta) {
45
+ try {
46
+ const dentro = readdirSync(carpeta);
47
+ if (dentro.length > 0 && dentro.every((n) => BASURA_DEL_SO.includes(n))) {
48
+ for (const basura of dentro)
49
+ unlinkSync(join(carpeta, basura));
50
+ }
51
+ rmdirSync(carpeta);
52
+ }
53
+ catch {
54
+ // No estaba vacía, o no estaba, o no se pudo tocar. En los tres casos no hay nada que
55
+ // hacer: la carpeta vieja de más es un adorno, no un fallo que contar.
56
+ }
57
+ }
58
+ export function mudarWorkspaceLegado(opciones) {
59
+ const mover = opciones.mover ?? renameSync;
60
+ const { mudanzas, chocadas } = mudanzasPendientes({
61
+ legado: opciones.legado,
62
+ workspace: opciones.workspace,
63
+ entornos: opciones.entornos,
64
+ existe: existsSync,
65
+ listar: carpetasDe,
66
+ });
67
+ if (mudanzas.length === 0 && chocadas.length === 0)
68
+ return { mudadas: 0, chocadas: 0 };
69
+ // Solo las que SE MOVIERON de verdad reescriben una ruta guardada: apuntar el índice a un
70
+ // sitio donde la carpeta no llegó a estar es peor que no tocarlo.
71
+ const hechas = [];
72
+ for (const mudanza of mudanzas) {
73
+ try {
74
+ mkdirSync(dirname(mudanza.hacia), { recursive: true });
75
+ mover(mudanza.desde, mudanza.hacia);
76
+ hechas.push(mudanza);
77
+ }
78
+ catch (error) {
79
+ const motivo = error instanceof Error ? error.message : String(error);
80
+ opciones.escribir(`no se pudo mudar «${mudanza.proyecto}» (${mudanza.entorno}): ${motivo}\n`);
81
+ }
82
+ }
83
+ if (hechas.length > 0) {
84
+ const traducir = (raiz) => rutaMudada(raiz, hechas);
85
+ // Un fallo de cualquiera de los dos no puede tumbar el arranque de la consola: las
86
+ // copias ya están mudadas, y lo que queda es un ajuste que se vuelve a poner a mano.
87
+ for (const [que, remapear] of [
88
+ // Las dos toman su raíz por parámetros que NO significan lo mismo: `casa` es el HOME
89
+ // (`rutaSettings` le añade `.xonecode`) y la base de las tareas es ya la carpeta
90
+ // `.xonecode`. Se traduce aquí, a la vista, en vez de fiarse de que los dos nombres
91
+ // que se parecen quieran decir lo mismo.
92
+ ["la cola de tareas", () => remapearRaicesDeTareas(join(opciones.casa ?? homedir(), ".xonecode"), traducir)],
93
+ ["las autorizaciones sin aprobación", () => remapearSinAprobacion(opciones.casa, traducir)],
94
+ ]) {
95
+ try {
96
+ remapear();
97
+ }
98
+ catch (error) {
99
+ const motivo = error instanceof Error ? error.message : String(error);
100
+ opciones.escribir(`las copias se mudaron, pero no se pudo actualizar ${que}: ${motivo}\n`);
101
+ }
102
+ }
103
+ // La carpeta vieja se retira SOLO si quedó vacía, y eso lo garantiza `rmdir` por
104
+ // construcción: nunca vacía nada. Un `notas.txt` del usuario ahí dentro la deja en pie,
105
+ // que es la respuesta correcta.
106
+ for (const entorno of new Set(hechas.map((m) => m.entorno))) {
107
+ for (const carpeta of [join(opciones.legado, entorno, "workspace"), join(opciones.legado, entorno)]) {
108
+ retirarSiSobra(carpeta);
109
+ }
110
+ }
111
+ opciones.escribir(`${hechas.length} ${hechas.length === 1 ? "copia local mudada" : "copias locales mudadas"} al workspace: ` +
112
+ `${hechas.map((m) => `${m.proyecto} (${m.entorno})`).join(", ")}\n`);
113
+ }
114
+ for (const choque of chocadas) {
115
+ // Callarlo dejaría dos copias del mismo proyecto y a nadie sabiendo cuál mira la consola.
116
+ opciones.escribir(`«${choque.proyecto}» (${choque.entorno}) NO se mudó: ya hay una copia en el workspace. ` +
117
+ `La vieja sigue donde estaba y no se ha tocado.\n`);
118
+ }
119
+ return { mudadas: hechas.length, chocadas: chocadas.length };
120
+ }
121
+ //# sourceMappingURL=mudanzaEnDisco.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mudanzaEnDisco.js","sourceRoot":"","sources":["../../../src/agent/config/mudanzaEnDisco.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  * suelto en el mensaje de alta, no dentro de nada que la sesión guarde.
8
8
  *
9
9
  * Orden de preferencia: `git config user.name` (el efectivo — repo si lo hay, si no
10
- * global —, igual que `agent/gitSync.ts#valorDeConfig` resuelve la config de sincronía)
10
+ * global —, igual que `agent/sesiones/gitSync.ts#valorDeConfig` resuelve la config de sincronía)
11
11
  * y, si no hay, el usuario del sistema (`os.userInfo()`). Sin ninguno de los dos,
12
12
  * `undefined` — nunca un nombre inventado como «usuario»: un saludo sin nombre es
13
13
  * neutro, uno con un nombre que no es el tuyo parece un error.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persona.js","sourceRoot":"","sources":["../../../src/agent/config/persona.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEnC,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE;YACnE,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC;SACpC,CAAC,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,MAAM,KAAK,EAAE;YAAE,OAAO,MAAM,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6EAA6E;QAC7E,kFAAkF;QAClF,4BAA4B;IAC9B,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,QAAQ,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC1C,OAAO,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Abrir el selector de carpeta NATIVO de esta máquina. La regla de QUÉ comando y cómo se lee
3
+ * su respuesta es pura y vive en `core/selectorDeCarpeta.ts`; aquí solo está lanzarlo.
4
+ */
5
+ import { execFile } from "node:child_process";
6
+ import { carpetaDeLaSalida, comandoDelSelector, TOPE_DEL_SELECTOR_MS, } from "../../core/selectorDeCarpeta.js";
7
+ /** ¿Hay selector en este sistema? Es lo que decide si se OFRECE el botón: un botón que no
8
+ * hace nada es peor que no tenerlo, y el campo de texto ya resuelve el caso. */
9
+ export function haySelectorDeCarpeta(plataforma = process.platform) {
10
+ return comandoDelSelector(plataforma) !== undefined;
11
+ }
12
+ /**
13
+ * La carpeta que la persona elija, o AUSENTE.
14
+ *
15
+ * **Ausente lo cubre todo lo que no es una elección**: cancelar, que el comando no esté, que
16
+ * falle, o que se agote el tope. No se distinguen a propósito — `osascript` sale con código 1
17
+ * tanto si cierras el diálogo como si revienta, así que afirmar cuál de las dos fue sería
18
+ * inventarlo. Lo que la pantalla necesita saber es si hay carpeta nueva, y eso sí se sabe.
19
+ *
20
+ * **Nunca LANZA.** Esto cuelga de un mensaje del cable, y una excepción aquí subiría por el
21
+ * manejador de la petición.
22
+ */
23
+ export async function elegirCarpetaEnMaquina(opciones) {
24
+ const comando = comandoDelSelector(opciones?.plataforma ?? process.platform, opciones?.desde);
25
+ if (comando === undefined)
26
+ return undefined;
27
+ const lanzar = opciones?.lanzar ?? lanzarDeVerdad;
28
+ try {
29
+ return carpetaDeLaSalida(await lanzar(comando));
30
+ }
31
+ catch {
32
+ // Cancelar sale por aquí (código 1), igual que un fallo de verdad. Ver arriba.
33
+ return undefined;
34
+ }
35
+ }
36
+ function lanzarDeVerdad(comando) {
37
+ return new Promise((resolver, rechazar) => {
38
+ execFile(comando.programa, [...comando.argumentos],
39
+ // `timeout` mata el proceso al vencer: un diálogo que nadie cierra no puede dejar un
40
+ // proceso vivo para siempre. `windowsHide` no pinta en los dos sistemas que esto
41
+ // soporta, pero tampoco estorba.
42
+ { timeout: TOPE_DEL_SELECTOR_MS, windowsHide: true }, (error, salida) => (error === null ? resolver(salida) : rechazar(error)));
43
+ });
44
+ }
45
+ //# sourceMappingURL=selectorEnMaquina.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectorEnMaquina.js","sourceRoot":"","sources":["../../../src/agent/config/selectorEnMaquina.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,iCAAiC,CAAC;AAEzC;iFACiF;AACjF,MAAM,UAAU,oBAAoB,CAAC,aAAqB,OAAO,CAAC,QAAQ;IACxE,OAAO,kBAAkB,CAAC,UAAU,CAAC,KAAK,SAAS,CAAC;AACtD,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,QAI5C;IACC,MAAM,OAAO,GAAG,kBAAkB,CAAC,QAAQ,EAAE,UAAU,IAAI,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IAC9F,IAAI,OAAO,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC5C,MAAM,MAAM,GAAG,QAAQ,EAAE,MAAM,IAAI,cAAc,CAAC;IAClD,IAAI,CAAC;QACH,OAAO,iBAAiB,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;IAClD,CAAC;IAAC,MAAM,CAAC;QACP,+EAA+E;QAC/E,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAA0B;IAChD,OAAO,IAAI,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;QACxC,QAAQ,CACN,OAAO,CAAC,QAAQ,EAChB,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;QACvB,qFAAqF;QACrF,iFAAiF;QACjF,iCAAiC;QACjC,EAAE,OAAO,EAAE,oBAAoB,EAAE,WAAW,EAAE,IAAI,EAAE,EACpD,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CACzE,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -5,7 +5,7 @@
5
5
  * así que la base de la fusión es el objeto CRUDO tal cual (no el resultado de
6
6
  * `validarSettings`, que descarta en silencio entradas raras) y ante un JSON roto se
7
7
  * PARA sin escribir, en vez de recuperar el fichero por su cuenta. La mecánica de
8
- * escritura —temporal + `renameSync`— es la de `agent/cloudstudioMcp.ts#guardarEstado`:
8
+ * escritura —temporal + `renameSync`— es la de `agent/cloudstudio/cloudstudioMcp.ts#guardarEstado`:
9
9
  * un `writeFileSync` a medias dejaría un `settings.json` truncado si el proceso muere a
10
10
  * mitad de escritura, y el rename es atómico.
11
11
  */
@@ -13,7 +13,7 @@ import { closeSync, existsSync, mkdirSync, openSync, readFileSync, renameSync, u
13
13
  import { randomUUID } from "node:crypto";
14
14
  import { homedir } from "node:os";
15
15
  import { dirname, join } from "node:path";
16
- import { TOPE_DE_CONCURRENCIA_DE_TAREAS, validarSettings, } from "../core/settings.js";
16
+ import { TOPE_DE_CONCURRENCIA_DE_TAREAS, validarSettings, } from "../../core/settings.js";
17
17
  const NOMBRE_CARPETA = ".xonecode";
18
18
  /** Un `settings.json` existente que no se puede fusionar: no se escribe nada encima. */
19
19
  export class SettingsRotosEnDisco extends Error {
@@ -178,6 +178,41 @@ export function guardarConcurrenciaDeTareas(casa, concurrencia) {
178
178
  escribirAtomico(ruta, JSON.stringify(fusionado, null, 2) + "\n");
179
179
  return { ruta };
180
180
  }
181
+ /**
182
+ * Reescribe las claves de `sinAprobacion` cuando una copia local se ha mudado de sitio.
183
+ *
184
+ * Son rutas ABSOLUTAS de raíz de proyecto, así que una mudanza las deja apuntando a una
185
+ * carpeta que ya no está: la autorización de escribir sin preguntar dejaría de aplicarse en
186
+ * silencio. Es la dirección segura —se vuelve a preguntar— pero es un ajuste que el dueño de
187
+ * la máquina dio por puesto, y perderlo sin decir nada es el fallo mudo de siempre.
188
+ *
189
+ * Misma disciplina que el resto del fichero: la base es el objeto CRUDO, un JSON roto PARA
190
+ * sin escribir, y cero cambios no escribe nada. Devuelve cuántas claves se tradujeron.
191
+ */
192
+ export function remapearSinAprobacion(casa, traducir) {
193
+ const ruta = rutaSettings(casa ?? homedir());
194
+ if (!existsSync(ruta))
195
+ return 0;
196
+ const crudo = leerCrudoOAbortar(ruta);
197
+ const previo = crudo.sinAprobacion;
198
+ if (!esObjeto(previo))
199
+ return 0;
200
+ let cambiadas = 0;
201
+ const salida = {};
202
+ for (const [clave, valor] of Object.entries(previo)) {
203
+ const nueva = traducir(clave);
204
+ if (nueva === undefined) {
205
+ salida[clave] = valor;
206
+ continue;
207
+ }
208
+ cambiadas += 1;
209
+ salida[nueva] = valor;
210
+ }
211
+ if (cambiadas === 0)
212
+ return 0;
213
+ escribirAtomico(ruta, JSON.stringify({ ...crudo, sinAprobacion: salida }, null, 2) + "\n");
214
+ return cambiadas;
215
+ }
181
216
  /** Guarda solo la base del workspace, sin tocar la lista de entornos. */
182
217
  export function guardarWorkspace(casa, base) {
183
218
  const ruta = rutaSettings(casa ?? homedir());
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settingsEnDisco.js","sourceRoot":"","sources":["../../../src/agent/config/settingsEnDisco.ts"],"names":[],"mappings":"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"}
@@ -7,10 +7,14 @@
7
7
  */
8
8
  import { execFileSync } from "node:child_process";
9
9
  import { readFileSync } from "node:fs";
10
- import { fileURLToPath } from "node:url";
11
- import { dirname, resolve } from "node:path";
12
- /** La raíz del PAQUETE, igual que `RAIZ_SKILLS`: desde este módulo, no desde el cwd. */
13
- const RAIZ = resolve(dirname(fileURLToPath(import.meta.url)), "..", "..");
10
+ import { resolve } from "node:path";
11
+ import { raizDelPaquete } from "../raizDelPaquete.js";
12
+ /**
13
+ * La raíz del PAQUETE, igual que `RAIZ_SKILLS`: desde este módulo, no desde el cwd — y
14
+ * BUSCADA hacia arriba, no contada con `..`, para que este fichero pueda cambiar de carpeta
15
+ * sin que nadie recuente los puntos (`agent/raizDelPaquete.ts`).
16
+ */
17
+ const RAIZ = raizDelPaquete();
14
18
  /**
15
19
  * Qué versión está corriendo. **Nunca lanza**: es una línea informativa, y un arranque que
16
20
  * reventara por no poder leer su propio commit sería absurdo.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"versionEnDisco.js","sourceRoot":"","sources":["../../../src/agent/config/versionEnDisco.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;GAIG;AACH,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC;AAE9B;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,OAAe,IAAI;IACjD,IAAI,OAAO,GAAG,aAAa,CAAC;IAC5B,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,EAAE,MAAM,CAAC,CAA0B,CAAC;QACvG,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE;YAAE,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IACzF,CAAC;IAAC,MAAM,CAAC;QACP,oEAAoE;IACtE,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,IAAc,EAAsB,EAAE;QACjD,IAAI,CAAC;YACH,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/H,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,SAAS,CAAC;QACnB,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,EAAE;QAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9D,0FAA0F;IAC1F,oFAAoF;IACpF,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;AACxF,CAAC"}