Files
brahman/crates/modules/semantic_dht/SDD.md
T
sergio e77a32f4d6 feat(minga): minga-vfs — proyecta el repo como filesystem FUSE
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>
2026-05-22 13:23:44 +00:00

2.8 KiB
Raw Blame History

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-coretree-sitter, tree-sitter-rust, -python, -ts, -js, -go. Consumido por store/p2p/vfs/cli.
  • minga-p2pprotocol/brahman-net (libp2p compartido).
  • minga-vfsminga-store (lee el PersistentRepo), 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.