xonecode 0.8.23 → 0.8.26

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 (44) hide show
  1. package/apps/web/dist/assets/{index-CtYEobZI.css → index-DKZqgHtg.css} +1 -1
  2. package/apps/web/dist/assets/{index-mTaG_gr6.js → index-LdUr7EoT.js} +63 -63
  3. package/apps/web/dist/assets/{php-BEI3vU5S.js → php-Cg-eWGpQ.js} +1 -1
  4. package/apps/web/dist/assets/{ruby-DCYozE_k.js → ruby-EcV7Hon3.js} +1 -1
  5. package/apps/web/dist/index.html +2 -2
  6. package/dist/agent/dispositivos/juezVisual.js +88 -4
  7. package/dist/agent/dispositivos/juezVisual.js.map +1 -1
  8. package/dist/agent/grafo/artefactosEnDisco.js +15 -4
  9. package/dist/agent/grafo/artefactosEnDisco.js.map +1 -1
  10. package/dist/agent/grafo/criticaVisual.js +134 -24
  11. package/dist/agent/grafo/criticaVisual.js.map +1 -1
  12. package/dist/agent/grafo/proyecto.js +101 -22
  13. package/dist/agent/grafo/proyecto.js.map +1 -1
  14. package/dist/agent/grafo/xoneAgent.js +1 -1
  15. package/dist/agent/grafo/xoneAgent.js.map +1 -1
  16. package/dist/agent/sesiones/checkpointer.js +183 -1
  17. package/dist/agent/sesiones/checkpointer.js.map +1 -1
  18. package/dist/agent/subagentes/agentesEnDisco.js +3 -1
  19. package/dist/agent/subagentes/agentesEnDisco.js.map +1 -1
  20. package/dist/cli/consola.js.map +1 -1
  21. package/dist/cli/main.js +9 -0
  22. package/dist/cli/main.js.map +1 -1
  23. package/dist/cli/podar.js +112 -0
  24. package/dist/cli/podar.js.map +1 -0
  25. package/dist/core/actos.js.map +1 -1
  26. package/dist/core/artefactos.js +47 -0
  27. package/dist/core/artefactos.js.map +1 -1
  28. package/dist/core/hotswap.js +71 -0
  29. package/dist/core/hotswap.js.map +1 -0
  30. package/dist/core/podaDeCheckpoint.js +74 -0
  31. package/dist/core/podaDeCheckpoint.js.map +1 -0
  32. package/dist/core/shellDeAgente.js +12 -0
  33. package/dist/core/shellDeAgente.js.map +1 -1
  34. package/dist/web/servidor/arranque.js +53 -5
  35. package/dist/web/servidor/arranque.js.map +1 -1
  36. package/dist/web/servidor/consolaWeb.js +42 -5
  37. package/dist/web/servidor/consolaWeb.js.map +1 -1
  38. package/dist/web/servidor/pielWeb.js +13 -4
  39. package/dist/web/servidor/pielWeb.js.map +1 -1
  40. package/dist/web/servidor/vestibulo.js +22 -0
  41. package/dist/web/servidor/vestibulo.js.map +1 -1
  42. package/package.json +1 -1
  43. package/skills/xone-hotswap/SKILL.md +8 -4
  44. package/skills/xone-hotswap/scripts/xone-hotswap +42 -7
@@ -61,7 +61,8 @@ import { motivoDeClaveInaceptable } from "../../core/config.js";
61
61
  import { aplicarAuth, aplicarCredencialAlProceso, cargar, guardarModeloGlobal, } from "../../agent/config/configEnDisco.js";
62
62
  import { borrarCredencial, guardarCredencial } from "../../agent/config/authEnDisco.js";
63
63
  import { borrarProveedorPersonalizado, guardarProveedorPersonalizado, proveedoresPersonalizados, } from "../../agent/config/configEnDisco.js";
