chocolatito-code 1.6.2 → 1.6.4
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 +4 -1
- package/dist/ui/banner.js +9 -4
- package/dist/ui/ink/App.js +22 -2
- package/dist/ui/ink/Prompt.d.ts +2 -2
- package/dist/ui/ink/Prompt.js +14 -6
- package/dist/ui/marco.js +7 -6
- package/extension/manifest.json +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -344,7 +344,10 @@ ${nodeViejo}
|
|
|
344
344
|
// Interactive REPL Mode with lively startup walking animation
|
|
345
345
|
await animateStartupBanner(context.cwd, currentModel);
|
|
346
346
|
// El atajo hay que anunciarlo: un modo que nadie sabe que existe no sirve.
|
|
347
|
-
console.log(
|
|
347
|
+
console.log(
|
|
348
|
+
// Dos saltos: uno separa del zorro y otro de la caja. Con uno solo, el
|
|
349
|
+
// arranque entero se lee como un bloque pegado.
|
|
350
|
+
chalk.gray(" shift+tab cambia el modo de permisos · puedes escribir mientras trabaja y se encola\n\n"));
|
|
348
351
|
if (getMode() !== "default")
|
|
349
352
|
console.log(` ${modeAnnouncement()}\n`);
|
|
350
353
|
// Lo que el usuario escribio mientras el agente trabajaba entra como siguiente
|
package/dist/ui/banner.js
CHANGED
|
@@ -112,7 +112,11 @@ export function buildBannerContent(cwd, model, isBlinking = false) {
|
|
|
112
112
|
const left = mascotLines[i] || " ";
|
|
113
113
|
combinedRows.push(`${left}${rightLines[i]}`);
|
|
114
114
|
}
|
|
115
|
-
|
|
115
|
+
// Dos filas en blanco al final, no una: el zorro y la caja de escribir se
|
|
116
|
+
// quedaban pegados y el arranque se veía apretado. Van DENTRO del contenido a
|
|
117
|
+
// propósito, para que `filasParaAnclar` las cuente sola y el anclaje siga
|
|
118
|
+
// cuadrando sin tener que acordarse de sumarlas aparte.
|
|
119
|
+
return ["", ...combinedRows, "", ""].join("\n");
|
|
116
120
|
}
|
|
117
121
|
/**
|
|
118
122
|
* Ventana por debajo de esto y no se ancla nada: no sobra sitio y el hueco solo
|
|
@@ -123,8 +127,9 @@ export const FILAS_MINIMAS_PARA_ANCLAR = 16;
|
|
|
123
127
|
* Filas que se imprimen DESPUES del banner y hay que dejarles sitio.
|
|
124
128
|
*
|
|
125
129
|
* Son el aviso del atajo (su texto ya trae un salto dentro, mas el que anade
|
|
126
|
-
* console.log:
|
|
127
|
-
* despues barra, entrada,
|
|
130
|
+
* console.log: 3 filas ahora, que lleva un salto de mas para separar del zorro)
|
|
131
|
+
* y el marco del prompt, que son cinco: una de aire y despues barra, entrada,
|
|
132
|
+
* barra y estado.
|
|
128
133
|
*
|
|
129
134
|
* AQUI ESTABA EL FALLO DEL ZORRO CORTADO
|
|
130
135
|
*
|
|
@@ -133,7 +138,7 @@ export const FILAS_MINIMAS_PARA_ANCLAR = 16;
|
|
|
133
138
|
* arriba la cabeza del zorro. El usuario lo vio en cuanto abrio: "hay mucho
|
|
134
139
|
* espacio y se baja y se corta el zorrito al iniciar".
|
|
135
140
|
*/
|
|
136
|
-
const FILAS_DESPUES_DEL_BANNER =
|
|
141
|
+
const FILAS_DESPUES_DEL_BANNER = 9;
|
|
137
142
|
/**
|
|
138
143
|
* Filas en blanco que hay que soltar ANTES de `contenido` para que el prompt
|
|
139
144
|
* acabe pegado al fondo de la ventana. Cero si no cabe o no hace falta.
|
package/dist/ui/ink/App.js
CHANGED
|
@@ -30,7 +30,17 @@ import { alCambiarElTurno, estadoDelTurno } from "./control.js";
|
|
|
30
30
|
*/
|
|
31
31
|
export function App() {
|
|
32
32
|
const { stdout } = useStdout();
|
|
33
|
-
|
|
33
|
+
// UNA FILA MENOS QUE LA VENTANA, Y ES LA CLAVE
|
|
34
|
+
//
|
|
35
|
+
// Ink escribe su arbol y detras un salto de linea. Si el arbol mide justo lo
|
|
36
|
+
// que la ventana, ese salto la desborda: el terminal desplaza una fila, y como
|
|
37
|
+
// Ink repinta subiendo el numero de filas que escribio, a partir de ahi borra
|
|
38
|
+
// una fila que ya no es la suya. En la pantalla alternativa, que no tiene
|
|
39
|
+
// historial al que recurrir, eso degenera en pantalla en negro.
|
|
40
|
+
//
|
|
41
|
+
// Es lo que se publico roto en la 1.6.0: "esta fallando, no sale nada". Las
|
|
42
|
+
// pruebas no lo cazan porque el terminal de mentira de la libreria no desplaza.
|
|
43
|
+
const filas = Math.max(6, (stdout?.rows || 24) - 1);
|
|
34
44
|
const [, setRedibujar] = useState(0);
|
|
35
45
|
const [subido, setSubido] = useState(0);
|
|
36
46
|
const [turno, setTurno] = useState(estadoDelTurno());
|
|
@@ -55,5 +65,15 @@ export function App() {
|
|
|
55
65
|
const altoDelTexto = Math.max(1, filas - altoBarra - altoAviso - (turno.esperando ? 5 : 0));
|
|
56
66
|
const visible = ventana(altoDelTexto, subido);
|
|
57
67
|
const huecos = Math.max(0, altoDelTexto - visible.length);
|
|
58
|
-
return (_jsxs(Box, { flexDirection: "column", height: filas, children: [Array.from({ length: huecos }, (_, i) => (_jsx(Text, { children: " " }, `hueco-${i}`))), visible.map((linea, i) => (_jsx(Text, { children: linea }, `h-${i}`))), subido > 0 && (_jsx(Text, { dimColor: true, children: ` ↑ ${subido} lineas mas arriba · Av Pag para volver al final` })), turno.esperando ? (_jsx(Prompt, { alEnviar: turno.responder, alCancelar: () => turno.responder("/exit"), cwd: turno.cwd, promptSymbol: turno.promptSymbol, avisos: [], sinHistorial: true, alDesplazar: (
|
|
68
|
+
return (_jsxs(Box, { flexDirection: "column", height: filas, children: [Array.from({ length: huecos }, (_, i) => (_jsx(Text, { children: " " }, `hueco-${i}`))), visible.map((linea, i) => (_jsx(Text, { children: linea }, `h-${i}`))), subido > 0 && (_jsx(Text, { dimColor: true, children: ` ↑ ${subido} lineas mas arriba · Av Pag para volver al final` })), turno.esperando ? (_jsx(Prompt, { alEnviar: turno.responder, alCancelar: () => turno.responder("/exit"), cwd: turno.cwd, promptSymbol: turno.promptSymbol, avisos: [], sinHistorial: true, alDesplazar: (direccion) => setSubido((n) => {
|
|
69
|
+
// El salto sale del alto SIN el aviso de "estas mirando atras".
|
|
70
|
+
// Si se contara, subir y bajar usarian bases distintas -el aviso
|
|
71
|
+
// solo existe cuando ya has subido- y bajar no deshacia lo que
|
|
72
|
+
// acababas de subir: el scroll derivaba solo.
|
|
73
|
+
const base = Math.max(1, filas - altoBarra - 5);
|
|
74
|
+
const salto = Math.max(1, Math.floor(base / 2));
|
|
75
|
+
return direccion > 0
|
|
76
|
+
? Math.min(tope(base), n + salto)
|
|
77
|
+
: Math.max(0, n - salto);
|
|
78
|
+
}) })) : (barraDeTrabajo.map((linea, i) => _jsx(Text, { children: linea }, `t-${i}`)))] }));
|
|
59
79
|
}
|
package/dist/ui/ink/Prompt.d.ts
CHANGED
|
@@ -44,7 +44,7 @@ export interface PromptProps {
|
|
|
44
44
|
* Sin esto se pintaria dos veces: una desde App y otra desde aqui.
|
|
45
45
|
*/
|
|
46
46
|
sinHistorial?: boolean;
|
|
47
|
-
/** Re Pag / Av Pag
|
|
48
|
-
alDesplazar?: (
|
|
47
|
+
/** Re Pag / Av Pag: +1 sube, -1 baja. El salto lo decide quien recibe. */
|
|
48
|
+
alDesplazar?: (direccion: number) => void;
|
|
49
49
|
}
|
|
50
50
|
export declare function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, sinHistorial, alDesplazar, }: PromptProps): React.ReactElement;
|
package/dist/ui/ink/Prompt.js
CHANGED
|
@@ -63,7 +63,12 @@ export function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, sinHis
|
|
|
63
63
|
// atras. Sin descontarla, el arbol mide una fila mas que la ventana y el
|
|
64
64
|
// terminal desplaza: la barra dejaria de estar clavada justo al usar el scroll,
|
|
65
65
|
// que es para lo que existe este modo.
|
|
66
|
-
|
|
66
|
+
// El alto SIN el aviso de "estas mirando atras". El salto se calcula sobre
|
|
67
|
+
// esto y no sobre el alto real: el aviso solo existe cuando ya has subido, asi
|
|
68
|
+
// que contarlo hacia que bajar no deshiciera lo que acababas de subir y el
|
|
69
|
+
// scroll derivara solo.
|
|
70
|
+
const baseDelSalto = Math.max(1, rows - marco.lines.length);
|
|
71
|
+
const altoDelTexto = Math.max(1, baseDelSalto - (subido > 0 ? 1 : 0));
|
|
67
72
|
function enviar() {
|
|
68
73
|
const orden = texto.trim();
|
|
69
74
|
if (!orden)
|
|
@@ -77,15 +82,18 @@ export function Prompt({ alEnviar, alCancelar, cwd, promptSymbol, avisos, sinHis
|
|
|
77
82
|
// Solo Re Pag y Av Pag. Las flechas y los caracteres son para escribir:
|
|
78
83
|
// robarselos aqui dejaria al usuario sin poder teclear.
|
|
79
84
|
if (tecla.pageUp || tecla.pageDown) {
|
|
80
|
-
const salto = Math.max(1, Math.floor(
|
|
81
|
-
// Con el arbol de App al mando
|
|
82
|
-
// cuanto sitio hay arriba,
|
|
85
|
+
const salto = Math.max(1, Math.floor(baseDelSalto / 2));
|
|
86
|
+
// Con el arbol de App al mando se le manda la DIRECCION, no el salto:
|
|
87
|
+
// aqui no se sabe cuanto sitio hay arriba, y calcular el salto en los dos
|
|
88
|
+
// sitios con alturas distintas hacia que bajar no deshiciera lo que
|
|
89
|
+
// acababa de subir. Con la direccion, el salto sale de un solo sitio y las
|
|
90
|
+
// dos teclas son simetricas.
|
|
83
91
|
if (alDesplazar) {
|
|
84
|
-
alDesplazar(tecla.pageUp ?
|
|
92
|
+
alDesplazar(tecla.pageUp ? 1 : -1);
|
|
85
93
|
return;
|
|
86
94
|
}
|
|
87
95
|
if (fija) {
|
|
88
|
-
setSubido((n) => tecla.pageUp ? Math.min(tope(
|
|
96
|
+
setSubido((n) => tecla.pageUp ? Math.min(tope(baseDelSalto), n + salto) : Math.max(0, n - salto));
|
|
89
97
|
return;
|
|
90
98
|
}
|
|
91
99
|
}
|
package/dist/ui/marco.js
CHANGED
|
@@ -94,7 +94,7 @@ export function buildPromptFrame(opts) {
|
|
|
94
94
|
// El 1 de delante es la fila de aire; despues barra, entrada, barra y pie.
|
|
95
95
|
// Sin contarla, el desplegable pide una fila mas de las que caben y el marco
|
|
96
96
|
// se sale por arriba de la ventana.
|
|
97
|
-
const room = Math.max(1, viewportRows - 1 - (
|
|
97
|
+
const room = Math.max(1, viewportRows - 1 - (2 + 1 + inputRows + 1 + 1));
|
|
98
98
|
const shown = Math.min(items.length, room);
|
|
99
99
|
const dropdownOffset = shown > 0 && items.length > shown
|
|
100
100
|
? Math.min(Math.max(0, selectedIndex - Math.floor(shown / 2)), items.length - shown)
|
|
@@ -187,16 +187,17 @@ export function buildPromptFrame(opts) {
|
|
|
187
187
|
else {
|
|
188
188
|
footerLine = chalk.hex(modeLook.color)(truncatePlain(modePlain, util));
|
|
189
189
|
}
|
|
190
|
-
//
|
|
190
|
+
// DOS FILAS DE AIRE ENCIMA DE LA CAJA
|
|
191
191
|
//
|
|
192
192
|
// Al anclar el prompt al fondo, el marco quedo pegado a lo de arriba: la
|
|
193
193
|
// ultima linea de la respuesta y la barra superior de la caja, seguidas. Se
|
|
194
194
|
// lee apelotonado y cuesta ver donde acaba una cosa y empieza la otra. El
|
|
195
195
|
// usuario lo pidio asi: "ponle un poquito de espacio pero no tanto".
|
|
196
196
|
//
|
|
197
|
-
//
|
|
198
|
-
//
|
|
199
|
-
|
|
197
|
+
// Dos, no una. Con una, la caja seguia leyendose pegada a lo de arriba: "pusiste
|
|
198
|
+
// una linea de espacio, que sea bien pues". Con dos se separa de verdad, y es
|
|
199
|
+
// el mismo aire que hay al arrancar entre el zorro y el aviso.
|
|
200
|
+
const lines = ["", "", bar, inputLine, ...dropdownLines, bar, footerLine];
|
|
200
201
|
// 4. Donde queda el cursor, en filas fisicas. Antes se hacia cursorCol =
|
|
201
202
|
// total % cols: aplicaba el modulo pero nunca sumaba la fila, asi que en
|
|
202
203
|
// cuanto la entrada se partia el acento se iba a escribir a otra linea.
|
|
@@ -204,7 +205,7 @@ export function buildPromptFrame(opts) {
|
|
|
204
205
|
const segments = typed.split("\n");
|
|
205
206
|
// La fila de aire de arriba cuenta: sin sumarla, el cursor se dibuja una fila
|
|
206
207
|
// por encima de donde se escribe.
|
|
207
|
-
let cursorRow =
|
|
208
|
+
let cursorRow = 2 + physicalRows(bar, cols);
|
|
208
209
|
for (let i = 0; i < segments.length - 1; i++) {
|
|
209
210
|
cursorRow += Math.max(1, Math.ceil(((i === 0 ? symbolWidth : 0) + segments[i].length) / cols));
|
|
210
211
|
}
|
package/extension/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"manifest_version": 3,
|
|
3
3
|
"minimum_chrome_version": "102",
|
|
4
4
|
"name": "Chocolatito Code",
|
|
5
|
-
"version": "1.6.
|
|
5
|
+
"version": "1.6.4",
|
|
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