chocolatito-code 1.3.2 → 1.3.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.
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ import { codigoDeSalida, EXIT_OK, EXIT_FALLO, EXIT_USO, EXIT_LICENCIA } from "./
15
15
  import { showBanner, animateStartupBanner, showHelp, showEffortMenu } from "./ui/banner.js";
16
16
  import { fijarMotor } from "./ui/motorActual.js";
17
17
  import { elegirDeLista } from "./ui/selector.js";
18
+ import { reafirmarModoCrudo } from "./ui/keyboardGuard.js";
18
19
  import { askInteractivePrompt, SLASH_COMMANDS } from "./ui/prompt.js";
19
20
  import { changeDir } from "./tools/changeDir.js";
20
21
  import { gitDiff, gitCommit } from "./tools/gitTools.js";
@@ -237,7 +238,7 @@ ${nodeViejo}
237
238
  let currentModel = DEFAULT_ESPECTRO;
238
239
  // La barra de estado lo lee de aqui. Fijarlo al arrancar y no solo al
239
240
  // cambiarlo: si no, hasta el primer /effort la barra no dice nada.
240
- fijarMotor(currentModel.name);
241
+ fijarMotor(currentModel.name, currentModel.effortLevel);
241
242
  let isPlanMode = false;
242
243
  let systemPrompt = buildSystemPrompt(context, currentModel, skillManager, memoryManager, isPlanMode);
243
244
  const agent = new AgentLoop(apiKey, getEngineBaseUrl(), currentModel, systemPrompt);
@@ -434,7 +435,7 @@ ${sessionData}
434
435
  const restauracion = prepararRestauracion(loaded, { cwd: agent.currentCwd, modelId: currentModel.id });
435
436
  agent.currentCwd = restauracion.cwd;
436
437
  currentModel = ESPECTRO_MODELS[restauracion.modelId] || currentModel;
437
- fijarMotor(currentModel.name);
438
+ fijarMotor(currentModel.name, currentModel.effortLevel);
438
439
  const refreshedContext = await getProjectContext(agent.currentCwd);
439
440
  systemPrompt = buildSystemPrompt(refreshedContext, currentModel, skillManager, memoryManager, isPlanMode);
440
441
  agent.messages = [{ role: "system", content: systemPrompt }, ...restauracion.conversacion];
@@ -612,7 +613,7 @@ Directivas de ejecución:
612
613
  }
613
614
  currentModel = ESPECTRO_MODELS[targetId];
614
615
  // Sin esto la barra de abajo sigue anunciando el motor anterior.
615
- fijarMotor(currentModel.name);
616
+ fijarMotor(currentModel.name, currentModel.effortLevel);
616
617
  const refreshedContext = await getProjectContext(agent.currentCwd);
617
618
  const updatedPrompt = buildSystemPrompt(refreshedContext, currentModel, skillManager, memoryManager, isPlanMode);
618
619
  agent.setEspectroModel(currentModel, updatedPrompt);
@@ -623,6 +624,20 @@ Directivas de ejecución:
623
624
  `
624
625
  ${chalk.italic.gray(currentModel.description)}
625
626
  `);
627
+ // EL TECLADO SE QUEDABA TRABADO AL CAMBIAR DE MOTOR
628
+ //
629
+ // "una vez cambiado de effort se queda trabado y con un enter se va la
630
+ // traba". Ese "con un enter se arregla" es la firma del modo COCIDO: la
631
+ // consola retiene lo tecleado hasta el salto de linea, asi que el prompt
632
+ // no recibe nada hasta que pulsas Enter.
633
+ //
634
+ // Aqui en medio se refresca el contexto del proyecto, que lanza git. Un
635
+ // hijo que hereda la consola puede devolverla en cocido al terminar, y
636
+ // Node no se entera: `process.stdin.isRaw` sigue diciendo true. Por eso el
637
+ // vigilante del prompt no lo arregla —solo actua cuando SABE que se
638
+ // perdio— y hace falta reafirmar, que pasa por false antes de poner true
639
+ // y por tanto no se lo come la cache de libuv.
640
+ reafirmarModoCrudo(process.stdin);
626
641
  continue;
627
642
  }
