1# modules/semantic_dht/ (minga) — DHT semántico de código
2
3**Propósito.** Indexador peer-to-peer de código fuente: parsea con
4tree-sitter, normaliza identifiers (α-equivalence), produce embeddings
5y los publica en un DHT. Búsqueda por similitud semántica cross-repo.
6
7## Crates
8
9| crate | tipo | rol |
10| -------------- | ---- | ---------------------------------------------------------- |
11| `minga-core` | lib | Parser + α-hashing (Rust/Py/TS/JS/Go) + scoring |
12| `minga-store` | lib | Sled backend para índice local |
13| `minga-p2p` | lib | Capa libp2p: kad + bootstrap + provider records |
14| `minga-vfs` | lib | FUSE: monta el repo como filesystem de sólo lectura |
15| `minga-cli` | bin | CLI: init, status, ingest, listen, sync, watch, mount |
16
17## Dependencias
18
19- `minga-core` ← `tree-sitter`, `tree-sitter-rust`, `-python`, `-ts`,
20 `-js`, `-go`. Consumido por store/p2p/vfs/cli.
21- `minga-p2p` ← `protocol/brahman-net` (libp2p compartido).
22- `minga-vfs` ← `minga-store` (lee el `PersistentRepo`), `fuser`
23 (`default-features = false`: sin pkg-config/libfuse-dev en build),
24 `libc`.
25
26## α-hashing
27
28Normaliza nombres de variables/funciones a `α0..αN` para que dos
29implementaciones idénticas con identifiers distintos colisionen en el
30mismo hash. Cubre let-else, if-let, or-patterns, let-chains en Rust;
31cierres en Py/TS/JS/Go.
32
33## minga-vfs — proyección como filesystem
34
35`minga mount <punto>` monta el repo direccionado por contenido como un
36filesystem FUSE de sólo lectura. Layout:
37
38```text
39README explicación del propio montaje
40roots/<hash> código fuente reconstruido (formato normalizado) de
41 cada raíz del MST — `ls roots/` las lista todas
42cas/<hash> S-expression del subárbol de ese hash — el directorio
43 NO se enumera, pero `cat cas/<hash>` resuelve cualquier
44 hash conocido (el "blob por hash bajo demanda")
45```
46
47El render del fuente es **normalizado**, no byte-exacto: el AST
48descartó whitespace y comentarios al ingerir, así que `roots/<hash>`
49re-indenta por estructura de llaves. Python (cuya estructura vive en
50la indentación) sale como secuencia de tokens.
51
52Capas (separabilidad): `render` (SemanticNode → texto, puro) +
53`source` (contrato `NodeSource`, backends sled/memoria) + `fs` (único
54módulo acoplado a `fuser`).
55
56## Estado
57
58Pipeline core completo: indexa repos reales, sincroniza P2P, y se
59monta como filesystem. 15 TODOs en core (más patterns para cada
60lenguaje). `minga-vfs` implementado — el montaje del repo como
61filesystem (paths virtuales → blobs por hash bajo demanda) ya
62funciona. NO está relacionado con Mónadas (esas son de `akasha/`).
63Ver `docs/changelog/minga.md`.
SDD.md
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 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.