1# llimphi-module-selector23*Read this in English: [README.md](README.md).*
45Abstracción de "abrir/guardar" portable entre host (paths del FS) y wawa (khipus por hash).
67## Por qué89Una app tawasuyu que sólo conoce paths (`PathBuf`) se rompe en wawa,
10donde el almacenamiento es direccionado por contenido (BLAKE3 + DAG)
11y no existe el concepto de "carpeta /home/usuario". Pero la mayoría
12de las apps no necesitan saber la diferencia: sólo quieren preguntar
13"qué item quiere abrir el usuario" o "dónde guardo este blob".
1415Este crate expone:
16- El trait `Selector` con dos métodos: `list_candidates()` (para
17 armar la UI del picker) y `realize(handle)` (para resolver el
18 item elegido a bytes).
19- Un `ItemHandle` opaco — la app no debe inspeccionarlo, sólo
20 pasarlo de vuelta al selector.
21- `HostSelector` con root path + extension filter (impl real).
22- `WawaSelector` como **placeholder** con la API definida — la
23 integración real con `akasha` / `wawa-kernel` ocurre cuando la
24 suite empiece a correr in-cage. Por ahora exporta tipos y panica
25 si se invoca, lo cual está bien: el código que lo construye
26 queda compilable y las apps pueden tipar contra el trait.
2728## API mínima29```ignore30use llimphi_module_selector::{HostSelector, Selector};
3132let sel = HostSelector::new("/home/usr/docs", &[".pluma", ".khipu"]);
33let items = sel.list_candidates()?;
34// (la app muestra `items.iter().map(|i| &i.display_name)` en su picker)
35// user elige el index N:
36let bytes = sel.realize(&items[N].handle)?;
37```3839---
4041Parte de **llimphi** — ver [llimphi](../../LEEME.md).
Abstracción de "abrir/guardar" portable entre host (paths del FS) y wawa (khipus por hash).
Por qué
Una app tawasuyu que sólo conoce paths (PathBuf) se rompe en wawa,
donde el almacenamiento es direccionado por contenido (BLAKE3 + DAG)
y no existe el concepto de "carpeta /home/usuario". Pero la mayoría
de las apps no necesitan saber la diferencia: sólo quieren preguntar
"qué item quiere abrir el usuario" o "dónde guardo este blob".
Este crate expone:
El trait Selector con dos métodos: list_candidates() (para
armar la UI del picker) y realize(handle) (para resolver el
item elegido a bytes).
Un ItemHandle opaco — la app no debe inspeccionarlo, sólo
pasarlo de vuelta al selector.
HostSelector con root path + extension filter (impl real).
WawaSelector como placeholder con la API definida — la
integración real con akasha / wawa-kernel ocurre cuando la
suite empiece a correr in-cage. Por ahora exporta tipos y panica
si se invoca, lo cual está bien: el código que lo construye
queda compilable y las apps pueden tipar contra el trait.
API mínima
use llimphi_module_selector::{HostSelector, Selector};
let sel = HostSelector::new("/home/usr/docs", &[".pluma", ".khipu"]);
let items = sel.list_candidates()?;
// (la app muestra `items.iter().map(|i| &i.display_name)` en su picker)
// user elige el index N:
let bytes = sel.realize(&items[N].handle)?;