xonecode 0.8.17 → 0.8.23

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 (53) hide show
  1. package/README.md +2 -2
  2. package/apps/web/dist/assets/index-CtYEobZI.css +1 -0
  3. package/apps/web/dist/assets/index-mTaG_gr6.js +478 -0
  4. package/apps/web/dist/assets/{php-Cu6F_QCJ.js → php-BEI3vU5S.js} +1 -1
  5. package/apps/web/dist/assets/{ruby-BiqQPoC6.js → ruby-DCYozE_k.js} +1 -1
  6. package/apps/web/dist/index.html +3 -3
  7. package/dist/agent/cloudstudio/cloudstudioMcp.js +9 -4
  8. package/dist/agent/cloudstudio/cloudstudioMcp.js.map +1 -1
  9. package/dist/agent/config/mudanzaEnDisco.js +10 -8
  10. package/dist/agent/config/mudanzaEnDisco.js.map +1 -1
  11. package/dist/agent/config/settingsEnDisco.js +2 -62
  12. package/dist/agent/config/settingsEnDisco.js.map +1 -1
  13. package/dist/agent/raizDelPaquete.js +1 -1
  14. package/dist/agent/subagentes/escrituraDeCodex.js +2 -2
  15. package/dist/agent/subagentes/escrituraExterna.js +36 -9
  16. package/dist/agent/subagentes/escrituraExterna.js.map +1 -1
  17. package/dist/agent/subagentes/pluginDeSkills.js +1 -1
  18. package/dist/agent/subagentes/subagenteExterno.js +4 -4
  19. package/dist/agent/subagentes/subagenteOpencode.js +1 -1
  20. package/dist/agent/turno/turnoReal.js +35 -5
  21. package/dist/agent/turno/turnoReal.js.map +1 -1
  22. package/dist/bin.js +1 -1
  23. package/dist/cli/consola.js +38 -48
  24. package/dist/cli/consola.js.map +1 -1
  25. package/dist/cli/doctor.js +1 -1
  26. package/dist/cli/main.js +40 -22
  27. package/dist/cli/main.js.map +1 -1
  28. package/dist/cli/run.js +1 -1
  29. package/dist/cli/tui/sidebar.js +1 -1
  30. package/dist/core/dispositivos.js +3 -3
  31. package/dist/core/modoDeEscritura.js +115 -0
  32. package/dist/core/modoDeEscritura.js.map +1 -0
  33. package/dist/core/mudanzaDeWorkspace.js +8 -5
  34. package/dist/core/mudanzaDeWorkspace.js.map +1 -1
  35. package/dist/core/puedeLanzarse.js +3 -3
  36. package/dist/core/selectorDeCarpeta.js +2 -2
  37. package/dist/core/settings.js +0 -45
  38. package/dist/core/settings.js.map +1 -1
  39. package/dist/core/version.js +2 -2
  40. package/dist/web/servidor/arranque.js +102 -30
  41. package/dist/web/servidor/arranque.js.map +1 -1
  42. package/dist/web/servidor/consolaDeTarea.js +1 -1
  43. package/dist/web/servidor/consolaDeTarea.js.map +1 -1
  44. package/dist/web/servidor/consolaWeb.js +7 -0
  45. package/dist/web/servidor/consolaWeb.js.map +1 -1
  46. package/dist/web/servidor/sesiones.js +27 -0
  47. package/dist/web/servidor/sesiones.js.map +1 -1
  48. package/dist/web/servidor/transporte.js.map +1 -1
  49. package/dist/web/servidor/vestibulo.js +22 -1
  50. package/dist/web/servidor/vestibulo.js.map +1 -1
  51. package/package.json +1 -1
  52. package/apps/web/dist/assets/index-Boak51UP.css +0 -1
  53. package/apps/web/dist/assets/index-Cg28x6nG.js +0 -477
