chocolatito-code 1.4.2 → 1.4.3

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.
@@ -13,6 +13,8 @@ export function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, }) {
13
13
  const [texto, setTexto] = useState("");
14
14
  const [cursor, setCursor] = useState(0);
15
15
  const [elegido, setElegido] = useState(0);
16
+ /** Contador para forzar un dibujado cuando cambia algo de fuera de React. */
17
+ const [, setRedibujar] = useState(0);
16
18
  const historial = useRef(leerHistorial());
17
19
  const [posHistorial, setPosHistorial] = useState(historial.current.length);
18
20
  // Se escanea UNA vez por prompt, no en cada tecla: recorrer el proyecto entero
@@ -44,6 +46,11 @@ export function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, }) {
44
46
  // ------------------------------------------- cambiar el modo de permisos
45
47
  if (tecla.tab && tecla.shift) {
46
48
  cycleMode();
49
+ // El modo NO vive en el estado de React: lo guarda modes.ts, que lo
50
+ // comparten el prompt, el vigilante de teclas y el dialogo de permisos.
51
+ // Sin este empujon, React no tiene motivo para volver a dibujar y la barra
52
+ // se queda anunciando el modo anterior mientras el de verdad ya cambio.
53
+ setRedibujar((n) => n + 1);
47
54
  return;
48
55
  }
49
56
  // ------------------------------------------------------------- enviar
@@ -90,6 +90,22 @@ export async function preguntarConInk(promptSymbol = "❯", cwd = process.cwd())
90
90
  instancia.waitUntilExit().then(() => {
91
91
  escribirTardio = null;
92
92
  limpiarPegados();
93
+ // EL PROGRAMA SE CERRABA SOLO AL ELEGIR /effort
94
+ //
95
+ // Ink desreferencia stdin al desmontarse (stdin.unref) para no dejar el
96
+ // proceso vivo por una entrada que ya nadie escucha. Muy razonable... pero
97
+ // lo que viene DESPUES del prompt tambien lee el teclado: el menu de
98
+ // /effort, el dialogo de permisos. Con stdin sin referencia, esos se
99
+ // quedan esperando una tecla mientras Node ve el bucle de eventos vacio y
100
+ // se cierra.
101
+ //
102
+ // Visto por el usuario: escribia "/efor", pulsaba Enter sobre la
103
+ // recomendacion, y Chocolatito desaparecia dejandolo en la ruta de la
104
+ // consola. Ni error ni despedida: como si nunca hubiera estado.
105
+ //
106
+ // Se vuelve a referenciar aqui, que es el punto por el que se pasa SIEMPRE
107
+ // al cerrar el prompt, venga la orden de donde venga.
108
+ process.stdin.ref?.();
93
109
  // Si el árbol muere sin haber entregado nada -una excepción, un Ctrl+C
94
110
  // del sistema-, la promesa no puede quedarse colgada: el bucle se
95
111
  // detendría para siempre sin decir por qué.
@@ -24,6 +24,16 @@ export async function elegirDeLista(titulo, opciones, indiceInicial = 0) {
24
24
  if (process.stdin.setRawMode)
25
25
  process.stdin.setRawMode(true);
26
26
  process.stdin.resume();
27
+ // Y referenciado, no solo reanudado. Son cosas distintas: `resume` hace que
28
+ // lleguen los datos, `ref` hace que Node considere que hay trabajo
29
+ // pendiente. Sin lo segundo, este menu se queda esperando una tecla
30
+ // mientras el proceso ve el bucle de eventos vacio y se cierra solo.
31
+ //
32
+ // No es hipotetico: paso justo aqui. Ink desreferencia stdin al desmontar el
33
+ // prompt, y al abrir este menu Chocolatito desaparecia dejando al usuario en
34
+ // la ruta de la consola. Se arreglo tambien alli, pero este menu no tiene
35
+ // por que depender de quien haya corrido antes.
36
+ process.stdin.ref?.();
27
37
  /** Filas del ultimo dibujo. Se repinta encima, sin dejar restos. */
28
38
  let filas = 0;
29
39
  function pintar() {
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "minimum_chrome_version": "102",
4
4
  "name": "Chocolatito Code",
5
- "version": "1.4.2",
5
+ "version": "1.4.3",
6
6
  "description": "Deja que Chocolatito Code trabaje dentro de tu Chrome, en segundo plano y con tus sesiones ya iniciadas.",
7
7
  "permissions": [
8
8
  "tabs",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "chocolatito-code",
3
- "version": "1.4.2",
3
+ "version": "1.4.3",
4
4
  "description": "Agente autónomo de programación para la terminal, con control real del ordenador y del navegador. Desarrollado por Chocolatito.",
5
5
  "type": "module",
6
6
  "bin": {