feat(shuma): núcleo del shell — parser de intenciones + grafo de contexto

shuma-intent: el corazón agnóstico del shell shuma.

- parse — Intention: una línea del prompt parseada en etapas separadas
  por pipe. Ref (%cN comando / %pN buffer) + Stage (Exec | Inject).
  Parsea el ejemplo de la spec: `ssh nodo 'cat data.json' | %p1 | sort`.
- graph — SessionGraph: el grafo de contexto de la sesión. record()
  registra una intención (%cN), complete() le asigna buffer de salida
  (%pN) + estado, resolve() resuelve referencias, dangling_refs()
  valida una intención antes de ejecutar (la validación previa del
  prompt), collapse_succeeded() retrae nodos OK (quietud visual).

Todo puro y serializable (sesiones exportables). El front-end GPUI
(zonas RUN/SENS + lienzo central) lo rehidrata; la ejecución la hace
sandokan. 8 tests verdes. cargo check --workspace verde.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
sergio
2026-05-20 15:47:11 +00:00
parent 6884b3f8cb
commit 1da4ee11d7
7 changed files with 337 additions and 0 deletions
@@ -0,0 +1,19 @@
//! `shuma-intent` — núcleo agnóstico del shell shuma.
//!
//! El shell shuma trabaja con **intenciones**, no comandos sueltos: cada
//! línea del prompt es una [`Intention`] (etapas conectadas por pipes,
//! con tokens de referencia `%cN`/`%pN`). El [`SessionGraph`] mantiene el
//! historial como un grafo de contexto navegable: cada comando es un
//! nodo, cada salida un buffer intermedio referenciable.
//!
//! Todo acá es lógica pura y serializable — el front-end GPUI (las tres
//! zonas: RUN, SENS y el lienzo central) lo rehidrata; la ejecución real
//! la hace `sandokan`.
#![forbid(unsafe_code)]
pub mod parse;
pub mod graph;
pub use graph::{CommandNode, NodeStatus, SessionGraph};
pub use parse::{Intention, Ref, Stage};