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,425 @@
1
+ import { existsSync, mkdirSync, readFileSync, readdirSync, lstatSync, renameSync, rmSync, writeFileSync, } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join, relative, sep } from "node:path";
4
+ import { unzipSync } from "fflate";
5
+ import { raizDelPaquete } from "../raizDelPaquete.js";
6
+ import { NOMBRE_CARPETA } from "../config/configEnDisco.js";
7
+ import { segmentoSeguro } from "../../core/settings.js";
8
+ import { escribirSkill, fusionarSkills, leerSkill, tokensDeSkill, } from "../../core/skills.js";
9
+ import { planDeInstalacion, rutaDeZipAceptable } from "../../core/zipDeSkill.js";
10
+ /**
11
+ * Las skills en disco: una carpeta por skill, con su `SKILL.md` dentro.
12
+ *
13
+ * **Tres raíces, no una.** El porqué de cada una y su precedencia están en
14
+ * `core/skills.ts`; aquí vive solo dónde caen:
15
+ *
16
+ * - **De serie**: `<raíz del paquete>/skills/`. La raíz se BUSCA hacia arriba
17
+ * (`agent/raizDelPaquete.ts`) en vez de contarse con `..`: contarlos ataba este fichero a
18
+ * su profundidad, y moverlo de carpeta dejaba el catálogo vacío sin un error que leer. Se
19
+ * resuelve contra ESTE módulo y no contra el cwd, que en la v1 es el proyecto del cliente.
20
+ * - **Global**: `~/.xonecode/skills/`.
21
+ * - **Del proyecto**: `<raiz>/.xonecode/skills/`.
22
+ *
23
+ * Las dos del usuario heredan de `.xonecode/` las dos protecciones que aquí importan: está
24
+ * denegada entera al agente (`permisosDe`) y **no sube nunca** a CloudStudio. Una skill es
25
+ * configuración de la herramienta, no del proyecto XOne.
26
+ *
27
+ * Y el agente NO las lee por esa ruta: las ve montadas en `/skills/<nombre>/`
28
+ * (`proyecto.ts#backendConSkills`), que es de solo lectura para él.
29
+ */
30
+ export const RAIZ_SKILLS = join(raizDelPaquete(), "skills");
31
+ const CARPETA = "skills";
32
+ /** La carpeta de skills de una raíz cualquiera. */
33
+ export function rutaDeSkills(base) {
34
+ return join(base, NOMBRE_CARPETA, CARPETA);
35
+ }
36
+ /** La global. `homedir()` en el momento de la llamada, como el resto del repo: cachearla en
37
+ * una constante de módulo la congelaría para los tests que la cambian. */
38
+ export function rutaGlobalDeSkills() {
39
+ return join(homedir(), NOMBRE_CARPETA, CARPETA);
40
+ }
41
+ /** Estimación de coste. Se reexporta con el nombre viejo: lo usan los evals. */
42
+ export const tokensDe = tokensDeSkill;
43
+ /**
44
+ * Los ficheros que acompañan al `SKILL.md`, en rutas relativas con `/`, ordenadas.
45
+ *
46
+ * No recorre detrás de un enlace (`lstatSync`, y una carpeta que no se puede mirar se
47
+ * salta): la misma línea que el árbol de Ficheros, y por lo mismo — un enlace dentro de la
48
+ * carpeta de una skill puede apuntar a cualquier sitio de la máquina, y lo que se enseña es
49
+ * lo que hay AQUÍ.
50
+ */
51
+ function ficherosDeLaSkill(carpeta, tope = 200) {
52
+ const salida = [];
53
+ const recorrer = (actual) => {
54
+ let entradas;
55
+ try {
56
+ entradas = readdirSync(actual).sort();
57
+ }
58
+ catch {
59
+ return;
60
+ }
61
+ for (const entrada of entradas) {
62
+ if (salida.length >= tope)
63
+ return;
64
+ const completa = join(actual, entrada);
65
+ let esCarpeta = false;
66
+ try {
67
+ // `lstatSync` y no `statSync`: el segundo SIGUE el enlace, así que un enlace a una
68
+ // carpeta de cualquier sitio de la máquina se habría recorrido entero. Es la misma
69
+ // línea, y el mismo motivo, que en `arbolDeProyecto.ts`. Un enlace a un fichero
70
+ // cuenta como fichero y se nombra, que es lo que hay AQUÍ.
71
+ esCarpeta = lstatSync(completa).isDirectory();
72
+ }
73
+ catch {
74
+ continue;
75
+ }
76
+ if (esCarpeta)
77
+ recorrer(completa);
78
+ else if (completa !== join(carpeta, "SKILL.md")) {
79
+ salida.push(relative(carpeta, completa).split(sep).join("/"));
80
+ }
81
+ }
82
+ };
83
+ recorrer(carpeta);
84
+ return salida.sort().slice(0, tope);
85
+ }
86
+ /**
87
+ * Lee una carpeta de skills.
88
+ *
89
+ * Una que no se puede leer o que no valida NO tumba la carga: se salta, se apunta el motivo
90
+ * y las demás siguen — la misma postura que `leerCarpetaDeAgentes` con un `.md` a medio
91
+ * escribir, y la que evita que una skill rota deje la consola sin ninguna.
92
+ *
93
+ * Y el nombre NO se valida aquí: rechazar al leer haría desaparecer una skill que funciona.
94
+ * Se valida al GUARDAR, que es el único momento con alguien delante para arreglarlo — la
95
+ * misma regla, y por el mismo motivo, que la del nombre de un subagente.
96
+ */
97
+ export function leerCarpetaDeSkills(carpeta, origen) {
98
+ if (!existsSync(carpeta))
99
+ return { skills: [], problemas: [] };
100
+ const skills = [];
101
+ const problemas = [];
102
+ let entradas;
103
+ try {
104
+ entradas = readdirSync(carpeta).sort();
105
+ }
106
+ catch {
107
+ return { skills: [], problemas: [] };
108
+ }
109
+ for (const entrada of entradas) {
110
+ const dir = join(carpeta, entrada);
111
+ try {
112
+ // `lstatSync` por lo mismo que en `ficherosDeLaSkill`: un enlace a una carpeta de
113
+ // fuera no es una skill de esta raíz, y seguirlo la metería en el catálogo con el
114
+ // origen equivocado.
115
+ if (!lstatSync(dir).isDirectory())
116
+ continue;
117
+ }
118
+ catch {
119
+ continue;
120
+ }
121
+ const skillMd = join(dir, "SKILL.md");
122
+ if (!existsSync(skillMd)) {
123
+ problemas.push(`${entrada}: no tiene SKILL.md dentro`);
124
+ continue;
125
+ }
126
+ try {
127
+ const leida = leerSkill(readFileSync(skillMd, "utf8"), entrada, origen, ficherosDeLaSkill(dir));
128
+ if ("error" in leida)
129
+ problemas.push(`${entrada}: ${leida.error}`);
130
+ else
131
+ skills.push(leida.skill);
132
+ }
133
+ catch {
134
+ // El motivo de un error de Node lleva la ruta absoluta, y esto viaja por el cable.
135
+ problemas.push(`${entrada}: no se pudo leer`);
136
+ }
137
+ }
138
+ return { skills, problemas };
139
+ }
140
+ /**
141
+ * Todas las skills en vigor, fundidas por nombre con el proyecto ganando.
142
+ *
143
+ * `raiz` ausente = no hay proyecto abierto, y entonces las del proyecto no existen. Es un
144
+ * caso normal —el vestíbulo— y no un hueco: `ausente ≠ vacío` no aplica aquí porque lo que
145
+ * falta es la CARPETA, no el dato.
146
+ */
147
+ export function cargarSkills(raiz) {
148
+ const serie = leerCarpetaDeSkills(RAIZ_SKILLS, "serie");
149
+ const global = leerCarpetaDeSkills(rutaGlobalDeSkills(), "global");
150
+ const proyecto = raiz === undefined
151
+ ? { skills: [], problemas: [] }
152
+ : leerCarpetaDeSkills(rutaDeSkills(raiz), "proyecto");
153
+ return {
154
+ skills: fusionarSkills(serie.skills, global.skills, proyecto.skills),
155
+ problemas: [...serie.problemas, ...global.problemas, ...proyecto.problemas],
156
+ };
157
+ }
158
+ /**
159
+ * Las carpetas de las skills del USUARIO, para que `backendConSkills` las cuelgue una a una.
160
+ *
161
+ * Una a una y no una raíz más porque son DOS carpetas (la global y la del proyecto) que
162
+ * tienen que verse como UNA sola ruta virtual, `/skills/`: el subagente declara `skills:
163
+ * [mi-skill]` y eso se traduce a `/skills/mi-skill/` sin saber de dónde salió. Y porque el
164
+ * proyecto gana sobre el global, que es lo que `cargarSkills` ya decidió — aquí solo se
165
+ * respeta el resultado.
166
+ */
167
+ export function skillsMontables(raiz) {
168
+ const de = (carpeta, origen) => new Map(leerCarpetaDeSkills(carpeta, origen).skills.map((s) => [s.nombre, join(carpeta, s.nombre)]));
169
+ const montajes = new Map([
170
+ ...de(rutaGlobalDeSkills(), "global"),
171
+ ...(raiz === undefined ? [] : de(rutaDeSkills(raiz), "proyecto")),
172
+ ]);
173
+ return [...montajes].map(([nombre, dir]) => ({ nombre, dir }));
174
+ }
175
+ /**
176
+ * Las CARPETAS que contienen skills, para un motor EXTERNO que descubre por directorio.
177
+ *
178
+ * **Por qué existe, y por qué no vale `skillsMontables`.** Aquélla devuelve una entrada por
179
+ * SKILL, que es lo que necesita nuestro `CompositeBackend` para colgar cada una de
180
+ * `/skills/<nombre>/`. Un motor externo no ve esa ruta virtual —corre en otro proceso y lee
181
+ * el disco— y descubre por CARPETA CONTENEDORA: opencode con `skills.paths` de su
182
+ * configuración, Claude Code con `additionalDirectories`. Son dos preguntas distintas y
183
+ * confundirlas da una lista de rutas que el motor descarta en silencio.
184
+ *
185
+ * **Solo las que EXISTEN.** Una ruta que no está es una entrada de configuración que el motor
186
+ * tiene que descartar por su cuenta, y cómo la descarte no lo decidimos nosotros — puede ser
187
+ * un aviso, puede ser un fallo de arranque. La carpeta global está vacía en una máquina que
188
+ * nunca guardó una skill propia, así que este caso es el normal y no el raro.
189
+ *
190
+ * **Y no se pasa por el proyecto abierto sin más**: la del proyecto cuelga de su `.xonecode/`,
191
+ * que es carpeta DENEGADA para los motores externos por todas las demás vías. Entra aquí
192
+ * porque el motor la carga ÉL al arrancar, no por una tool, que es la misma distinción que
193
+ * hace que `/skills/` sea de solo lectura para el agente interno.
194
+ *
195
+ * El orden es el de la precedencia de `cargarSkills` —serie, global, proyecto— para que un
196
+ * motor que resuelva un nombre repetido quedándose con el último coincida con lo que ve el
197
+ * agente interno.
198
+ */
199
+ export function carpetasDeSkillsParaElMotor(opciones = {}) {
200
+ const casa = opciones.casa ?? join(homedir(), NOMBRE_CARPETA);
201
+ return [
202
+ RAIZ_SKILLS,
203
+ join(casa, CARPETA),
204
+ ...(opciones.raiz === undefined ? [] : [rutaDeSkills(opciones.raiz)]),
205
+ ].filter((ruta) => existsSync(ruta));
206
+ }
207
+ /**
208
+ * TODAS las skills con su carpeta REAL, las de serie incluidas, con la precedencia de siempre.
209
+ *
210
+ * No es lo mismo que `skillsMontables`, y confundirlas costó un turno entero: aquélla contesta
211
+ * «qué carpetas hay que colgar de `/skills/` UNA A UNA», y las de serie no están ahí porque su
212
+ * raíz se cuelga ENTERA en `backendConSkills`. Para el backend da igual; para quien necesita la
213
+ * ruta de verdad de una skill —una shell, que no ve rutas virtuales— significaba que las nueve
214
+ * de serie no existían. Medido: el agente recibió un PATH sin sus scripts, probó el nombre a
215
+ * secas, falló, y acabó haciendo `find /` por el disco entero.
216
+ *
217
+ * El orden es el de la precedencia (`cargarSkills`): serie, luego global, luego proyecto, y el
218
+ * último gana. Una skill del proyecto que se llame igual que una de serie tapa a la de serie
219
+ * también aquí, que es lo que el agente ve por `/skills/`.
220
+ */
221
+ export function skillsConRuta(raiz) {
222
+ const de = (carpeta, origen) => new Map(leerCarpetaDeSkills(carpeta, origen).skills.map((s) => [s.nombre, join(carpeta, s.nombre)]));
223
+ const todas = new Map([
224
+ ...de(RAIZ_SKILLS, "serie"),
225
+ ...de(rutaGlobalDeSkills(), "global"),
226
+ ...(raiz === undefined ? [] : de(rutaDeSkills(raiz), "proyecto")),
227
+ ]);
228
+ return [...todas].map(([nombre, dir]) => ({ nombre, dir }));
229
+ }
230
+ /**
231
+ * Escribe una skill del usuario. Devuelve el motivo si NO se escribió, nunca lanza.
232
+ *
233
+ * Tres negativas, y ninguna es de forma:
234
+ *
235
+ * - **Una de serie no se edita**: vive dentro del paquete instalado, así que el siguiente
236
+ * `npm install` se llevaría el cambio sin decir nada. La consola ofrece copiarla.
237
+ * - **Un destino que existe es un NO**, venga de donde venga —de serie, global o del
238
+ * proyecto—: es el motivo honesto y cubre los tres. Sin esto, crear una skill llamada
239
+ * como una nuestra la tapaba en silencio, que es el agujero que el alta de subagentes ya
240
+ * pagó.
241
+ * - **Y renombrar es `renameSync` y LUEGO escribir**, nunca escribir y luego borrar: un
242
+ * fallo entre los dos pasos deja UNA carpeta y no dos con las mismas instrucciones.
243
+ */
244
+ export function guardarSkill(base, skill, renombrandoDe) {
245
+ let nombre;
246
+ try {
247
+ nombre = segmentoSeguro(skill.nombre, "nombre de skill");
248
+ }
249
+ catch (e) {
250
+ return { error: e instanceof Error ? e.message : "el nombre no vale" };
251
+ }
252
+ const carpeta = rutaDeSkills(base);
253
+ const destino = join(carpeta, nombre);
254
+ const cambiaDeNombre = renombrandoDe !== undefined && renombrandoDe !== nombre;
255
+ if (esDeSerie(nombre) && !existsSync(destino)) {
256
+ return {
257
+ error: `«${nombre}» es una skill que trae xonecode: elige otro nombre, o cópiala desde su ficha para partir de ella`,
258
+ };
259
+ }
260
+ if ((cambiaDeNombre || renombrandoDe === undefined) && existsSync(destino)) {
261
+ return { error: `ya hay una skill «${nombre}» aquí: elige otro nombre, o bórrala primero` };
262
+ }
263
+ try {
264
+ if (cambiaDeNombre) {
265
+ const origen = join(carpeta, segmentoSeguro(renombrandoDe, "nombre de skill"));
266
+ if (existsSync(origen))
267
+ renameSync(origen, destino);
268
+ }
269
+ mkdirSync(destino, { recursive: true });
270
+ writeFileSync(join(destino, "SKILL.md"), escribirSkill({ ...skill, nombre }), "utf8");
271
+ return { ok: true };
272
+ }
273
+ catch {
274
+ // El mensaje de Node lleva la ruta absoluta y esto viaja por el cable (`sinRutas`).
275
+ return { error: `no se pudo escribir la skill «${nombre}»` };
276
+ }
277
+ }
278
+ /** Borra una skill del usuario. `false` = no estaba. Una de serie no llega aquí: la corta
279
+ * el servidor, que es donde vive la guarda — esconder el icono es presentación. */
280
+ export function borrarSkill(base, nombre) {
281
+ let seguro;
282
+ try {
283
+ seguro = segmentoSeguro(nombre, "nombre de skill");
284
+ }
285
+ catch {
286
+ return false;
287
+ }
288
+ const dir = join(rutaDeSkills(base), seguro);
289
+ if (!existsSync(dir))
290
+ return false;
291
+ rmSync(dir, { recursive: true, force: true });
292
+ return true;
293
+ }
294
+ /** ¿La trae xonecode? Se pregunta al DISCO y no a una lista escrita a mano: la lista sería
295
+ * un segundo sitio que mantener, y el día que divergiera nadie se enteraría. */
296
+ export function esDeSerie(nombre) {
297
+ try {
298
+ return existsSync(join(RAIZ_SKILLS, segmentoSeguro(nombre, "nombre de skill"), "SKILL.md"));
299
+ }
300
+ catch {
301
+ return false;
302
+ }
303
+ }
304
+ /**
305
+ * El catálogo que ve el AGENTE: las tres raíces, fundidas.
306
+ *
307
+ * **No cachea.** La versión anterior sí lo hacía —eran seis ficheros del paquete que no
308
+ * cambian a mitad de turno— y con las del usuario dentro eso dejó de ser cierto: se guarda
309
+ * una skill desde Ajustes con la consola abierta, y una lista congelada dentro de este objeto
310
+ * la dejaría fuera incluso de la siguiente construcción. Es la misma postura que `cargarAgentes`.
311
+ *
312
+ * **Lo que esto NO arregla**: construir el agente ocurre al abrir la sesión y en `/modelo`
313
+ * (`turnoReal.ts#construir`), no en cada turno, así que la skill nueva sigue sin alcanzar a la
314
+ * sesión que ya está abierta. Quitar la caché es condición necesaria y no suficiente; el
315
+ * agujero es heredado y está anotado en CLAUDE.md.
316
+ *
317
+ * `raiz` ausente = sin proyecto: solo las de serie y las globales.
318
+ */
319
+ export class SkillsEnDisco {
320
+ raiz;
321
+ constructor(raiz) {
322
+ this.raiz = raiz;
323
+ }
324
+ catalogo() {
325
+ return cargarSkills(this.raiz).skills.map((s) => ({
326
+ nombre: s.nombre,
327
+ descripcion: s.descripcion,
328
+ tokens: s.tokens,
329
+ }));
330
+ }
331
+ cargar(nombre) {
332
+ // El nombre es un SEGMENTO de ruta y aquí se concatena a tres carpetas distintas: sin
333
+ // esta guarda un `../../` se leería un fichero de fuera de las tres. Que hoy no tenga
334
+ // llamador (`SkillsPort.cargar()`) no es una razón para dejarlo abierto — es justo la
335
+ // clase de función que mañana se cablea y nadie revisa.
336
+ let seguro;
337
+ try {
338
+ seguro = segmentoSeguro(nombre, "nombre de skill");
339
+ }
340
+ catch {
341
+ throw new Error(`«${nombre}» no vale como nombre de skill`);
342
+ }
343
+ for (const carpeta of [
344
+ ...(this.raiz === undefined ? [] : [rutaDeSkills(this.raiz)]),
345
+ rutaGlobalDeSkills(),
346
+ RAIZ_SKILLS,
347
+ ]) {
348
+ const skillMd = join(carpeta, seguro, "SKILL.md");
349
+ if (existsSync(skillMd))
350
+ return readFileSync(skillMd, "utf8");
351
+ }
352
+ const hay = this.catalogo()
353
+ .map((s) => s.nombre)
354
+ .join(", ");
355
+ throw new Error(`no hay skill «${nombre}». Las que hay: ${hay || "(ninguna)"}`);
356
+ }
357
+ }
358
+ /**
359
+ * Instala una skill desde un `.zip`. Devuelve el motivo si no se instaló, nunca lanza.
360
+ *
361
+ * El reparto: **la REGLA de qué se acepta vive en `core/zipDeSkill.ts`** —pura y probada sin
362
+ * un fichero delante— y aquí solo está lo que toca el disco. Es el mismo reparto que
363
+ * `core/agentes.ts` con `agentesEnDisco.ts`, y por lo mismo: la parte que decide si una ruta
364
+ * del zip puede escribirse es justo la que no puede depender de tener un zip a mano.
365
+ *
366
+ * Tres cosas que no son de forma:
367
+ *
368
+ * - **Se descomprime ENTERO en memoria y se comprueba ANTES de escribir nada.** Escribir
369
+ * según se descomprime dejaría media skill en disco cuando la entrada 40 resulta ser un
370
+ * `../`: un fallo a medias es peor que un no.
371
+ * - **El destino se comprueba con las MISMAS dos reglas que `guardarSkill`** —un nombre de
372
+ * serie es un NO, un destino que existe es un NO—, porque instalar es otra forma de dar de
373
+ * alta y un segundo sitio donde decidir eso es donde uno de los dos se queda sin la regla.
374
+ * - **Y cada ruta se vuelve a mirar al escribir**, aunque el plan ya la haya aceptado: es la
375
+ * disciplina de `escrituraExterna.ts` —las guardas se REAPLICAN, no se asumen— y aquí
376
+ * cuesta una llamada.
377
+ */
378
+ export function instalarSkillDesdeZip(base, zip, nombreDelFichero) {
379
+ let entradas;
380
+ try {
381
+ entradas = unzipSync(zip);
382
+ }
383
+ catch {
384
+ return { error: "no se pudo abrir el .zip: ¿es un zip de verdad?" };
385
+ }
386
+ // fflate devuelve también las carpetas, como entradas vacías acabadas en `/`. No son
387
+ // ficheros que escribir y no tienen por qué pasar por la regla de forma.
388
+ const ficheros = Object.entries(entradas).filter(([ruta]) => !ruta.endsWith("/"));
389
+ const plan = planDeInstalacion(ficheros.map(([ruta, datos]) => ({ ruta, bytes: datos.length })), nombreDelFichero);
390
+ if ("error" in plan)
391
+ return plan;
392
+ const destino = join(rutaDeSkills(base), plan.nombre);
393
+ if (esDeSerie(plan.nombre) && !existsSync(destino)) {
394
+ return {
395
+ error: `«${plan.nombre}» es una skill que trae xonecode: renombra la carpeta del .zip para instalarla al lado`,
396
+ };
397
+ }
398
+ if (existsSync(destino)) {
399
+ return { error: `ya hay una skill «${plan.nombre}»: bórrala primero si quieres reemplazarla` };
400
+ }
401
+ try {
402
+ for (const [ruta, datos] of ficheros) {
403
+ const relativa = ruta.slice(plan.prefijo.length);
404
+ // Se vuelve a mirar aunque el plan ya lo haya hecho: las guardas se REAPLICAN.
405
+ if (!rutaDeZipAceptable(relativa))
406
+ return { error: "el .zip trae una ruta que no se puede escribir" };
407
+ const salida = join(destino, ...relativa.split("/"));
408
+ mkdirSync(dirname(salida), { recursive: true });
409
+ writeFileSync(salida, datos);
410
+ }
411
+ return { ok: true, nombre: plan.nombre };
412
+ }
413
+ catch {
414
+ // A medias es peor que nada: lo escrito se retira, para que no quede una carpeta con un
415
+ // `SKILL.md` a medio copiar que el catálogo daría por buena.
416
+ try {
417
+ rmSync(destino, { recursive: true, force: true });
418
+ }
419
+ catch {
420
+ // Si ni eso se puede, lo que se dice sigue siendo que no se instaló.
421
+ }
422
+ return { error: `no se pudo escribir la skill «${plan.nombre}»` };
423
+ }
424
+ }
425
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../../src/agent/grafo/skills.ts"],"names":[],"mappings":"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"}