Files
brahman/crates/modules/shuma/shuma-line/src/lib.rs
T
sergio be99ac3bbb feat(shuma): ghosting predictivo en el prompt
shuma-line: ghost_suggestion(line, corpus) — el resto de la línea que
el shell predice, a partir de un corpus priorizado.
shuma-infer: predict_next(recent, patterns) — si los últimos comandos
coinciden con el prefijo de un patrón, devuelve los pasos que faltan.

shuma-shell: mientras se escribe, el prompt pinta en gris tenue la
continuación predicha — historial reciente o, con prioridad, la
secuencia que el motor de inferencia anticipa (cd a un proyecto →
fantasma «git pull && cargo build»). La flecha → al final de la
línea, o Ctrl+Space, aceptan el fantasma.

13 tests shuma-infer, 37 shuma-line.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-20 19:30:57 +00:00

38 lines
1.4 KiB
Rust

//! `shuma-line` — el cerebro del input del shell.
//!
//! La función principal del shell es su línea de comandos, y esta línea
//! no es un campo de texto tonto: analiza lo que se escribe para
//! resaltarlo, autocompletarlo y entender sus tuberías. Toda esa
//! inteligencia vive aquí, **agnóstica de frontend** — la usa igual el
//! shell GPUI de brahman que una versión TUI.
//!
//! - [`dialect`] — el [`Dialect`] de la línea (bash hoy; zsh/fish/python
//! a futuro, conmutable).
//! - [`token`] — el [`Token`] y su [`TokenKind`] (la clase de resaltado).
//! - [`lexer`] — [`tokenize`]: el análisis léxico + clasificación.
//! - [`pipeline`] — [`split_pipeline`]: la línea descompuesta en etapas
//! separadas por `|`.
//! - [`complete`] — el motor de autocompletado y su [`CompletionSource`].
//! - [`editor`] — [`LineState`], el estado editable del input.
//!
//! Un frontend traduce sus eventos de teclado a métodos de `LineState` y
//! pinta `LineState::tokens()` con un color por `TokenKind`. Nada más.
#![forbid(unsafe_code)]
pub mod complete;
pub mod dialect;
pub mod editor;
pub mod ghost;
pub mod lexer;
pub mod pipeline;
pub mod token;
pub use complete::{complete, Completion, CompletionKind, CompletionSource, StaticSource};
pub use dialect::Dialect;
pub use editor::LineState;
pub use ghost::ghost_suggestion;
pub use lexer::tokenize;
pub use pipeline::{split_pipeline, Pipeline, Stage};
pub use token::{Token, TokenKind};