@@ -1 +1 @@
1
- {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/core/settings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/core/settings.ts"],"names":[],"mappings":"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"}
@@ -20,12 +20,12 @@
20
20
  */
21
21
  export function lineaDeVersion(v) {
22
22
  if (v.commit === undefined)
23
- return `xonecode ${v.version}`;
23
+ return `XOneCode ${v.version}`;
24
24
  const estado = v.sucio === true
25
25
  ? " + cambios sin commitear"
26
26
  : v.sucio === undefined
27
27
  ? " (no se pudo mirar si hay cambios sin commitear)"
28
28
  : "";
29
- return `xonecode ${v.version} · ${v.commit}${estado}`;
29
+ return `XOneCode ${v.version} · ${v.commit}${estado}`;
30
30
  }
31
31
  //# sourceMappingURL=version.js.map
@@ -63,7 +63,8 @@ import { borrarCredencial, guardarCredencial } from "../../agent/config/authEnDi
63
63
  import { borrarProveedorPersonalizado, guardarProveedorPersonalizado, proveedoresPersonalizados, } from "../../agent/config/configEnDisco.js";
64
64
  import { crearCheckpointerDeProyecto, hayCheckpoint, olvidarHilo, } from "../../agent/sesiones/checkpointer.js";
65
65
  import { cargarSettings, guardarConcurrenciaDeTareas, guardarWorkspace as guardarWorkspaceEnDisco, guardarDispositivos, guardarEntorno as guardarEntornoEnDisco, } from "../../agent/config/settingsEnDisco.js";
66
- import { dentroDelWorkspace, expandirConCasa, motivoDeWorkspaceInaceptable, seAplicaSinAprobacion, } from "../../core/settings.js";
66
+ import { dentroDelWorkspace, expandirConCasa, motivoDeWorkspaceInaceptable, } from "../../core/settings.js";
67
+ import { esModoDeEscritura, MODO_POR_OMISION, } from "../../core/modoDeEscritura.js";
67
68
  import { mudarWorkspaceLegado } from "../../agent/config/mudanzaEnDisco.js";
68
69
  import { elegirCarpetaEnMaquina, haySelectorDeCarpeta } from "../../agent/config/selectorEnMaquina.js";
69
70
  import { cloudstudioDelProyecto } from "../../agent/config/configEnDisco.js";
@@ -188,6 +189,9 @@ function tipoServido(mime) {
188
189
  export function montarRutas(servidor, vestibulo, opciones = {}) {
189
190
  const informar = opciones.informar ?? (() => { });
190
191
  const hayCredencialDe = opciones.hayCredencial ?? (() => false);
192
+ // Se llama UNA vez, aquí: no cambia mientras el proceso vive, y es el mismo dato que ya se
193
+ // imprime por terminal al arrancar (`arrancarConsolaWeb`).
194
+ const version = opciones.version?.();
191
195
  /** Los personalizados dados de alta AHORA: se relee en cada mensaje, porque esta misma
192
196
  * ventana los da de alta y de baja sin reiniciar nada. */
193
197
  const personalizados = () => opciones.proveedoresPersonalizados?.() ?? [];
@@ -441,29 +445,32 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
441
445
  ramas,
442
446
  proyectoAbierto,
443
447
  ...(modo === undefined ? {} : { modo }),
448
+ // Solo «XOneCode X.X.X», para el pie de la barra: ahí no hay sitio para el commit ni
449
+ // para si el árbol está sucio —eso es lo que ya dice `lineaDeVersion` por terminal—,
450
+ // así que no se reutiliza esa función y se compone la línea corta aquí.
451
+ ...(version === undefined ? {} : { version: `XOneCode ${version.version}` }),
444
452
  ...(entornoElegido === undefined ? {} : { entornoActivo: entornoElegido }),
445
453
  ...(activo === undefined ? {} : { proyectoActivo: activo }),
446
454
  ...(abierto?.sesion === undefined ? {} : { sesionActiva: abierto.sesion }),
447
455
  ...(abierto?.dispositivo === undefined ? {} : { dispositivoActivo: abierto.dispositivo }),
448
456
  ...(abierto?.historica === true ? { historica: true } : {}),
449
- // Este proyecto escribe sin preguntar. Viaja en el ALTA y no solo en el aviso del
450
- // turno porque la decisión se tomó una vez, quizá hace meses, y quien se sienta hoy
451
- // tiene que saberlo ANTES de pedir nada — no después, con los ficheros ya cambiados.
452
- // Se calcula aquí y no se guarda: las tres condiciones incluyen si hay alguien
453
- // delante, y eso cambia con la conexión.
454
- ...(abierto !== undefined &&
455
- seAplicaSinAprobacion({
456
- raiz: abierto.estadoDeSesion.raiz,
457
- sinAprobacion: cargarSettings().settings.sinAprobacion,
458
- cloudstudio: cloudstudioDelProyecto(abierto.estadoDeSesion.raiz),
459
- // `true` sin más, y hay que decir por qué no es una simplificación: el alta se
460
- // EMITE, o sea que solo llega a un cliente conectado, y la consola web declara
461
- // `interactivo: true` por la misma razón (`consolaWeb.ts`). Quien decide de verdad
462
- // en cada ronda es el ejecutor, que vuelve a preguntar las tres condiciones.
463
- interactivo: true,
464
- })
465
- ? { sinAprobacion: true }
466
- : {}),
457
+ /**
458
+ * **El modo de escritura de la sesión abierta**: supervisado o autónomo.
459
+ *
460
+ * Viaja en el ALTA y no solo en el aviso del turno porque quien se sienta hoy tiene
461
+ * que saber en qué modo está ANTES de pedir nada — no después, con los ficheros ya
462
+ * cambiados. Y viaja el MODO, no un booleano «sin aprobación»: es el dato que la
463
+ * pastilla del compositor tiene que pintar, y derivar el booleano de él es trivial
464
+ * mientras que lo contrario no.
465
+ *
466
+ * **Ausente = no hay sesión abierta**, que es por qué la pastilla no se pinta: un
467
+ * control sin dato detrás no se pinta. Lo dice el SERVIDOR leyendo el estado de la
468
+ * consola abierta, igual que el modelo en vigor — releer un fichero contaría lo de
469
+ * antes para siempre, y aquí ya no hay fichero que releer.
470
+ */
471
+ ...(abierto === undefined
472
+ ? {}
473
+ : { modoDeEscritura: abierto.estadoDeSesion.modo ?? MODO_POR_OMISION }),
467
474
  // Solo si SE MIRÓ y había algo. Las otras tres respuestas —limpio, sin git, no se
468
475
  // pudo— se callan: un mensaje en cada apertura limpia es ruido en casi todas, y el
469
476
  // aviso dejaría de leerse justo el día que importa.
@@ -581,7 +588,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
581
588
  * lo que aquello prometía es `restaurar`, y se dice en el mismo sitio donde se rechaza.
582
589
  */
583
590
  if (mensaje.accion === "borrar" && mensaje.ambito === "global" && esDeSerie(mensaje.agente.nombre)) {
584
- informar(`«${mensaje.agente.nombre}» lo trae xonecode y no se borra: edítalo, o restaura el de serie si quieres el original`);
591
+ informar(`«${mensaje.agente.nombre}» lo trae XOneCode y no se borra: edítalo, o restaura el de serie si quieres el original`);
585
592
  return;
586
593
  }
587
594
  /**
@@ -603,7 +610,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
603
610
  * de los dos se queda sin la regla.
604
611
  */
605
612
  if (renombrandoDe !== undefined && mensaje.ambito === "global" && esDeSerie(renombrandoDe)) {
606
- informar(`«${renombrandoDe}» lo trae xonecode y su nombre no se cambia: es lo que lo ata a la versión de serie`);
613
+ informar(`«${renombrandoDe}» lo trae XOneCode y su nombre no se cambia: es lo que lo ata a la versión de serie`);
607
614
  return;
608
615
  }
609
616
  if (mensaje.ambito === "proyecto" && abierto === undefined) {
@@ -752,7 +759,7 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
752
759
  informar(borrarSkill(base, nombre)
753
760
  ? `skill «${nombre}» borrada`
754
761
  : esDeSerieLaSkill(nombre)
755
- ? `la skill «${nombre}» la trae xonecode y no se borra: cópiala si quieres partir de ella`
762
+ ? `la skill «${nombre}» la trae XOneCode y no se borra: cópiala si quieres partir de ella`
756
763
  : `«${nombre}» no existía en ${mensaje.ambito}`);
757
764
  emitirSkills();
758
765
  return;
@@ -1740,12 +1747,21 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
1740
1747
  /**
1741
1748
  * Los proyectos de UN entorno, SIN hacerlo activo.
1742
1749
  *
1743
- * El hermano de `atenderEntornoActivo`, y lo que los separa es todo lo que este NO hace:
1744
- * no toca `entornoElegido`, ni `proyectos`, ni `ramas`, ni `proyectoElegido`, ni pone
1745
- * `aviso`. Es una pregunta para las casillas de una pestaña de Ajustes, y mudar el entorno
1746
- * activo desde ahí le cambiaría la barra —y los proyectos de los que se habla— a quien
1747
- * esté trabajando en otro servidor. Por eso la aserción que sostiene el diseño en
1748
- * `arranque.test.ts` es que `alta.entornoActivo` no cambia.
1750
+ * El hermano de `atenderEntornoActivo`, y lo que los separa es casi todo lo que este NO
1751
+ * hace: no toca `entornoElegido`, ni `ramas`, ni `proyectoElegido`, ni pone `aviso`. Es una
1752
+ * pregunta para las casillas de una pestaña de Ajustes, y mudar el entorno activo desde ahí
1753
+ * le cambiaría la barra —y los proyectos de los que se habla— a quien esté trabajando en
1754
+ * otro servidor. Por eso la aserción que sostiene el diseño en `arranque.test.ts` es que
1755
+ * `alta.entornoActivo` no cambia.
1756
+ *
1757
+ * **La excepción es `proyectos`, y solo cuando el entorno preguntado ES el activo**: esa
1758
+ * variable es la fuente de `alta.proyectos`, lo único que pinta la barra
1759
+ * (`Barra.tsx#alaVista`), así que sin refrescarla aquí un proyecto recién aparecido en
1760
+ * CloudStudio se podía MARCAR visible desde Ajustes y no verse nunca — `alta.proyectos`
1761
+ * seguía siendo la foto de cuando el entorno se activó, y el `filter` de la barra descarta
1762
+ * en silencio un id de `visibles` que no tiene proyecto con el que cruzar. No hace falta
1763
+ * para uno NO activo: ese hueco se cierra solo en cuanto se activa, que es cuando
1764
+ * `atenderEntornoActivo` pide la lista de verdad.
1749
1765
  *
1750
1766
  * No se cachea, a propósito: cada apertura de pestaña pregunta. Con caché, la pestaña
1751
1767
  * podría contradecir a la barra en cuanto alguien cree un proyecto en Studio, y aquí hay
@@ -1758,6 +1774,8 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
1758
1774
  const atenderProyectosDeEntorno = async (entorno) => {
1759
1775
  try {
1760
1776
  const suyos = await vestibulo.proyectosDe(entorno);
1777
+ if (entorno === entornoElegido)
1778
+ proyectos = suyos;
1761
1779
  emitir({
1762
1780
  clase: "proyectosDeEntorno",
1763
1781
  entorno,
@@ -1765,8 +1783,11 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
1765
1783
  id: p.id,
1766
1784
  nombre: p.nombre,
1767
1785
  ...(p.compartido === undefined ? {} : { compartido: p.compartido }),
1786
+ ...(p.ultimoAcceso === undefined ? {} : { ultimoAcceso: p.ultimoAcceso }),
1768
1787
  })),
1769
1788
  });
1789
+ if (entorno === entornoElegido)
1790
+ await anunciarAlta().catch(contar);
1770
1791
  }
1771
1792
  catch (error) {
1772
1793
  contar(error);
@@ -2018,6 +2039,33 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
2018
2039
  }
2019
2040
  abierto.consola.encolar(`/esfuerzo ${nivel}`);
2020
2041
  };
2042
+ /**
2043
+ * El MODO DE ESCRITURA de la sesión abierta.
2044
+ *
2045
+ * Se encola `/aprobacion`, que es el MISMO manejador que usa el terminal: la función se
2046
+ * comparte y la sintaxis no se exporta, igual que con `/modelo` y `/esfuerzo`. Y **no se
2047
+ * guarda ningún defecto**: el modo es de la sesión y solo de la sesión — un defecto
2048
+ * persistido es justo lo que se acaba de retirar, y no se vuelve a meter por inercia.
2049
+ *
2050
+ * Sin proyecto abierto no hay sesión a la que aplicárselo, y se DICE en vez de callarlo:
2051
+ * la pastilla solo se pinta con sesión, así que llegar aquí sin ella es un cliente
2052
+ * desincronizado y merece una frase, no un silencio.
2053
+ */
2054
+ const atenderModoDeEscritura = (modo) => {
2055
+ const abierto = vestibulo.proyectoAbierto();
2056
+ if (abierto === undefined) {
2057
+ informar("no hay ninguna sesión abierta a la que cambiarle el modo de escritura");
2058
+ return;
2059
+ }
2060
+ // Se criba contra el vocabulario ANTES de encolar: lo que llega del cable acaba siendo
2061
+ // un parámetro, y el manejador ya lo rechazaría, pero su rechazo se imprimiría como una
2062
+ // línea de consola en vez de un aviso. Aquí se dice mejor.
2063
+ if (!esModoDeEscritura(modo)) {
2064
+ informar(`«${String(modo)}» no es un modo de escritura`);
2065
+ return;
2066
+ }
2067
+ abierto.consola.encolar(`/aprobacion ${modo}`);
2068
+ };
2021
2069
  /**
2022
2070
  * Pregunta a Ollama si el modelo en vigor piensa, y vuelve a emitir cuando conteste.
2023
2071
  *
@@ -2921,7 +2969,22 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
2921
2969
  // tocan disco), así que la única forma de enterarse es que el vestíbulo lo diga. Sin
2922
2970
  // esto, el disparador del compositor seguiría enseñando el modelo con el que se abrió la
2923
2971
  // sesión después de haberlo cambiado — una cifra con forma de verdad.
2924
- vestibulo.alCambiarEstadoDeSesion(() => emitirModelos());
2972
+ vestibulo.alCambiarEstadoDeSesion(() => {
2973
+ emitirModelos();
2974
+ /**
2975
+ * **Y el ALTA, porque el modo de escritura viaja ahí y no en `modelos`.**
2976
+ *
2977
+ * `/aprobacion` cambia el modo dentro del lazo igual que `/modelo` cambia el modelo, y
2978
+ * sin esta línea la pastilla se quedaba en el valor de antes hasta el siguiente flanco
2979
+ * de turno: un control que MIENTE durante un turno entero, y justo el que decide si los
2980
+ * ficheros se escriben sin enseñarte el diff. No se mete el campo dentro de `modelos`
2981
+ * para ahorrarse esto, porque no es una propiedad del modelo.
2982
+ *
2983
+ * Se traga el fallo como los demás llamadores: un alta que no se pudo componer no puede
2984
+ * llevarse por delante un cambio de modelo que sí surtió efecto.
2985
+ */
2986
+ void anunciarAlta().catch(contar);
2987
+ });
2925
2988
  // El turno se emite solo (`consolaWeb.turno`), pero además hay que RECORDARLO: una pestaña
2926
2989
  // que conecta a mitad no vio ese mensaje, y necesita saberlo para apagar su compositor.
2927
2990
  /**
@@ -3583,6 +3646,12 @@ export function montarRutas(servidor, vestibulo, opciones = {}) {
3583
3646
  respuesta.end();
3584
3647
  return;
3585
3648
  }
3649
+ if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "modoDeEscritura") {
3650
+ atenderModoDeEscritura(mensaje.modo);
3651
+ respuesta.writeHead(204);
3652
+ respuesta.end();
3653
+ return;
3654
+ }
3586
3655
  if (typeof mensaje === "object" && mensaje !== null && mensaje.clase === "agente") {
3587
3656
  atenderAgente(mensaje);
3588
3657
  respuesta.writeHead(204);
@@ -3922,7 +3991,7 @@ function fotoDeDispositivo(dispositivo) {
3922
3991
  * con «yo no puedo», que se arreglan en sitios distintos.
3923
3992
  */
3924
3993
  const SIN_NOMBRE_DE_APP = "No se puede lanzar sin saber cómo se llama la app: el nombre sale del `name=` de app.ini, y ese fichero no está o no lo dice. Ábrelo en XOne Studio y vuelve a guardarlo.";
3925
- const SIN_CAMINO_DE_LANZAMIENTO = "Esta ejecución de xonecode no puede lanzar apps —no tiene montado el lanzamiento—, así que el veredicto se puede mirar pero no ejecutar.";
3994
+ const SIN_CAMINO_DE_LANZAMIENTO = "Esta ejecución de XOneCode no puede lanzar apps —no tiene montado el lanzamiento—, así que el veredicto se puede mirar pero no ejecutar.";
3926
3995
  /**
3927
3996
  * Lo que la pestaña CloudStudio enseña: de qué rama es este proyecto y cuántos ficheros
3928
3997
  * quedan por subir.
@@ -4423,6 +4492,9 @@ export async function arrancarConsolaWeb(opciones) {
4423
4492
  // El tope de ventana, tal cual llega: es la misma función que la barra del terminal, y
4424
4493
  // dos resoluciones serían dos porcentajes distintos para el mismo modelo.
4425
4494
  ...(opciones.topeDeContexto === undefined ? {} : { topeDeContexto: opciones.topeDeContexto }),
4495
+ // La misma función que ya usa la línea de terminal (`lineaDeVersion(version)` más abajo):
4496
+ // un proceso, una versión, un solo sitio que la calcula.
4497
+ ...(opciones.version === undefined ? {} : { version: opciones.version }),
4426
4498
  ...(corredor === undefined ? {} : { revisarTareas: () => corredor.revisar() }),
4427
4499
  // El PUERTO de disco y el corredor, no operaciones sueltas: `montarRutas` resuelve
4428
4500
  // `crearTarea`/`accionDeTarea` con SU propio estado (`proyectos`, `entornoElegido`,