64
- import { crearCheckpointerDeProyecto, hayCheckpoint, olvidarHilo, } from "../../agent/sesiones/checkpointer.js";
64
+ import { crearCheckpointerDeProyecto, hayCheckpoint, mantenimientoDelCheckpointer, olvidarHilo, } from "../../agent/sesiones/checkpointer.js";
65
+ import { resumenDePoda } from "../../core/podaDeCheckpoint.js";
65
66
  import { cargarSettings, guardarConcurrenciaDeTareas, guardarWorkspace as guardarWorkspaceEnDisco, guardarDispositivos, guardarEntorno as guardarEntornoEnDisco, } from "../../agent/config/settingsEnDisco.js";
66
67
  import { dentroDelWorkspace, expandirConCasa, motivoDeWorkspaceInaceptable, } from "../../core/settings.js";
67
68
  import { esModoDeEscritura, MODO_POR_OMISION, } from "../../core/modoDeEscritura.js";
@@ -2008,6 +2009,29 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
2008
2009
  * Si no hay escritor, se DICE que no se ha guardado en vez de callarlo: un ajuste que
2009
2010
  * parece puesto y no lo está es peor que uno que falta.
2010
2011
  */
2012
+ /**
2013
+ * Las CLAVES con las que un control que refleja un ESTADO sustituye su propia línea
2014
+ * pendiente (`LineaDeConsola.sustituye`).
2015
+ *
2016
+ * Los tres son pastillas del compositor: se pulsan una vez por cambio de opinión, y si el
2017
+ * turno está en vuelo las líneas se quedan en la cola y el lazo las ejecuta seguidas al
2018
+ * terminar — dos acuses contiguos, con el primero ya caduco. Los tres tienen el mismo
2019
+ * acuse y el mismo defecto, así que llevan clave los tres: una lista que hay que acordarse
2020
+ * de ampliar es el patrón de fallo de este repo.
2021
+ *
2022
+ * **Hoy ninguna de las tres llega a encolarse dos veces**, y hay que decirlo: la pastilla
2023
+ * no manda si pulsas la que ya está puesta, y ese estado es el CONFIRMADO por el servidor,
2024
+ * que durante un turno no cambia. Reproducido en el navegador. Esto es el lado fail-closed
2025
+ * de esa guarda, que además pierde una pulsación rápida en silencio y está sin arreglar.
2026
+ *
2027
+ * **`/sync` NO está aquí, y esa ausencia es la decisión**: dos subidas son dos operaciones,
2028
+ * no una opinión que cambia. Y nada de lo que teclea una persona se coalesce jamás.
2029
+ */
2030
+ const CLAVE_DE_CONTROL = {
2031
+ modo: "control:modo-de-escritura",
2032
+ modelo: "control:modelo",
2033
+ esfuerzo: "control:esfuerzo",
2034
+ };
2011
2035
  /**
2012
2036
  * El esfuerzo de la sesión abierta. `nivel` ausente = quitarlo.
2013
2037
  *
@@ -2037,7 +2061,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
2037
2061
  informar(`«${nivel}» no es un nivel de esfuerzo`);
2038
2062
  return;
2039
2063
  }
2040
- abierto.consola.encolar(`/esfuerzo ${nivel}`);
2064
+ abierto.consola.encolar(`/esfuerzo ${nivel}`, CLAVE_DE_CONTROL.esfuerzo);
2041
2065
  };
2042
2066
  /**
2043
2067
  * El MODO DE ESCRITURA de la sesión abierta.
@@ -2064,7 +2088,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
2064
2088
  informar(`«${String(modo)}» no es un modo de escritura`);
2065
2089
  return;
2066
2090
  }
2067
- abierto.consola.encolar(`/aprobacion ${modo}`);
2091
+ abierto.consola.encolar(`/aprobacion ${modo}`, CLAVE_DE_CONTROL.modo);
2068
2092
  };
2069
2093
  /**
2070
2094
  * Pregunta a Ollama si el modelo en vigor piensa, y vuelve a emitir cuando conteste.
@@ -2115,7 +2139,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
2115
2139
  informar("esta ejecución no puede guardar el modelo por defecto");
2116
2140
  return;
2117
2141
  }
2118
- abierto.consola.encolar(`/modelo ${id}`);
2142
+ abierto.consola.encolar(`/modelo ${id}`, CLAVE_DE_CONTROL.modelo);
2119
2143
  informar(`modelo de esta sesión: ${id} · esta ejecución no lo guarda como defecto`);
2120
2144
  return;
2121
2145
  }
@@ -2131,7 +2155,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
2131
2155
  informar(`modelo por defecto: ${id} · lo usarán las sesiones nuevas`);
2132
2156
  }
2133
2157
  else {
2134
- abierto.consola.encolar(`/modelo ${id}`);
2158
+ abierto.consola.encolar(`/modelo ${id}`, CLAVE_DE_CONTROL.modelo);
2135
2159
  informar(`${id} guardado como modelo por defecto, además de aplicarlo a esta sesión`);
2136
2160
  }
2137
2161
  // El defecto acaba de cambiar, así que lo que el cliente pinta como «por defecto» se
@@ -4133,6 +4157,27 @@ export function commitDeTurnoCableado(opciones) {
4133
4157
  return hecho.via === "fallo" ? `no se pudo commitear el turno: ${hecho.motivo}` : undefined;
4134
4158
  };
4135
4159
  }
4160
+ /**
4161
+ * El mantenimiento de la memoria del agente, cableado — y EXTRAÍDO por el motivo de siempre:
4162
+ * compuesto dentro del cierre de `arrancarConsolaWeb`, que todos sus tests doblan, esta regla
4163
+ * estaría escrita y no probada. Es la novena vez que este repo tropieza con lo mismo.
4164
+ *
4165
+ * Lo que aquí se puede caer sin que TypeScript diga nada son las DOS mitades: pedir el
4166
+ * checkpointer del proyecto que TOCA —`crearCheckpointerDeProyecto` devuelve la conexión
4167
+ * compartida, y una segunda competiría con nosotros mismos por el lock exclusivo del
4168
+ * `VACUUM`— y devolver el resumen en vez de tragárselo, que es lo único que hace visible que
4169
+ * esto corrió.
4170
+ *
4171
+ * `podar` entra por parámetro para poder mirarlo desde fuera sin una base delante.
4172
+ */
4173
+ export function mantenimientoDeMemoriaCableado(opciones) {
4174
+ const podar = opciones?.podar ?? mantenimientoDelCheckpointer;
4175
+ const abrir = opciones?.checkpointer ?? crearCheckpointerDeProyecto;
4176
+ return (raiz) => {
4177
+ const hecho = podar(abrir(raiz), raiz);
4178
+ return hecho === undefined ? undefined : resumenDePoda(hecho);
4179
+ };
4180
+ }
4136
4181
  /**
4137
4182
  * La mudanza de una vez de las copias que siguen en el reparto viejo, cableada — y extraída
4138
4183
  * por el motivo de siempre: compuesta dentro del cierre de `arrancarConsolaWeb`, que todos
@@ -4772,6 +4817,9 @@ function vestibuloReal(opciones, servidor, escribir, informar) {
4772
4817
  commitearTurno: commitDeTurnoCableado({
4773
4818
  base: () => cargarSettings().settings.workspace ?? baseDeWorkspacePorOmision(),
4774
4819
  }),
4820
+ // Y el mantenimiento de esa memoria: pasada la cota, se poda lo que ya no reanuda. La
4821
+ // composición está EXTRAÍDA y probada (`mantenimientoDeMemoriaCableado`).
4822
+ mantenerMemoria: mantenimientoDeMemoriaCableado(),
4775
4823
  olvidarMarcaDeSesion: olvidarSesion,
4776
4824
  // La memoria del agente por hilo. `historica` deja de ser «se reabrió» para ser «no hay
4777
4825
  // checkpoint que cargar», y borrar una sesión se lleva también su checkpoint.