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.
- package/apps/web/dist/assets/{index-BB3SamhR.css → index-Boak51UP.css} +1 -1
- package/apps/web/dist/assets/index-Cg28x6nG.js +477 -0
- package/apps/web/dist/assets/{php-D_2--9WK.js → php-Cu6F_QCJ.js} +1 -1
- package/apps/web/dist/assets/{ruby-DSHSDbk1.js → ruby-BiqQPoC6.js} +1 -1
- package/apps/web/dist/index.html +2 -2
- package/dist/agent/{cloudstudioClient.js → cloudstudio/cloudstudioClient.js} +10 -0
- package/dist/agent/cloudstudio/cloudstudioClient.js.map +1 -0
- package/dist/agent/{cloudstudioMcp.js → cloudstudio/cloudstudioMcp.js} +5 -5
- package/dist/agent/cloudstudio/cloudstudioMcp.js.map +1 -0
- package/dist/agent/{descarga.js → cloudstudio/descarga.js} +17 -7
- package/dist/agent/cloudstudio/descarga.js.map +1 -0
- package/dist/agent/cloudstudio/manifiesto.js.map +1 -0
- package/dist/agent/cloudstudio/ramaActiva.js +11 -0
- package/dist/agent/cloudstudio/ramaActiva.js.map +1 -0
- package/dist/agent/{subida.js → cloudstudio/subida.js} +16 -7
- package/dist/agent/cloudstudio/subida.js.map +1 -0
- package/dist/agent/{zip.js → cloudstudio/zip.js} +1 -1
- package/dist/agent/cloudstudio/zip.js.map +1 -0
- package/dist/agent/{authEnDisco.js → config/authEnDisco.js} +3 -3
- package/dist/agent/config/authEnDisco.js.map +1 -0
- package/dist/agent/{catalogoModelos.js → config/catalogoModelos.js} +47 -1
- package/dist/agent/config/catalogoModelos.js.map +1 -0
- package/dist/agent/{configEnDisco.js → config/configEnDisco.js} +6 -6
- package/dist/agent/config/configEnDisco.js.map +1 -0
- package/dist/agent/{crearProyecto.js → config/crearProyecto.js} +2 -2
- package/dist/agent/config/crearProyecto.js.map +1 -0
- package/dist/agent/config/entorno.js.map +1 -0
- package/dist/agent/config/gemini.js.map +1 -0
- package/dist/agent/config/modelos.js +235 -0
- package/dist/agent/config/modelos.js.map +1 -0
- package/dist/agent/{modelosDeMotor.js → config/modelosDeMotor.js} +1 -1
- package/dist/agent/config/modelosDeMotor.js.map +1 -0
- package/dist/agent/config/mudanzaEnDisco.js +121 -0
- package/dist/agent/config/mudanzaEnDisco.js.map +1 -0
- package/dist/agent/{persona.js → config/persona.js} +1 -1
- package/dist/agent/config/persona.js.map +1 -0
- package/dist/agent/config/selectorEnMaquina.js +45 -0
- package/dist/agent/config/selectorEnMaquina.js.map +1 -0
- package/dist/agent/{settingsEnDisco.js → config/settingsEnDisco.js} +37 -2
- package/dist/agent/config/settingsEnDisco.js.map +1 -0
- package/dist/agent/{versionEnDisco.js → config/versionEnDisco.js} +8 -4
- package/dist/agent/config/versionEnDisco.js.map +1 -0
- package/dist/agent/dispositivos/arranqueDeEmulador.js +146 -0
- package/dist/agent/dispositivos/arranqueDeEmulador.js.map +1 -0
- package/dist/agent/{dispositivosEnMaquina.js → dispositivos/dispositivosEnMaquina.js} +93 -6
- package/dist/agent/dispositivos/dispositivosEnMaquina.js.map +1 -0
- package/dist/agent/dispositivos/hotswap.js.map +1 -0
- package/dist/agent/dispositivos/instalacionEnMaquina.js.map +1 -0
- package/dist/agent/dispositivos/juezVisual.js +152 -0
- package/dist/agent/dispositivos/juezVisual.js.map +1 -0
- package/dist/agent/{lanzamientoEnMaquina.js → dispositivos/lanzamientoEnMaquina.js} +1 -1
- package/dist/agent/dispositivos/lanzamientoEnMaquina.js.map +1 -0
- package/dist/agent/{paqueteDelProyecto.js → dispositivos/paqueteDelProyecto.js} +5 -5
- package/dist/agent/dispositivos/paqueteDelProyecto.js.map +1 -0
- package/dist/agent/dispositivos/procesosEnMaquina.js.map +1 -0
- package/dist/agent/dispositivos/sensorDeArranque.js +154 -0
- package/dist/agent/dispositivos/sensorDeArranque.js.map +1 -0
- package/dist/agent/exportarPdf.js +140 -0
- package/dist/agent/exportarPdf.js.map +1 -0
- package/dist/agent/{arbolDeProyecto.js → grafo/arbolDeProyecto.js} +2 -2
- package/dist/agent/grafo/arbolDeProyecto.js.map +1 -0
- package/dist/agent/{artefactosEnDisco.js → grafo/artefactosEnDisco.js} +2 -2
- package/dist/agent/grafo/artefactosEnDisco.js.map +1 -0
- package/dist/agent/{busquedaRegex.js → grafo/busquedaRegex.js} +41 -1
- package/dist/agent/grafo/busquedaRegex.js.map +1 -0
- package/dist/agent/grafo/criticaVisual.js +115 -0
- package/dist/agent/grafo/criticaVisual.js.map +1 -0
- package/dist/agent/grafo/excluirTools.js +82 -0
- package/dist/agent/grafo/excluirTools.js.map +1 -0
- package/dist/agent/{memoriaDeProyecto.js → grafo/memoriaDeProyecto.js} +1 -1
- package/dist/agent/grafo/memoriaDeProyecto.js.map +1 -0
- package/dist/agent/grafo/navegacionXone.js +231 -0
- package/dist/agent/grafo/navegacionXone.js.map +1 -0
- package/dist/agent/{perfiles.js → grafo/perfiles.js} +96 -10
- package/dist/agent/grafo/perfiles.js.map +1 -0
- package/dist/agent/{proyecto.js → grafo/proyecto.js} +274 -24
- package/dist/agent/grafo/proyecto.js.map +1 -0
- package/dist/agent/grafo/skills.js +425 -0
- package/dist/agent/grafo/skills.js.map +1 -0
- package/dist/agent/grafo/xoneAgent.js +566 -0
- package/dist/agent/grafo/xoneAgent.js.map +1 -0
- package/dist/agent/navegacion/estilosEnDisco.js +110 -0
- package/dist/agent/navegacion/estilosEnDisco.js.map +1 -0
- package/dist/agent/navegacion/hechosEnDisco.js +26 -0
- package/dist/agent/navegacion/hechosEnDisco.js.map +1 -0
- package/dist/agent/navegacion/indiceEnDisco.js +36 -0
- package/dist/agent/navegacion/indiceEnDisco.js.map +1 -0
- package/dist/agent/navegacion/modeloDeProyecto.js +228 -0
- package/dist/agent/navegacion/modeloDeProyecto.js.map +1 -0
- package/dist/agent/raizDelPaquete.js +56 -0
- package/dist/agent/raizDelPaquete.js.map +1 -0
- package/dist/agent/{checkpointer.js → sesiones/checkpointer.js} +1 -1
- package/dist/agent/sesiones/checkpointer.js.map +1 -0
- package/dist/agent/sesiones/git.js.map +1 -0
- package/dist/agent/{gitSync.js → sesiones/gitSync.js} +3 -3
- package/dist/agent/sesiones/gitSync.js.map +1 -0
- package/dist/agent/{sesionGit.js → sesiones/sesionGit.js} +2 -2
- package/dist/agent/sesiones/sesionGit.js.map +1 -0
- package/dist/agent/subagentes/agentesEnDisco.js +818 -0
- package/dist/agent/subagentes/agentesEnDisco.js.map +1 -0
- package/dist/agent/subagentes/consumoExterno.js.map +1 -0
- package/dist/agent/subagentes/escrituraDeCodex.js.map +1 -0
- package/dist/agent/{escrituraDeOpencode.js → subagentes/escrituraDeOpencode.js} +1 -1
- package/dist/agent/subagentes/escrituraDeOpencode.js.map +1 -0
- package/dist/agent/{escrituraExterna.js → subagentes/escrituraExterna.js} +59 -6
- package/dist/agent/subagentes/escrituraExterna.js.map +1 -0
- package/dist/agent/subagentes/pluginDeSkills.js +99 -0
- package/dist/agent/subagentes/pluginDeSkills.js.map +1 -0
- package/dist/agent/subagentes/subagenteCodex.js.map +1 -0
- package/dist/agent/{subagenteExterno.js → subagentes/subagenteExterno.js} +48 -0
- package/dist/agent/subagentes/subagenteExterno.js.map +1 -0
- package/dist/agent/{subagenteOpencode.js → subagentes/subagenteOpencode.js} +53 -1
- package/dist/agent/subagentes/subagenteOpencode.js.map +1 -0
- package/dist/agent/{aumentador.js → tareas/aumentador.js} +2 -2
- package/dist/agent/tareas/aumentador.js.map +1 -0
- package/dist/agent/{juezDeTarea.js → tareas/juezDeTarea.js} +6 -6
- package/dist/agent/tareas/juezDeTarea.js.map +1 -0
- package/dist/agent/{tareasEnDisco.js → tareas/tareasEnDisco.js} +53 -4
- package/dist/agent/tareas/tareasEnDisco.js.map +1 -0
- package/dist/agent/{diagnosticoDeTools.js → turno/diagnosticoDeTools.js} +5 -1
- package/dist/agent/turno/diagnosticoDeTools.js.map +1 -0
- package/dist/agent/{guionizado.js → turno/guionizado.js} +1 -1
- package/dist/agent/turno/guionizado.js.map +1 -0
- package/dist/agent/turno/informeDeTraza.js +245 -0
- package/dist/agent/turno/informeDeTraza.js.map +1 -0
- package/dist/agent/turno/inspectorDePrompt.js +205 -0
- package/dist/agent/turno/inspectorDePrompt.js.map +1 -0
- package/dist/agent/{instantanea.js → turno/instantanea.js} +7 -2
- package/dist/agent/turno/instantanea.js.map +1 -0
- package/dist/agent/{interrupts.js → turno/interrupts.js} +2 -2
- package/dist/agent/turno/interrupts.js.map +1 -0
- package/dist/agent/turno/mensajes.js.map +1 -0
- package/dist/agent/turno/normalizar.js.map +1 -0
- package/dist/agent/{puente.js → turno/puente.js} +71 -4
- package/dist/agent/turno/puente.js.map +1 -0
- package/dist/agent/turno/resumenDeContexto.js +260 -0
- package/dist/agent/turno/resumenDeContexto.js.map +1 -0
- package/dist/agent/{resumenDeTool.js → turno/resumenDeTool.js} +33 -0
- package/dist/agent/turno/resumenDeTool.js.map +1 -0
- package/dist/agent/turno/rubrica.js +91 -0
- package/dist/agent/turno/rubrica.js.map +1 -0
- package/dist/agent/turno/textoDeTool.js.map +1 -0
- package/dist/agent/{turnoReal.js → turno/turnoReal.js} +210 -25
- package/dist/agent/turno/turnoReal.js.map +1 -0
- package/dist/agent/turno/verificador.js.map +1 -0
- package/dist/cli/config.js +1 -1
- package/dist/cli/config.js.map +1 -1
- package/dist/cli/consola.js +72 -9
- package/dist/cli/consola.js.map +1 -1
- package/dist/cli/describe.js +2 -2
- package/dist/cli/describe.js.map +1 -1
- package/dist/cli/doctor.js +1 -1
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/fuentesDeDisco.js +29 -0
- package/dist/cli/fuentesDeDisco.js.map +1 -0
- package/dist/cli/main.js +87 -31
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/run.js +40 -10
- package/dist/cli/run.js.map +1 -1
- package/dist/cli/traza.js +48 -0
- package/dist/cli/traza.js.map +1 -0
- package/dist/cli/tui/correrTui.js +4 -4
- package/dist/cli/tui/correrTui.js.map +1 -1
- package/dist/cli/verify.js +1 -1
- package/dist/cli/verify.js.map +1 -1
- package/dist/core/actos.js +1 -1
- package/dist/core/adjuntos.js +2 -2
- package/dist/core/agentes.js +247 -7
- package/dist/core/agentes.js.map +1 -1
- package/dist/core/artefactos.js +4 -4
- package/dist/core/config.js +1 -1
- package/dist/core/contextos.js +12 -1
- package/dist/core/contextos.js.map +1 -1
- package/dist/core/descargas.js +1 -1
- package/dist/core/dispositivos.js +53 -3
- package/dist/core/dispositivos.js.map +1 -1
- package/dist/core/esfuerzo.js +141 -0
- package/dist/core/esfuerzo.js.map +1 -0
- package/dist/core/esqueleto.js +1 -1
- package/dist/core/estilos.js +78 -0
- package/dist/core/estilos.js.map +1 -0
- package/dist/core/exportacion.js +140 -0
- package/dist/core/exportacion.js.map +1 -0
- package/dist/core/hechosDelProyecto.js +87 -0
- package/dist/core/hechosDelProyecto.js.map +1 -0
- package/dist/core/logDeDispositivo.js +143 -0
- package/dist/core/logDeDispositivo.js.map +1 -0
- package/dist/core/modelos.js +48 -3
- package/dist/core/modelos.js.map +1 -1
- package/dist/core/mudanzaDeWorkspace.js +93 -0
- package/dist/core/mudanzaDeWorkspace.js.map +1 -0
- package/dist/core/navegacion.js +134 -0
- package/dist/core/navegacion.js.map +1 -0
- package/dist/core/notify.js +5 -0
- package/dist/core/notify.js.map +1 -1
- package/dist/core/planDeSubida.js +1 -1
- package/dist/core/planes.js +70 -0
- package/dist/core/planes.js.map +1 -0
- package/dist/core/ports.js +4 -0
- package/dist/core/ports.js.map +1 -1
- package/dist/core/rubrica.js +90 -0
- package/dist/core/rubrica.js.map +1 -0
- package/dist/core/selectorDeCarpeta.js +87 -0
- package/dist/core/selectorDeCarpeta.js.map +1 -0
- package/dist/core/settings.js +56 -7
- package/dist/core/settings.js.map +1 -1
- package/dist/core/shellDeAgente.js +144 -0
- package/dist/core/shellDeAgente.js.map +1 -0
- package/dist/core/skills.js +158 -0
- package/dist/core/skills.js.map +1 -0
- package/dist/core/topeAgotado.js +69 -0
- package/dist/core/topeAgotado.js.map +1 -0
- package/dist/core/zipDeSkill.js +107 -0
- package/dist/core/zipDeSkill.js.map +1 -0
- package/dist/web/servidor/arranque.js +853 -54
- package/dist/web/servidor/arranque.js.map +1 -1
- package/dist/web/servidor/corredorDeTareas.js +3 -3
- package/dist/web/servidor/corredorDeTareas.js.map +1 -1
- package/dist/web/servidor/sesiones.js +34 -6
- package/dist/web/servidor/sesiones.js.map +1 -1
- package/dist/web/servidor/transporte.js +1 -1
- package/dist/web/servidor/transporte.js.map +1 -1
- package/dist/web/servidor/vestibulo.js +62 -13
- package/dist/web/servidor/vestibulo.js.map +1 -1
- package/package.json +7 -4
- package/skills/archify/SKILL.md +25 -2
- package/skills/artifacts-builder/SKILL.md +23 -0
- package/skills/xone-hotswap/SKILL.md +96 -0
- package/skills/xone-hotswap/scripts/xone-arrancar-android +202 -0
- package/skills/xone-hotswap/scripts/xone-arrancar-ios +85 -0
- package/skills/xone-hotswap/scripts/xone-captura-android +93 -0
- package/skills/xone-hotswap/scripts/xone-desplegar-android +439 -0
- package/skills/xone-hotswap/scripts/xone-hotswap +201 -0
- package/skills/xone-hotswap/scripts/xone-log-android +102 -0
- package/skills/xone-hotswap/scripts/xone-reiniciar-android +132 -0
- package/skills/xone-plan-builder/SKILL.md +22 -4
- package/skills/xone-spec-builder/SKILL.md +37 -7
- package/apps/web/dist/assets/index-CFYAoHdw.js +0 -477
- package/dist/agent/agentesEnDisco.js +0 -539
- package/dist/agent/agentesEnDisco.js.map +0 -1
- package/dist/agent/arbolDeProyecto.js.map +0 -1
- package/dist/agent/artefactosEnDisco.js.map +0 -1
- package/dist/agent/aumentador.js.map +0 -1
- package/dist/agent/authEnDisco.js.map +0 -1
- package/dist/agent/busquedaRegex.js.map +0 -1
- package/dist/agent/catalogoModelos.js.map +0 -1
- package/dist/agent/checkpointer.js.map +0 -1
- package/dist/agent/cloudstudioClient.js.map +0 -1
- package/dist/agent/cloudstudioMcp.js.map +0 -1
- package/dist/agent/configEnDisco.js.map +0 -1
- package/dist/agent/consumoExterno.js.map +0 -1
- package/dist/agent/crearProyecto.js.map +0 -1
- package/dist/agent/descarga.js.map +0 -1
- package/dist/agent/diagnosticoDeTools.js.map +0 -1
- package/dist/agent/dispositivosEnMaquina.js.map +0 -1
- package/dist/agent/entorno.js.map +0 -1
- package/dist/agent/escrituraDeCodex.js.map +0 -1
- package/dist/agent/escrituraDeOpencode.js.map +0 -1
- package/dist/agent/escrituraExterna.js.map +0 -1
- package/dist/agent/gemini.js.map +0 -1
- package/dist/agent/git.js.map +0 -1
- package/dist/agent/gitSync.js.map +0 -1
- package/dist/agent/guionizado.js.map +0 -1
- package/dist/agent/hotswap.js.map +0 -1
- package/dist/agent/instalacionEnMaquina.js.map +0 -1
- package/dist/agent/instantanea.js.map +0 -1
- package/dist/agent/interrupts.js.map +0 -1
- package/dist/agent/juezDeTarea.js.map +0 -1
- package/dist/agent/lanzamientoEnMaquina.js.map +0 -1
- package/dist/agent/manifiesto.js.map +0 -1
- package/dist/agent/memoriaDeProyecto.js.map +0 -1
- package/dist/agent/mensajes.js.map +0 -1
- package/dist/agent/modelos.js +0 -130
- package/dist/agent/modelos.js.map +0 -1
- package/dist/agent/modelosDeMotor.js.map +0 -1
- package/dist/agent/normalizar.js.map +0 -1
- package/dist/agent/paqueteDelProyecto.js.map +0 -1
- package/dist/agent/perfiles.js.map +0 -1
- package/dist/agent/persona.js.map +0 -1
- package/dist/agent/procesosEnMaquina.js.map +0 -1
- package/dist/agent/proyecto.js.map +0 -1
- package/dist/agent/puente.js.map +0 -1
- package/dist/agent/resumenDeContexto.js +0 -30
- package/dist/agent/resumenDeContexto.js.map +0 -1
- package/dist/agent/resumenDeTool.js.map +0 -1
- package/dist/agent/sesionGit.js.map +0 -1
- package/dist/agent/settingsEnDisco.js.map +0 -1
- package/dist/agent/skills.js +0 -65
- package/dist/agent/skills.js.map +0 -1
- package/dist/agent/subagenteCodex.js.map +0 -1
- package/dist/agent/subagenteExterno.js.map +0 -1
- package/dist/agent/subagenteOpencode.js.map +0 -1
- package/dist/agent/subida.js.map +0 -1
- package/dist/agent/tareasEnDisco.js.map +0 -1
- package/dist/agent/textoDeTool.js.map +0 -1
- package/dist/agent/turnoReal.js.map +0 -1
- package/dist/agent/verificador.js.map +0 -1
- package/dist/agent/versionEnDisco.js.map +0 -1
- package/dist/agent/xoneAgent.js +0 -347
- package/dist/agent/xoneAgent.js.map +0 -1
- package/dist/agent/zip.js.map +0 -1
- /package/dist/agent/{manifiesto.js → cloudstudio/manifiesto.js} +0 -0
- /package/dist/agent/{entorno.js → config/entorno.js} +0 -0
- /package/dist/agent/{gemini.js → config/gemini.js} +0 -0
- /package/dist/agent/{hotswap.js → dispositivos/hotswap.js} +0 -0
- /package/dist/agent/{instalacionEnMaquina.js → dispositivos/instalacionEnMaquina.js} +0 -0
- /package/dist/agent/{procesosEnMaquina.js → dispositivos/procesosEnMaquina.js} +0 -0
- /package/dist/agent/{git.js → sesiones/git.js} +0 -0
- /package/dist/agent/{consumoExterno.js → subagentes/consumoExterno.js} +0 -0
- /package/dist/agent/{escrituraDeCodex.js → subagentes/escrituraDeCodex.js} +0 -0
- /package/dist/agent/{subagenteCodex.js → subagentes/subagenteCodex.js} +0 -0
- /package/dist/agent/{mensajes.js → turno/mensajes.js} +0 -0
- /package/dist/agent/{normalizar.js → turno/normalizar.js} +0 -0
- /package/dist/agent/{textoDeTool.js → turno/textoDeTool.js} +0 -0
- /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 "
|
|
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 {
|
|
11
|
-
import {
|
|
12
|
-
/**
|
|
13
|
-
|
|
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"}
|