628
643
  if (trimmed === "/clear") {
package/dist/ui/marco.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import chalk from "chalk";
2
2
  import { describeMode, getMode, TRIANGULOS } from "./modes.js";
3
- import { motorActual } from "./motorActual.js";
3
+ import { ESFUERZO_MAXIMO, esfuerzoActual, marcaDeMotor, motorActual } from "./motorActual.js";
4
4
  /**
5
5
  * EL MARCO DE LA BARRA, EN UN SOLO SITIO
6
6
  *
@@ -137,10 +137,19 @@ export function buildPromptFrame(opts) {
137
137
  const modePlain = `${TRIANGULOS} modo ${modeLook.label}`;
138
138
  // Estaba escrito a mano y por eso no cambiaba nunca. Vacio si nadie lo ha
139
139
  // fijado: mejor un hueco que un nombre que no es el que se esta usando.
140
- const enginePlain = motorActual();
140
+ //
141
+ // El nivel de esfuerzo va PEGADO al motor y no en una linea aparte: es un dato
142
+ // del mismo hecho -con que potencia trabajas-, y una fila mas en el pie es una
143
+ // fila menos de conversacion en pantalla.
144
+ const nivel = esfuerzoActual();
145
+ const marca = marcaDeMotor(nivel);
146
+ const motor = motorActual();
147
+ const enginePlain = motor ? `${marca ? `${marca} ` : ""}${motor}${nivel ? ` · ${nivel}` : ""}` : "";
141
148
  const hintPlain = "shift+tab cambia · esc cancela · ? /help";
142
149
  const modeTag = chalk.hex(modeLook.color)(modePlain);
143
- const engine = chalk.gray(enginePlain);
150
+ // En el maximo se pinta encendido, no en gris: es el unico nivel que conviene
151
+ // que se note, porque es el que se come la cuota.
152
+ const engine = nivel === ESFUERZO_MAXIMO ? chalk.hex("#FFA500")(enginePlain) : chalk.gray(enginePlain);
144
153
  // Dos columnas de respiro. Los triangulos son un glifo de anchura ambigua y
145
154
  // hay terminales que lo pintan doble: si la linea llegara justa al ancho, el
146
155
  // terminal la partiria en dos filas y el repintado del marco se descuadraria
@@ -18,7 +18,21 @@
18
18
  * por que conocer al otro.
19
19
  */
20
20
  /** Lo pone index.ts al arrancar y cada vez que se cambia de motor. */
21
- export declare function fijarMotor(nuevo: string): void;
21
+ export declare function fijarMotor(nuevo: string, nivel?: string): void;
22
+ /** El nivel de esfuerzo activo ("Normal", "Alto", "Extendido", "Máximo"). */
23
+ export declare function esfuerzoActual(): string;
24
+ /** El nivel mas alto. Es el unico que se anuncia distinto. */
25
+ export declare const ESFUERZO_MAXIMO = "M\u00E1ximo";
26
+ /**
27
+ * La marca que precede al nombre del motor.
28
+ *
29
+ * Recibe el reloj en vez de leerlo: asi se puede comprobar fotograma a
30
+ * fotograma, que dentro de un terminal no se revisa a ojo.
31
+ *
32
+ * Cambia cada 180 ms, no cada 120 como el spinner. Dos cosas latiendo al mismo
33
+ * ritmo se leen como una sola parpadeando; a ritmos distintos se distinguen.
34
+ */
35
+ export declare function marcaDeMotor(nivel?: string, ahora?: number): string;
22
36
  /**
23
37
  * El nombre del motor activo.
24
38
  *
@@ -18,10 +18,42 @@
18
18
  * por que conocer al otro.
19
19
  */
20
20
  let nombre = "";
21
+ let esfuerzo = "";
21
22
  /** Lo pone index.ts al arrancar y cada vez que se cambia de motor. */
22
- export function fijarMotor(nuevo) {
23
+ export function fijarMotor(nuevo, nivel = "") {
23
24
  if (nuevo && nuevo.trim())
24
25
  nombre = nuevo.trim();
26
+ if (nivel && nivel.trim())
27
+ esfuerzo = nivel.trim();
28
+ }
29
+ /** El nivel de esfuerzo activo ("Normal", "Alto", "Extendido", "Máximo"). */
30
+ export function esfuerzoActual() {
31
+ return esfuerzo;
32
+ }
33
+ /** El nivel mas alto. Es el unico que se anuncia distinto. */
34
+ export const ESFUERZO_MAXIMO = "Máximo";
35
+ /**
36
+ * Los cuatro fotogramas del latido del maximo.
37
+ *
38
+ * Solo se anima el nivel mas alto, y a proposito: si parpadeara siempre seria
39
+ * ruido de fondo que se deja de ver a los dos minutos. Animando solo el maximo,
40
+ * el movimiento SIGNIFICA algo -"estas gastando el motor caro"- en vez de ser
41
+ * decoracion.
42
+ */
43
+ const LATIDO = ["◇", "◈", "◆", "◈"];
44
+ /**
45
+ * La marca que precede al nombre del motor.
46
+ *
47
+ * Recibe el reloj en vez de leerlo: asi se puede comprobar fotograma a
48
+ * fotograma, que dentro de un terminal no se revisa a ojo.
49
+ *
50
+ * Cambia cada 180 ms, no cada 120 como el spinner. Dos cosas latiendo al mismo
51
+ * ritmo se leen como una sola parpadeando; a ritmos distintos se distinguen.
52
+ */
53
+ export function marcaDeMotor(nivel = esfuerzo, ahora = Date.now()) {
54
+ if (nivel !== ESFUERZO_MAXIMO)
55
+ return "";
56
+ return LATIDO[Math.floor(ahora / 180) % LATIDO.length];
25
57
  }
26
58
  /**
27
59
  * El nombre del motor activo.
@@ -2,7 +2,7 @@
2
2
  "manifest_version": 3,
3
3
  "minimum_chrome_version": "102",
4
4
  "name": "Chocolatito Code",
5
- "version": "1.3.2",
5
+ "version": "1.3.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.3.2",
3
+ "version": "1.3.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": {