minga-vfs deja de ser un stub: monta el repositorio direccionado por contenido como un filesystem FUSE de sólo lectura. roots/<hash> da el código fuente reconstruido (formato normalizado) de cada raíz del MST; cas/<hash> resuelve cualquier hash bajo demanda como S-expression. Capas separadas: render (SemanticNode→texto, puro) + source (contrato NodeSource, backends sled/memoria) + fs (único módulo con fuser). Nuevo subcomando `minga mount <punto>`. Dep fuser 0.15 sin libfuse-dev (default-features = false). 14 tests nuevos, sin regresión en minga-cli. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2.8 KiB
modules/semantic_dht/ (minga) — DHT semántico de código
Propósito. Indexador peer-to-peer de código fuente: parsea con tree-sitter, normaliza identifiers (α-equivalence), produce embeddings y los publica en un DHT. Búsqueda por similitud semántica cross-repo.
Crates
| crate | tipo | rol |
|---|---|---|
minga-core |
lib | Parser + α-hashing (Rust/Py/TS/JS/Go) + scoring |
minga-store |
lib | Sled backend para índice local |
minga-p2p |
lib | Capa libp2p: kad + bootstrap + provider records |
minga-vfs |
lib | FUSE: monta el repo como filesystem de sólo lectura |
minga-cli |
bin | CLI: init, status, ingest, listen, sync, watch, mount |
Dependencias
minga-core←tree-sitter,tree-sitter-rust,-python,-ts,-js,-go. Consumido por store/p2p/vfs/cli.minga-p2p←protocol/brahman-net(libp2p compartido).minga-vfs←minga-store(lee elPersistentRepo),fuser(default-features = false: sin pkg-config/libfuse-dev en build),libc.
α-hashing
Normaliza nombres de variables/funciones a α0..αN para que dos
implementaciones idénticas con identifiers distintos colisionen en el
mismo hash. Cubre let-else, if-let, or-patterns, let-chains en Rust;
cierres en Py/TS/JS/Go.
minga-vfs — proyección como filesystem
minga mount <punto> monta el repo direccionado por contenido como un
filesystem FUSE de sólo lectura. Layout:
README explicación del propio montaje
roots/<hash> código fuente reconstruido (formato normalizado) de
cada raíz del MST — `ls roots/` las lista todas
cas/<hash> S-expression del subárbol de ese hash — el directorio
NO se enumera, pero `cat cas/<hash>` resuelve cualquier
hash conocido (el "blob por hash bajo demanda")
El render del fuente es normalizado, no byte-exacto: el AST
descartó whitespace y comentarios al ingerir, así que roots/<hash>
re-indenta por estructura de llaves. Python (cuya estructura vive en
la indentación) sale como secuencia de tokens.
Capas (separabilidad): render (SemanticNode → texto, puro) +
source (contrato NodeSource, backends sled/memoria) + fs (único
módulo acoplado a fuser).
Estado
Pipeline core completo: indexa repos reales, sincroniza P2P, y se
monta como filesystem. 15 TODOs en core (más patterns para cada
lenguaje). minga-vfs implementado — el montaje del repo como
filesystem (paths virtuales → blobs por hash bajo demanda) ya
funciona. NO está relacionado con Mónadas (esas son de akasha/).
Ver docs/changelog/minga.md.