/** * Screen manager para pin_input_bottom. * * Usa ALTERNATE SCREEN BUFFER (\x1b[?1049h) para aislarnos del terminal * principal: sq tiene su propia "pantalla" limpia, y al salir el terminal * vuelve a como estaba. Igual que hacen tmux, vim, less, htop. * * Layout: * * row 1 ┐ * row 2 │ <- scroll region: output * ... │ del agente. \n aquí scrollea SOLO esta zona. * row H-4 ┘ * row H-3 -> status line (proyecto · % · modelo) * row H-2 -> mode line (↳ accept-edits · shift+tab) * row H-1 -> prompt (❯ lo que escribes) * row H -> buffer vacío (absorbe \n de Enter sin romper layout) * * La clave de que funcione: TODAS las writes a output deben pasar por * `writeOutput()`, que posiciona el cursor dentro del scroll region antes de * escribir. Writes fuera de este wrapper podrían escribir donde no deben. * * Status/mode se redibujan con `drawInputArea()` después de cada evento del * renderer (o cuando cambia el estado). Usan absolute positioning con DECSC/ * DECRC para no mover el cursor fuera de sitio. */ declare const INPUT_ROWS = 5; /** * Enter alternate screen + set scroll region. Devuelve función de cleanup. * No-op si no hay TTY. */ export declare function enableScreen(onResize?: () => void): () => void; export declare function cleanup(): void; export declare function isEnabled(): boolean; export declare function rows(): number; export declare function cols(): number; export declare function scrollBottom(): number; export declare function topSepRow(): number; export declare function statusRow(): number; export declare function modeRow(): number; export declare function botSepRow(): number; export declare function promptRow(): number; export declare function writeOutput(text: string): void; /** * Dibuja las 4 líneas pinned (topSep + status + mode + botSep) en filas * absolutas. El prompt (row H) lo gestiona readline; solo aseguramos que * esté vacío. Guarda/restaura cursor con DECSC/DECRC para no romper el flow. */ export declare function drawInputArea(statusLine: string, modeLine: string): void; /** * Posiciona el cursor en la fila del prompt, preparado para que readline * escriba ahí. Llamar antes de `rl.prompt()`. */ export declare function positionPromptCursor(): void; /** Resetea la memoria de cursor al arrancar (tras setup). */ export declare function resetOutputCursor(): void; export { INPUT_ROWS }; //# sourceMappingURL=screen.d.ts.map