tawasuyu

tawasuyu/agora

> Public square. Federated identity and a trust graph that no one runs.

Rust 76Markdown 49TOML 211529 Definiciones

⎇ main Cargo.toml TOML · 858 líneas · 51.2 KB Historia crudo

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

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