# llimphi-module-selector An "open/save" abstraction portable between the host (filesystem paths) and wawa (khipus by hash). ## Why A tawasuyu app that only knows paths (`PathBuf`) breaks on wawa, where storage is content-addressed (BLAKE3 + DAG) and there is no such thing as a "/home/user" folder. But most apps do not need to know the difference: they only want to ask "which item does the user want to open" or "where do I save this blob". This crate exposes: - The `Selector` trait with two methods: `list_candidates()` (to build the picker's UI) and `realize(handle)` (to resolve the chosen item to bytes). - An opaque `ItemHandle` — the app must not inspect it, only hand it back to the selector. - `HostSelector` with a root path and an extension filter (the real impl). - `WawaSelector` as a **placeholder** with the API defined — the real integration with `akasha` / `wawa-kernel` happens when the suite starts running in-cage. For now it exports the types and panics if invoked, which is fine: the code that builds it stays compilable and apps can type against the trait. ## Minimal API ```ignore use llimphi_module_selector::{HostSelector, Selector}; let sel = HostSelector::new("/home/usr/docs", &[".pluma", ".khipu"]); let items = sel.list_candidates()?; // (the app shows `items.iter().map(|i| &i.display_name)` in its picker) // the user picks index N: let bytes = sel.realize(&items[N].handle)?; ``` --- Part of **llimphi** — see [llimphi](../../README.md).