tawasuyu

tawasuyu/nahual

Open-with viewers (text/image/audio/video/svg/font/hex/…) in Rust, on Llimphi.

Rust 49TOML 23Markdown 19JSON 11062 Definitions

⎇ main Cargo.toml TOML · 913 lines · 55.0 KB History raw

chore: refresco desde el monorepo (pin tawasuyu.git v0.3.0) 7307ac32f · Sergio ·

1# Cargo.toml raíz STANDALONE de nahual — front-door público.
2# GENERADO por scripts/actualizar-standalone.py desde el monorepo tawasuyu.git
3# (v0.3.0). No editar a mano: se regenera. Lo fundacional se consume por
4# git-dep al tag; sólo el código del dominio vive en este repo.
5[workspace]
6resolver = "2"
7
8# ============================================================
9# Cuadrantes — agregar a medida que se migran
10# ============================================================
11members = [
12    "02_ruway/nahual/libs/meta-runtime",
13    "02_ruway/nahual/libs/meta-schema",
14    "02_ruway/nahual/nahual-archive-viewer-llimphi",
15    "02_ruway/nahual/nahual-audio-viewer-llimphi",
16    "02_ruway/nahual/nahual-card-viewer-llimphi",
17    "02_ruway/nahual/nahual-cbz-viewer-llimphi",
18    "02_ruway/nahual/nahual-censo-core",
19    "02_ruway/nahual/nahual-cotejo-llimphi",
20    "02_ruway/nahual/nahual-dbf-viewer-llimphi",
21    "02_ruway/nahual/nahual-deck-viewer-llimphi",
22    "02_ruway/nahual/nahual-file-explorer-llimphi",
23    "02_ruway/nahual/nahual-font-viewer-llimphi",
24    "02_ruway/nahual/nahual-gallery-llimphi",
25    "02_ruway/nahual/nahual-geo-core",
26    "02_ruway/nahual/nahual-geo-voxel",
27    "02_ruway/nahual/nahual-hex-viewer-llimphi",
28    "02_ruway/nahual/nahual-iconos",
29    "02_ruway/nahual/nahual-image-viewer-llimphi",
30    "02_ruway/nahual/nahual-map-viewer-llimphi",
31    "02_ruway/nahual/nahual-markdown-viewer-llimphi",
32    "02_ruway/nahual/nahual-module",
33    "02_ruway/nahual/nahual-pdf-viewer-llimphi",
34    "02_ruway/nahual/nahual-pluma-viewer-llimphi",
35    "02_ruway/nahual/nahual-respaldo-core",
36    "02_ruway/nahual/nahual-sheet-viewer-llimphi",
37    "02_ruway/nahual/nahual-shell-core",
38    "02_ruway/nahual/nahual-shell-llimphi",
39    "02_ruway/nahual/nahual-source-core",
40    "02_ruway/nahual/nahual-source-qutu",
41    "02_ruway/nahual/nahual-source-tejido",
42    "02_ruway/nahual/nahual-svg-viewer-llimphi",
43    "02_ruway/nahual/nahual-table-viewer-llimphi",
44    "02_ruway/nahual/nahual-text-viewer-llimphi",
45    "02_ruway/nahual/nahual-thumb-core",
46    "02_ruway/nahual/nahual-tree-viewer-llimphi",
47    "02_ruway/nahual/nahual-video-viewer-llimphi",
48    "02_ruway/nahual/nahual-viewer-core",
49    "02_ruway/nahual/nahual-vistazo-core",
50]
51
52# `wawa/` se excluye del workspace global porque corre en target
53# `x86_64-unknown-none` y `panic = "abort"`, incompatibles con los
54# perfiles globales. Los crates compartidos se referencian por `path`
55# cruzando la frontera.
56# `llimphi-wawa` está EXCLUIDA, no ausente por olvido. Enciende
57# `llimphi-text/cpu`, que es el backend EXCLUYENTE del `vello` que todo el resto
58# del workspace usa por default — y la unificación de features de cargo los
59# junta, disparando el `compile_error!` que llimphi-text tiene justo para
60# delatarlo. Vive en el mismo mundo que el kernel: se compila aparte, con su
61# propio lock. Sus tests se corren así:
62#   cargo test --manifest-path 02_ruway/llimphi/llimphi-wawa/Cargo.toml \
63#     --no-default-features --features std
64#
65# `llimphi-jaula` está excluida por lo MISMO, del otro lado: enciende
66# `llimphi-text/wire`, el tercer backend excluyente (W4). Es la cáscara de una
67# app dentro de la jaula WASM — el gemelo de `llimphi-wawa`—, y que las dos estén
68# afuera del workspace no es una molestia sino el diseño: son dos procesos en dos
69# lados de una frontera, y forzarlos a compartir un lock sería fingir lo
70# contrario. Sus tests:
71#   cargo test --manifest-path 02_ruway/llimphi/llimphi-jaula/Cargo.toml \
72#     --no-default-features --features std
73#
74# `llimphi-hybrid-android` está excluida **por contagio**: consume `llimphi-wawa`
75# y por lo tanto arrastra el mismo `llimphi-text/cpu`. Es la tercera cáscara de
76# la familia —kernel, jaula, teléfono— y cae del mismo lado de la frontera por
77# el mismo motivo. Se compila así:
78#   cargo check --manifest-path \
79#     02_ruway/llimphi/android/llimphi-hybrid-android/Cargo.toml
80# y se empaca con `02_ruway/llimphi/android/scripts/build-android.sh`.
81
82[workspace.package]
83version = "0.1.0"
84edition = "2021"
85rust-version = "1.80"
86license = "MIT"
87authors = ["Sergio <sergio@gioser.net>"]
88publish = false
89repository = "https://git.tawasuyu.net/tawasuyu/nahual"
90
91[workspace.dependencies]
92# === Configuración declarativa (vocabulario de esquemas) ===
93allichay = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
94allichay-plano = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
95marca = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
96# Escala única de `nice` de la sesión (compositor · marco · app · segundo plano
97# · lote) + las tres formas de aplicarla (propia / pid vivo / pre_exec).
98prioridad = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
99ron-ralo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
100# Telemetría local de desarrollo (stderr+panics+tracing → $XDG_STATE_HOME/tawasuyu/<dominio>/<bin>.log)
101bitacora = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
102# default = [] (núcleo liviano sin vello); `bake` es opt-in. Declaramos
103# default-features = false aquí para que el `default-features = false` de los
104# consumidores (splash/greeter/compositor) se honre y no quede el warning.
105mirada-fondo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
106mirada-teclado-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
107mirada-teclado-widget = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
108# === Registro de apps / menú global ===
109app-bus = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
110app-iconset = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
111# === Centro de eventos (notificaciones + capturas + clipboard + …) ===
112willay-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
113willay-checkpoint = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
114willay-hilo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
115willay-store = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
116socket-local = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
117willay-emit = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
118sandokan-seguridad-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
119sandokan-salud-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
120sandokan-monitor-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
121# El censo de red de la máquina (netstat completo: socket → proceso → unidad) +
122# huella de red + drift de puertos + contabilidad por unidad. Ver `shared/PLAN-RED.md`.
123sandokan-red-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
124# La baliza de LAN: el descubridor por multicast, con el payload opaco. Promovido
125# de `uya-app::lan`, que es el de los tres del arbol que resuelve los tres modos
126# de fallo reales. Ver `shared/PLAN-RED.md` §F1.
127baliza = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
128matilda-apply = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
129matilda-plan = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
130matilda-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
131matilda-discover = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
132rag-motor = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
133churay-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
134churay-welcome = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
135churay-welcome-runner = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
136# === Puente de drag-and-drop compositor → app (suple winit en Wayland) ===
137drop-bridge = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
138# === Serialización ===
139serde = { version = "1", features = ["derive"] }
140serde_json = "1"
141lsp-types = "0.97"
142serde-big-array = "0.5"
143postcard = { version = "1", features = ["use-std"] }
144toml = "0.8"
145ron = "0.8"
146bincode = "1"
147base64 = "0.22"
148
149# === Errores ===
150thiserror = "2"           # bump uniforme; arje (era 1) puede requerir ajustes menores
151anyhow = "1"
152
153# === Async ===
154tokio = { version = "1", features = ["full"] }
155tokio-util = { version = "0.7", features = ["compat"] }
156async-trait = "0.1"
157futures = "0.3"
158
159# === Observabilidad ===
160tracing = "0.1"
161tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
162
163# Sonda de librerías del sistema en build.rs. La usa `auth-huellita` para
164# detectar `libfprint` sin volverla una dependencia dura del workspace.
165pkg-config = "0.3"
166
167# === Linux primitives (arje) ===
168nix = { version = "0.29", features = ["signal", "process", "sched", "mount", "fs", "socket", "net", "user", "reboot"] }
169libc = "0.2"
170# DRM/KMS legacy (dumb buffer) para el splash nativo del arranque sin parpadeo.
171# Misma versión que reexporta smithay (mirada-compositor) — el lock ya la fija.
172drm = "0.14"
173font8x8 = { version = "0.3", default-features = false }
174
175# === IDs / Hash / Crypto ===
176ulid = { version = "1", features = ["serde"] }
177uuid = { version = "1", features = ["v4", "rng-getrandom"] }
178sha2 = "0.10"
179blake3 = "1.5"
180ed25519-dalek = "2"
181aes-gcm = "0.10"
182chacha20 = "0.9"
183chacha20poly1305 = "0.10"
184argon2 = "0.5"
185rand = "0.8"
186# TOTP (RFC 6238) del segundo factor de nakui: HMAC-SHA1 es lo que hablan
187# Google Authenticator, Aegis y los tokens de hardware — no es elección
188# nuestra, es el formato del ecosistema. base32 para el secreto del QR.
189hmac = "0.12"
190sha1 = "0.10"
191data-encoding = "2"
192
193# === WASM (arje) ===
194# wasmi 1.0: unifica la versión con wawa (su kernel ya corre 1.0), para
195# que el ABI WASM del host sea idéntico en Linux y en bare-metal.
196wasmi = "1.0"
197wat = "1"
198# wasmtime 46 (Fase 1 del pipeline JS): tier 0 de puriy-js pasa de wasmi
199# (intérprete) a Wasmtime AOT (Cranelift → nativo) en Linux — quita la doble
200# interpretación de QuickJS.wasm. En wawa bare-metal el runtime es Pulley (spike
201# Q1 cerrado); mismo crate, distinto backend.
202wasmtime = "46"
203
204# === Storage / DB ===
205sled = "0.34"
206rusqlite = { version = "0.31", features = ["bundled", "blob"] }
207
208# === Ingesta de documentos (iniy-ingest: PDF / EPUB) ===
209pdf-extract = "0.7"
210epub = "2.1"
211
212# === Bulk import Wikipedia (iniy-wiki dump) ===
213bzip2 = "0.4"
214
215# === Compresión (minga multi-bundle) ===
216zstd = "0.13"
217xz2 = "0.1"
218# Contenedores adicionales del visor Archive de nahual (sólo listado).
219sevenz-rust = "0.6"
220unrar = "0.5"
221
222# === HTTP server (iniy-server) ===
223axum = "0.7"
224# WebSocket pelado (sin framework HTTP): lo usa `shuma-ide-host`, que sirve el
225# protocolo de integración de IDE de Claude Code en loopback. Ya estaba en el
226# lock por transitividad; acá se declara para poder usarlo directo.
227tokio-tungstenite = "0.24"
228tower = "0.5"
229
230# === ANN sobre embeddings (iniy nli --ann) ===
231instant-distance = "0.6"
232
233# === P2P (minga) ===
234libp2p = { version = "0.56", features = ["tokio", "tcp", "dns", "noise", "yamux", "macros", "kad", "identify", "relay", "dcutr", "autonat", "mdns"] }
235libp2p-stream = "=0.4.0-alpha"
236libp2p-allow-block-list = "0.6"
237
238# === SSH (ssh, sandokan RemoteEngine, matilda) ===
239russh = "0.54"
240
241# === Math determinista cross-platform (dominium) ===
242libm = "0.2"
243
244# === SMF (takiy-midi) ===
245# midly: parser/emitter SMF tipo 0/1, no_std-friendly, sin allocs en hot path.
246midly = "0.5"
247
248# === Code parsing (minga) ===
249# `wayland-data-control` trae el backend wl-clipboard-rs: bajo mirada (Wayland
250# propio, sin Xwayland para apps nativas) arboard-x11 fallaba a no-op silencioso
251# y el clipboard de los text-editor quedaba muerto. Con la feature habla
252# zwlr_data_control_manager_v1 (que mirada expone) y cae a X11 si no hay Wayland.
253arboard = { version = "3", features = ["wayland-data-control"] }
254ropey = "1.6"
255# El runtime lee gramáticas por ABI, y ahí está el acople: 0.24 lee hasta la 14,
256# 0.25 lee 13–15. Se subió el 2026-09-06 porque `tree-sitter-rust` 0.23.3 (ABI 14)
257# lee `&raw` como el arranque de una referencia cruda, así que **una variable
258# llamada `raw` prestada con `&`** rompe el archivo entero para la gramática:
259# 69 de 6.428 archivos de este repo (1,1 %). La 0.24.2 lo arregla, pero es ABI 15
260# y por eso arrastra al runtime. Las otras gramáticas siguen en ABI 14 y cargan
261# igual — 0.25 es compatible hacia atrás.
262tree-sitter = "0.25"
263tree-sitter-rust = "0.24"
264tree-sitter-python = "0.23"
265tree-sitter-typescript = "0.23"
266tree-sitter-javascript = "0.23"
267tree-sitter-go = "0.23"
268# C: el quinto dialecto que minga versiona por AST (el kernel y todo lo ajeno
269# que la suite absorbe está en C).
270tree-sitter-c = "0.23"
271# Dart entra por zorge (SDD-SERVIDOR-AJENO §A.1, RA-2): el otro proyecto es
272# Flutter, y Dart 3 es lo más parecido a Rust que hay del otro lado —tipado
273# estático, `sealed` con `switch` exhaustivo, y `_nombre` privado de verdad—.
274# El fork `orchard` y no `tree-sitter-dart` a secas. El motivo original era el
275# ABI: `tree-sitter-dart` se generó con la 15 y el runtime del workspace leía
276# hasta la 14. Con el runtime en 0.25 ese motivo **ya no aplica**; el fork se
277# conserva porque es lo que está probado, no porque haga falta.
278tree-sitter-dart-orchard = "0.3"
279
280# === FS notify ===
281notify = "6.1"
282
283# === Grafos (iniy, nakui-core ya lo usa directo en 0.6) ===
284petgraph = "0.6"
285
286# === Image decoding (nahual-image-viewer-llimphi) ===
287# default-features = false: nos quedamos con PNG + JPEG + WebP (lossless).
288# tullpu-render exporta a las tres; AVIF/TIFF/… los habilitamos si una app
289# los pide específicamente.
290# Decoders puro-Rust baratos; avif queda fuera (arrastra dav1d/rav1e).
291image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif", "bmp", "ico", "tiff", "tga", "qoi"] }
292# ONNX Runtime para los proveedores de píxel reales (pixel-verbo-onnx: segmentación
293# u2net/isnet, inpaint, restyle…). `download-binaries` (default) baja el runtime nativo
294# solo; ya lo arrastraba fastembed (rimay-verbo) transitivo — aquí lo declaramos directo.
295ort = "2.0.0-rc.9"
296
297# Rasterizador vectorial CPU (relleno/trazo anti-aliased) para capas vectoriales de tullpu.
298tiny-skia = "0.11"
299# Booleanos de polígonos robustos (union/intersection/difference/xor) para el
300# clipper vectorial de tullpu — restar/intersecar paths que se solapan
301# parcialmente, que la regla de relleno no expresa. Ya estaba en el lock.
302geo = "0.28"
303
304# === FUSE (minga-vfs) ===
305# default-features = false: prescinde de pkg-config/libfuse-dev en build.
306# El montaje pasa a ser Rust puro (vía el helper `fusermount3` en runtime).
307fuser = { version = "0.15", default-features = false }
308
309# === CLI / auth (minga) ===
310clap = { version = "4", features = ["derive"] }
311rpassword = "7"
312
313# === PAM (auth-core) ===
314pam = "0.8"
315
316# === D-Bus (arje compat) ===
317zbus = { version = "4", default-features = false, features = ["tokio"] }
318
319# === Tests ===
320tempfile = "3"
321
322# === Llimphi (motor gráfico soberano) ===
323# wgpu sobre Vulkan/Metal/DX12, winit para ventana en dev Linux.
324# raw-window-handle 0.6 alinea winit 0.30 con wgpu 29.
325# vello 0.9 = rasterizador vectorial sobre wgpu 29 (renderer GPU "wgpu" + opt-in "hybrid" CPU+GPU).
326#
327# **El 27→29 no fue por gusto** (2026-07-28): `vello_hybrid 0.0.9` —el ÚNICO
328# rasterizador que el driver Mali del teléfono digiere, ver
329# `02_ruway/llimphi/android/DIAGNOSTICO.md`— vive en wgpu 29, y dos versiones de
330# wgpu no comparten un `Device`. La migración salió barata porque `vello 0.9`
331# usa el mismo peniko 0.6.1 y no movió su API de `Scene`: el bump de vello dio
332# CERO errores; todos los que hubo fueron deriva de wgpu, y concentrada en los
333# cuatro crates que tienen código wgpu propio.
334# taffy 0.12 = motor Flexbox/Grid puro Rust (0.9→0.12 en 2026-07-27: arregla el percent de ítem de grid en track sizing).
335# parley 0.6 = shaping/layout de texto compatible con peniko 0.6 (que vello 0.7 expone).
336wgpu = "29"
337# El compilador de shaders que wgpu lleva adentro. Se declara acá para que los
338# tests que validan WGSL headless (llimphi-3d, supay-render-llimphi) usen la
339# MISMA versión que después compila esos shaders en la GPU. Con dos versiones,
340# un test puede dar verde sobre un shader que el runtime rechaza — o al revés.
341naga = "29"
342winit = "0.30"
343raw-window-handle = "0.6"
344pollster = "0.4"
345# `default-features = false` acá arriba y no en cada consumidor: el default de
346# vello es ["wgpu","wgpu_default"], y `llimphi-text`/`llimphi-compositor` sólo
347# quieren sus TIPOS (Scene, peniko), no el motor de GPU. Declararlo abajo no
348# alcanza — cargo IGNORA `default-features` en un dep heredado si la raíz no lo
349# fijó, y lo avisa con un warning fácil de pasar por alto. Quien necesita el
350# motor lo pide por feature (ver llimphi-raster).
351vello = { version = "0.9", default-features = false }
352# Renderer hybrid CPU+GPU sin compute shaders (mejor compat WebGL2/Adreno viejas).
353# Opt-in; el renderer "wgpu" sigue siendo el default.
354vello_hybrid = "0.0.9"
355# foreign-lottie = fork vendorizado de velato 0.9 (Lottie → vello::Scene),
356# completado para no paniquear ante features no soportadas. Lo consume
357# llimphi-lottie. Ver shared/foreign-lottie.
358foreign-lottie = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
359# Árbol de accesibilidad para lectores de pantalla (NVDA/VoiceOver/Orca/TalkBack).
360# Lo consume el runtime de Llimphi (iter 2/3 del plan AccessKit); el modelo
361# `SemanticsSpec` del compositor es independiente de estas crates.
362accesskit = "0.24"
363accesskit_winit = "0.33"
364taffy = "0.12"
365# parley = shaping completo (bidi, ligatures, fallback CJK/emoji vía fontique, line break).
366parley = "0.6"
367# Bucle Elm (input→update→view→layout→raster→present). Lo consumen las apps.
368# `config-wawa`: el sentido de la rueda (ratón / touchpad, por separado) sale
369# del bus `wawa-config` y se fija al arrancar cada app, con watcher para el
370# cambio en caliente. Va acá y no app por app a propósito: es una preferencia
371# del HUMANO, no de cada app, y ninguna app del monorepo debería poder
372# desobedecerla por olvido. Ver `llimphi-ui/src/rueda.rs`.
373llimphi-ui = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
374# El compositor DIRECTO, para que el catálogo de widgets cuelgue de él y no del
375# shell de escritorio (W4.6). Un widget que dependa de `llimphi-ui` arrastra
376# winit + accesskit + arboard + vello, y con eso queda fuera del alcance de una
377# app enjaulada; colgando de acá sirve igual en Linux, en el kernel y en la jaula.
378#
379# `default-features = false` VA ACÁ Y NO EN CADA WIDGET. Es la trampa recurrente
380# de cargo: apagar los defaults desde un miembro NO HACE NADA si el workspace
381# declaró la dep sin ellos (cargo lo avisa y lo ignora). Ya pasó con taffy, vello
382# y peniko. Sin esto, cada widget encendería el backend `vello` del compositor y
383# volvería a quedar fuera del alcance de una app enjaulada — que es justamente lo
384# que W4.6 vino a arreglar. Quien ensambla la app elige el backend: `llimphi-ui`
385# en Linux, `llimphi-jaula` en la jaula, `llimphi-wawa` en el kernel.
386llimphi-compositor = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
387# Tier 3 — apps WASM con UI Llimphi real. El guest pinta un WireNode (IR
388# serializable), el host (runner) lo materializa en View<Msg> y rebota los
389# eventos al update del guest. SDK = lado guest, runner = lado host.
390llimphi-wire-view = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
391llimphi-wire-escena = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
392llimphi-wasm-app-sdk = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
393llimphi-wasm-runner = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
394# Núcleo puro de distribución (CAS + verificación + resolve), SIN runner/GPU.
395llimphi-wasm-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
396# Cara con baterías: re-exporta core + puente al runner para correr la app.
397llimphi-wasm-dist = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
398llimphi-wasm-open = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
399llimphi-wasm-registry = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
400llimphi-wasm-wasi = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
401# Transporte P2P del bytecode por hash sobre BrahmanNet (card-net).
402llimphi-wasm-net = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
403llimphi-3d = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
404# Runner wlr-layer-shell: corre un `App` de Llimphi como barra anclada a un
405# borde (no como ventana), reusando la plumbing sctk+wgpu que pata probó.
406llimphi-layer = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
407# Paleta semántica compartida por las apps y los widgets.
408llimphi-theme = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
409# Tweens y helpers de animación sobre el bucle Elm.
410llimphi-motion = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
411# Máquina de estados de animación (estilo Rive) clip-agnóstica. Núcleo puro;
412# el render lo cablea el consumidor (llimphi-lottie). Escalón sobre el playback.
413llimphi-anim = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
414# Studio de animación «rive»: además del editor (bin), expone como lib los
415# documentos serializables (Doc + RigDoc + Project) que carga mirada-fondo.
416llimphi-anim-studio = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
417# Render de mallas deformables (skel::Mesh) a vello Scene: vectorial y texturizada.
418llimphi-mesh = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
419# Iconos vectoriales (BezPath en grid 24×24) compartidos por todas las apps.
420llimphi-icons = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
421# Puente fino vello_svg → Llimphi para SVG arbitrario (íconos .desktop, logos).
422llimphi-svg = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
423# Puente fino velato (Lottie) → Llimphi para animación vectorial autorada (.json).
424llimphi-lottie = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
425llimphi-image = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
426# Decodificador de protocolos de gráficos de terminal (kitty/sixel) → RGBA.
427llimphi-term-graphics = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
428# Widgets reusables sobre llimphi-ui — uno por crate.
429llimphi-widget-app-header = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
430llimphi-widget-banner = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
431llimphi-widget-button = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
432llimphi-widget-rive-button = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
433llimphi-widget-card = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
434llimphi-clipboard = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
435llimphi-widget-context-menu = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
436llimphi-widget-edit-menu = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
437llimphi-widget-menubar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
438llimphi-widget-list = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
439llimphi-widget-grid = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
440llimphi-widget-table = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
441llimphi-widget-color-picker = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
442llimphi-widget-slider = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
443llimphi-widget-app-icon = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
444llimphi-widget-scroll = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
445llimphi-widget-lazy-list = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
446llimphi-widget-splitter = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
447llimphi-widget-stat-card = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
448llimphi-widget-tabs = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
449llimphi-module-allichay = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
450llimphi-module-command-palette = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
451llimphi-module-diff-viewer = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
452llimphi-module-fif = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
453llimphi-module-file-picker = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
454llimphi-module-bookmarks = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
455llimphi-module-mini-map = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
456llimphi-module-shuma-term = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
457llimphi-module-symbol-outline = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
458llimphi-plugin-host = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
459llimphi-widget-theme-switcher = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
460llimphi-widget-text-area = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
461llimphi-widget-text-editor-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
462llimphi-widget-text-editor = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
463llimphi-widget-text-editor-lsp = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
464llimphi-widget-text-input = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
465llimphi-widget-tiled = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
466llimphi-widget-nodegraph = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
467llimphi-widget-tree = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
468grafo-nav = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
469# La lengua de expresiones compartida (PLAN-CRUCES §A5). `default-features =
470# false` acá NO: los consumidores Linux (maskay, pizarra, yupay, krama) la
471# quieren con `std`; el kernel y las jaulas la piden sin default desde su propio
472# manifiesto, como hacen con `format` y `dataflow`.
473krama-expr = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
474krama-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
475krama-store = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
476krama-app-llimphi = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
477llimphi-widget-navigator = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
478llimphi-widget-detail-table = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
479llimphi-widget-select = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
480# `gpu` explícito: el camino GPU-directo del modo grilla pasó a ser una feature
481# (para que el terminal pueda salir del proceso), y este `default-features =
482# false` la apagaba para TODOS los que lo toman por el workspace — dejando a
483# `shuma-module-shell` sin `CellPipeline`. Pedirla acá devuelve exactamente el
484# comportamiento de antes; quien la quiera apagar lo hace en su manifiesto.
485llimphi-widget-terminal = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
486# Sello vectorial wawa (rombo + W implícita + Merkle Core).
487llimphi-widget-wawa-mark = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
488# Widgets de elegancia transversal (tooltip, spinner, progress, toast,
489# modal, empty, status-bar, shortcuts-help, splash).
490llimphi-widget-tooltip = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
491llimphi-widget-spinner = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
492llimphi-widget-progress = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
493llimphi-widget-toast = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
494llimphi-widget-modal = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
495llimphi-widget-empty = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
496llimphi-widget-status-bar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
497llimphi-widget-shortcuts-help = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
498llimphi-widget-timeline = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
499llimphi-widget-transport = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
500llimphi-widget-waveform = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
501llimphi-widget-splash = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
502# Controles de formulario y signaling (switch, segmented, breadcrumb,
503# badge, avatar, skeleton, field).
504llimphi-widget-switch = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
505llimphi-widget-segmented = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
506llimphi-widget-rag-sidebar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
507llimphi-widget-dock-rail = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
508llimphi-widget-toolbar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
509llimphi-widget-breadcrumb = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
510llimphi-widget-badge = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
511llimphi-widget-avatar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
512llimphi-widget-skeleton = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
513llimphi-widget-field = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
514# Firma visual transversal (gradient sutil + hairline accent).
515# `default-features = false` acá y no en `card`: los defaults de un widget sólo
516# se pueden apagar desde la declaración del WORKSPACE (la trampa recurrente de
517# cargo). Sin esto, `card` arrastraría a `panel` con backend `vello` y volvería a
518# quedar fuera de una jaula, aunque `card` pidiera `wire`.
519llimphi-widget-panel = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
520llimphi-widget-panes = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
521# Widgets Flutter-like — composición sobre primitivas Tier 1/3 ya
522# expuestas (sombra, gradient, animated, ripple).
523llimphi-widget-chip = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
524llimphi-widget-fab = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
525llimphi-widget-fugaces = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
526llimphi-widget-wrap = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
527llimphi-widget-range-slider = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
528llimphi-widget-calendar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
529llimphi-widget-datetime-picker = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
530llimphi-widget-form = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
531llimphi-widget-accordion = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
532llimphi-widget-stepper = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
533llimphi-widget-fitted-box = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
534llimphi-widget-carousel = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
535llimphi-widget-rating = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
536llimphi-widget-gauge = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
537llimphi-widget-seven-segment = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
538llimphi-widget-scaffold = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
539llimphi-widget-hero = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
540llimphi-widget-router = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
541llimphi-workspace = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
542# Abstracción Selector — host (paths) + wawa (khipus).
543llimphi-module-selector = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
544
545# === Filesystem helpers ===
546directories = "5"
547
548# === Diff line-based (llimphi-module-diff-viewer) ===
549# `similar` es la crate de facto: implementa Myers + Patience + LCS,
550# expone `TextDiff` con ChangeTag por línea (Equal/Insert/Delete),
551# zero deps fuera de std. La 2.x es estable hace años.
552similar = "2"
553
554# === Fuzzy matching (shuma-history) ===
555# nucleo-matcher = mismo matcher que helix-editor: rápido, Unicode-correct,
556# bonus por prefijos, ranking estable. La versión 0.3 expone el API simple
557# que necesitamos (Matcher + Pattern + score).
558nucleo-matcher = "0.3"
559
560# === Transporte autenticado (shuma-link) ===
561# snow = framework Noise pure-rust. Lo usamos en modo Noise_XK (cliente
562# conoce la pubkey del servidor, server descubre la del cliente y la
563# valida contra una allowlist). ChaCha20-Poly1305 + X25519 + BLAKE2s.
564# La versión 0.9 viene pinneada por libp2p, así nos alineamos.
565snow = "0.9"
566hex = "0.4"
567
568# === PTY + emulador de terminal (shuma-exec, módulos REPL) ===
569# portable-pty aloja un PTY cross-platform; lo usamos para los
570# comandos TUI tipo vim/htop/less que necesitan un terminal de verdad.
571# vt100 parsea la secuencia de bytes que el PTY emite (ANSI + cursor
572# movement + erase + screen state) y mantiene un buffer de pantalla
573# renderizable como grid.
574portable-pty = "0.9"
575vt100 = "0.16"
576
577# === WASM web (tawasuyu) ===
578wasm-bindgen = "0.2"
579wasm-bindgen-futures = "0.4"
580js-sys = "0.3"
581web-sys = "0.3"
582glam = "0.30"
583
584# === Markdown (pluma) ===
585pulldown-cmark = { version = "0.12", default-features = false, features = ["html"] }
586
587# === Archivos comprimidos (nahual archive viewer) ===
588# Sólo listamos el directorio central (nombres/tamaños); no descomprimimos,
589# por eso default-features=false alcanza para ZIP. Para tar.gz sí
590# descomprimimos en streaming con flate2 (ya declarado arriba), saltando
591# los datos de cada entrada — sólo leemos headers.
592zip = { version = "2.4", default-features = false }
593tar = { version = "0.4", default-features = false }
594
595# === Fuentes (nahual font viewer) ===
596# Parseo de TTF/OTF/TTC y extracción de contornos de glifo a paths.
597ttf-parser = "0.25"
598
599# ============================================================
600# Intra-workspace deps de nahual (referenciadas por workspace = true)
601# ============================================================
602nahual-text-viewer-llimphi = { path = "02_ruway/nahual/nahual-text-viewer-llimphi" }
603nahual-image-viewer-llimphi = { path = "02_ruway/nahual/nahual-image-viewer-llimphi" }
604nahual-pdf-viewer-llimphi = { path = "02_ruway/nahual/nahual-pdf-viewer-llimphi" }
605nahual-cbz-viewer-llimphi = { path = "02_ruway/nahual/nahual-cbz-viewer-llimphi" }
606nahual-thumb-core = { path = "02_ruway/nahual/nahual-thumb-core" }
607nahual-vistazo-core = { path = "02_ruway/nahual/nahual-vistazo-core" }
608nahual-gallery-llimphi = { path = "02_ruway/nahual/nahual-gallery-llimphi" }
609nahual-video-viewer-llimphi = { path = "02_ruway/nahual/nahual-video-viewer-llimphi" }
610nahual-card-viewer-llimphi = { path = "02_ruway/nahual/nahual-card-viewer-llimphi" }
611nahual-audio-viewer-llimphi = { path = "02_ruway/nahual/nahual-audio-viewer-llimphi" }
612media-module = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
613tullpu-module = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
614tullpu-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
615tullpu-icon-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
616tullpu-icon-cli = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
617tullpu-icon-llimphi = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
618tullpu-icon-llm = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
619foreign-svg = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
620foreign-pdf = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
621tullpu-render = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
622tullpu-tiles = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
623tullpu-render-gpu = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
624tullpu-ops = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
625tullpu-paint = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
626nahual-tree-viewer-llimphi = { path = "02_ruway/nahual/nahual-tree-viewer-llimphi" }
627nahual-hex-viewer-llimphi = { path = "02_ruway/nahual/nahual-hex-viewer-llimphi" }
628nahual-svg-viewer-llimphi = { path = "02_ruway/nahual/nahual-svg-viewer-llimphi" }
629nahual-sheet-viewer-llimphi = { path = "02_ruway/nahual/nahual-sheet-viewer-llimphi" }
630nahual-dbf-viewer-llimphi = { path = "02_ruway/nahual/nahual-dbf-viewer-llimphi" }
631nahual-table-viewer-llimphi = { path = "02_ruway/nahual/nahual-table-viewer-llimphi" }
632nahual-markdown-viewer-llimphi = { path = "02_ruway/nahual/nahual-markdown-viewer-llimphi" }
633nahual-pluma-viewer-llimphi = { path = "02_ruway/nahual/nahual-pluma-viewer-llimphi" }
634nahual-cotejo-llimphi = { path = "02_ruway/nahual/nahual-cotejo-llimphi" }
635nahual-deck-viewer-llimphi = { path = "02_ruway/nahual/nahual-deck-viewer-llimphi" }
636nahual-archive-viewer-llimphi = { path = "02_ruway/nahual/nahual-archive-viewer-llimphi" }
637nahual-font-viewer-llimphi = { path = "02_ruway/nahual/nahual-font-viewer-llimphi" }
638nahual-map-viewer-llimphi = { path = "02_ruway/nahual/nahual-map-viewer-llimphi" }
639nahual-geo-core = { path = "02_ruway/nahual/nahual-geo-core" }
640nahual-geo-voxel = { path = "02_ruway/nahual/nahual-geo-voxel" }
641nahual-iconos = { path = "02_ruway/nahual/nahual-iconos" }
642nahual-viewer-core = { path = "02_ruway/nahual/nahual-viewer-core" }
643nahual-file-explorer-llimphi = { path = "02_ruway/nahual/nahual-file-explorer-llimphi" }
644
645# ============================================================
646# Intra-workspace deps de pineal (módulo de gráficos)
647# ============================================================
648pineal-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
649pineal-render = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
650pineal-cartesian = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
651pineal-stream = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
652pineal-mesh = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
653pineal-financial = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
654pineal-polar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
655pineal-heatmap = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
656pineal-treemap = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
657pineal-flow = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
658pineal-phosphor = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
659pineal-export = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
660pineal-hexbin = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
661pineal-contour = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
662pineal-bars = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
663pineal-quiver = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
664pineal-yupana = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
665pineal = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
666
667# ============================================================
668# Intra-workspace deps de iniy (laboratorio semántico de creencias)
669# ============================================================
670iniy-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
671iniy-evidencia = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
672iniy-derive = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
673iniy-emisores = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
674iniy-cache = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
675iniy-daemon = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
676iniy-ingest = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
677iniy-extract = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
678iniy-nli = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
679iniy-nli-llm = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
680iniy-graph = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
681iniy-store = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
682# la física de decaimiento de khipu la importa iniy-derive (SDD iniy §3)
683khipu-gravity = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
684
685# === auto: declarados por crates internos faltantes ===
686cosmos-coords = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
687cosmos-cities = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
688cosmos-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
689cosmos-ephemeris = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
690cosmos-time = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
691cosmos-wcs = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
692
693# === auto: externas de eternal ===
694celestial-eop-data = { version = "0.1"}
695approx = "0.5"
696byteorder = "1.5"
697cc = "1.0"
698chrono = "0.4"
699chrono-tz = "0.10"
700crc32fast = "1.4"
701criterion = "0.5"
702csv = "1.4"
703flate2 = "1.0"
704glob = "0.3"
705indicatif = "0.18"
706lz4_flex = "0.11"
707memmap2 = "0.9"
708# Cliente Wayland (lado cliente) — lo usa hapiy para hablar zwlr_screencopy
709# contra mirada (u otro compositor wlroots) y capturar la pantalla.
710wayland-client = "0.31"
711wayland-protocols-wlr = { version = "0.3", features = ["client"] }
712wayland-protocols-misc = { version = "0.3", features = ["client"] }
713# PipeWire (bindings a libpipewire-0.3, MIT) — el transporte de video que
714# `xdg-desktop-portal` exige para compartir pantalla. Lo usa
715# `mirada-screencast`; no entra al compositor (ver su LEEME: el productor es
716# un cliente wlr-screencopy, no el compositor mismo).
717#
718# `v0_3_34` es el piso que habilita `pw_stream_trigger_process` — sin él un
719# nodo DRIVER no se puede disparar y el consumidor recibe CERO cuadros, sin
720# error. Se pide el mínimo que hace falta, no la última: la feature declara
721# contra qué libpipewire se compila, y pedir de más rompería en una distro con
722# la biblioteca más vieja.
723pipewire = { version = "0.10", features = ["v0_3_34"] }
724libspa = "0.10"
725mockito = "1.0"
726ndarray = "0.15"
727num-traits = "0.2"
728once_cell = "1.19"
729parking_lot = "0.12"
730png = "0.18"
731proptest = "1.4"
732quick-xml = "0.31"
733rayon = "1.8"
734regex = "1.11"
735# TLS por **rustls**, no por el `default-tls` de reqwest (que es `native-tls`
736# y arrastra `openssl-sys`). Dos razones, y la segunda es la que muerde:
737#  1. `openssl-sys` NO cross-compila a `aarch64-linux-android` — su build
738#     script no encuentra la libreria del NDK. Con el default puesto, toda
739#     app que toque HTTP queda fuera del porte a Android (khipu fue la
740#     primera en chocar).
741#  2. Seis de los doce consumidores YA pedian `rustls-tls` a mano. Como las
742#     features de cargo son aditivas, eso no apagaba `default-tls`: estaban
743#     linkeando **las dos** pilas de TLS creyendo que usaban una. Esto hace
744#     verdadero lo que esos crates ya decian.
745# El resto de los defaults de reqwest se conservan uno por uno.
746# ⚠️ Cambio de comportamiento a nombrar: rustls valida contra las raices
747# empaquetadas (webpki-roots), no contra el almacen de certificados del SO.
748# Para las APIs publicas que consume la suite da igual; un servidor con CA
749# propia habria que agregarlo explicitamente.
750reqwest = { version = "0.12", default-features = false, features = [
751    "rustls-tls",
752    "charset",
753    "http2",
754    "macos-system-configuration",
755] }
756tiff = "0.11"
757wide = "0.7"
758wiremock = "0.6"
759
760# === i18n (rimay-localize) ===
761fluent-bundle = "0.15"
762unic-langid = { version = "0.9", features = ["macros"] }
763sys-locale = "0.3"
764
765# === Servo (puriy-engine) ===
766# Crates publicados de Servo embebibles individualmente. html5ever/markup5ever
767# ya entran via ammonia→surrealdb→nakui, así que alineamos versión para no
768# duplicar el árbol. markup5ever_rcdom es el DOM Rc-based simple (suficiente
769# para Fase 2: parsear y renderizar, sin scripting). cssparser es el tokenizer
770# CSS de Stylo, sirve para inline styles. ureq = HTTP síncrono minimalista,
771# evita pull de tokio en el engine.
772html5ever = "0.39"
773markup5ever = "0.39"
774markup5ever_rcdom = "0.39"
775cssparser = "0.35"
776url = "2"
777# `gzip`: sin ella ureq ni anuncia `Accept-Encoding` ni decodifica la respuesta.
778# python.org (detrás de Fastly) devuelve `content-encoding: gzip` AUNQUE no se lo
779# pidan, y el cuerpo comprimido se decodificaba como UTF-8: 3.911 caracteres
780# U+FFFD y una página de 16 cajas en vez de 1.489. Además baja lo que se
781# descarga en todo el resto.
782ureq = { version = "2", default-features = false, features = ["tls", "gzip"] }
783# Charset de la web real: no todo es UTF-8 (google.com sirve ISO-8859-1).
784# Ya venía transitivo por el stack de Servo — aquí se hace explícito.
785encoding_rs = "0.8"
786
787# === takiy-synth (SoundFont MIDI) ===
788# rustysynth = sintetizador SF2 puro Rust, MIT. Reemplaza el oscilador
789# feo de takiy-synth por muestras reales (FluidR3, GeneralUser GS, etc).
790rustysynth = "1.3"
791
792# === takiy-playback (audio device output) ===
793# cpal = backend de audio cross-platform (ALSA/PulseAudio/Pipewire en
794# Linux, WASAPI en Windows, CoreAudio en macOS). Lo usamos sólo para
795# abrir el device default y empujar muestras f32 — nada de mezclado
796# ni efectos en el callback.
797cpal = "0.15"
798
799# === media-source-wav (decoder PCM en disco) ===
800# hound = lector/escritor WAV puro-Rust, sin deps nativas. Soporta PCM
801# entero (8/16/24/32) y float (32). Suficiente para abrir samples y
802# stems de prueba sin meter ffmpeg/symphonia.
803hound = "3.5"
804
805# === media-source-{mp3,flac,vorbis} (decoders vía symphonia) ===
806# symphonia es una colección de decoders puro-Rust mantenida. `mp3` cubre
807# media-source-mp3; `flac` (decoder + demuxer FLAC nativo) cubre
808# media-source-flac (lossless); `vorbis` + `ogg` (codec + demuxer Ogg)
809# cubren media-source-vorbis (lossy clásico, libre de patentes). Sin aac:
810# ese tier patentado entra por shared/foreign-av.
811symphonia = { version = "0.5", default-features = false, features = ["mp3", "flac", "vorbis", "ogg"] }
812
813# === media-source-opus (decoder Opus NATIVO puro-Rust) ===
814# Opus es el formato de audio nativo de tawasuyu (par del video AV1). ogg
815# demuxea las páginas Ogg; opus-wave es un port puro-Rust de libopus
816# (SILK+CELT, sin C ni FFI) — par del rav1d del lado video.
817ogg = "0.9"
818opus-wave = "3"
819
820# === media-source-webm (demux nativo Matroska/WebM) ===
821# matroska-demuxer es un demuxer puro-Rust de MKV/WebM (EBML). Saca los
822# paquetes de los tracks V_AV1 y A_OPUS para alimentar a media-source-av1
823# y media-source-opus — un .webm AV1+Opus se reproduce 100% nativo.
824matroska-demuxer = "0.7"
825
826# === Perfil `dist`: binarios de reparto livianos (equipos chicos / poca RAM) ===
827# Hereda de `release` pero prioriza HUELLA sobre tiempo de compilación: LTO thin
828# (poda código muerto entre crates), un solo codegen-unit (mejor inlining/DCE) y
829# `strip` de símbolos. Reduce el tamaño en disco Y el segmento de código mapeado
830# en RAM de cada binario (mirada, pata, apps Llimphi). No toca `cargo build
831# --release` de iteración diaria; se usa sólo al empaquetar:
832#   cargo build --profile dist -p mirada-compositor -p pata-host …
833# `panic = "unwind"` se mantiene a propósito: mirada-plugin-host aísla plugins
834# con `catch_unwind`, así que `abort` rompería el sandbox.
835# === Crates del monorepo consumidos por git-dep (pin del tag) ===
836agora-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
837agora-dispositivo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
838card-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
839card-net = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
840card-sidecar = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
841chasqui-card = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
842chasqui-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
843foreign-archivo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
844foreign-av = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
845foreign-dbf = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
846foreign-docx = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
847foreign-epub = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
848foreign-fs = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
849foreign-geotiff = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
850foreign-jxl = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
851foreign-odt = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
852foreign-pptx = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
853foreign-psd = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
854foreign-xlsx = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
855format = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
856llimphi-despacho = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
857llimphi-hal = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
858llimphi-raster = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
859media-audio-cpal = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
860media-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
861media-source-av1 = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
862media-source-flac = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
863media-source-gif = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
864media-source-mp3 = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
865media-source-opus = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
866media-source-vorbis = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
867media-source-wav = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
868media-source-webm = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
869minga-commit = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
870minga-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
871minga-merge = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
872minga-object = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
873minga-store = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
874nakui-sheet = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
875pacha-secretos-cliente = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
876pluma-align = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
877pluma-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
878pluma-cotejo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
879pluma-cuerpo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
880pluma-deck-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
881pluma-deck-recorrido-llimphi = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
882pluma-editor-llimphi = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
883pluma-estilo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
884pluma-llm = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
885pluma-md = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
886puriy-engine = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
887puriy-render = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
888qutu = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
889rimay-localize = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
890rimay-verbo = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
891shuma-discern = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
892shuma-module = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
893shuma-module-shell = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
894tejido = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
895wawa-config = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
896wawa-config-llimphi = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
897wawa-explorer-core = { git = "https://git.tawasuyu.net/tawasuyu/tawasuyu.git", tag = "v0.3.0" }
898
899[profile.dist]
900inherits = "release"
901lto = "thin"
902codegen-units = 1
903strip = "symbols"
904panic = "unwind"
905
906
907
908# Un solo origen para los crates del dominio: la copia local gana
909# sobre la que arrastran las git-deps del monorepo.
910[patch."https://git.tawasuyu.net/tawasuyu/tawasuyu.git"]
911nahual-audio-viewer-llimphi = { path = "02_ruway/nahual/nahual-audio-viewer-llimphi" }
912nahual-pdf-viewer-llimphi = { path = "02_ruway/nahual/nahual-pdf-viewer-llimphi" }
913nahual-video-viewer-llimphi = { path = "02_ruway/nahual/nahual-video-viewer-llimphi" }