El repo publico se habia quedado en julio: el README anunciaba vello 0.7 + wgpu 27 (dos bumps atras) y faltaban los crates del ultimo mes. - refresco con scripts/actualizar-standalone.py --llimphi (cargo check OK) - llegan llimphi-cpu, llimphi-hybrid, llimphi-glifos y llimphi-wire-escena: los cuatro caminos a pixeles con un solo compositor - MANUAL.md / SDD.md / LEEME.md sincronizados con el monorepo - README: versiones al dia, install por crates.io (cargo add llimphi), seccion "beyond the 2D widget kit" y el indice de crates que apuntaba al propio README ahora apunta a MANUAL.md §19
741 lines
32 KiB
TOML
741 lines
32 KiB
TOML
# Cargo.toml raíz STANDALONE de Llimphi — repo público (GitHub + Gitea).
|
||
# GENERADO por scripts/actualizar-standalone.py --llimphi desde el monorepo:
|
||
# el árbol 02_ruway/llimphi/* se aplana y `shared/{app-bus,foreign-vox}` se
|
||
# vendoriza. `exclude` = crates acoplados al resto del workspace madre.
|
||
[workspace]
|
||
resolver = "2"
|
||
|
||
# ============================================================
|
||
# Cuadrantes — agregar a medida que se migran
|
||
# ============================================================
|
||
members = [
|
||
"llimphi",
|
||
"llimphi-3d",
|
||
"llimphi-anim",
|
||
"llimphi-anim-studio",
|
||
"llimphi-compositor",
|
||
"llimphi-cpu",
|
||
"llimphi-gallery",
|
||
"llimphi-glifos",
|
||
"llimphi-gpu-bench",
|
||
"llimphi-hal",
|
||
"llimphi-hybrid",
|
||
"llimphi-icons",
|
||
"llimphi-image",
|
||
"llimphi-layer",
|
||
"llimphi-layout",
|
||
"llimphi-lottie",
|
||
"llimphi-mesh",
|
||
"llimphi-motion",
|
||
"llimphi-raster",
|
||
"llimphi-surface",
|
||
"llimphi-svg",
|
||
"llimphi-term-graphics",
|
||
"llimphi-test",
|
||
"llimphi-text",
|
||
"llimphi-theme",
|
||
"llimphi-ui",
|
||
"llimphi-voxel",
|
||
"llimphi-wasm-app-sdk",
|
||
"llimphi-wasm-demo-counter",
|
||
"llimphi-wasm-demo-form",
|
||
"llimphi-wasm-wasi",
|
||
"llimphi-wire-escena",
|
||
"llimphi-wire-view",
|
||
"llimphi-workspace",
|
||
"modules/bookmarks",
|
||
"modules/command-palette",
|
||
"modules/diff-viewer",
|
||
"modules/fif",
|
||
"modules/file-picker",
|
||
"modules/mini-map",
|
||
"modules/selector",
|
||
"modules/symbol-outline",
|
||
"shared/app-bus",
|
||
"shared/foreign-lottie",
|
||
"shared/foreign-vox",
|
||
"shared/grafo",
|
||
"widgets/accordion",
|
||
"widgets/app-header",
|
||
"widgets/avatar",
|
||
"widgets/badge",
|
||
"widgets/banner",
|
||
"widgets/breadcrumb",
|
||
"widgets/button",
|
||
"widgets/calendar",
|
||
"widgets/card",
|
||
"widgets/carousel",
|
||
"widgets/chip",
|
||
"widgets/clipboard",
|
||
"widgets/color-picker",
|
||
"widgets/context-menu",
|
||
"widgets/datetime-picker",
|
||
"widgets/detail-table",
|
||
"widgets/dock-rail",
|
||
"widgets/edit-menu",
|
||
"widgets/empty",
|
||
"widgets/fab",
|
||
"widgets/field",
|
||
"widgets/fitted-box",
|
||
"widgets/form",
|
||
"widgets/gallery",
|
||
"widgets/gauge",
|
||
"widgets/grid",
|
||
"widgets/hero",
|
||
"widgets/lazy-list",
|
||
"widgets/list",
|
||
"widgets/menubar",
|
||
"widgets/modal",
|
||
"widgets/navigator",
|
||
"widgets/nodegraph",
|
||
"widgets/panel",
|
||
"widgets/panes",
|
||
"widgets/progress",
|
||
"widgets/rag-sidebar",
|
||
"widgets/range-slider",
|
||
"widgets/rating",
|
||
"widgets/rive-button",
|
||
"widgets/router",
|
||
"widgets/scaffold",
|
||
"widgets/scroll",
|
||
"widgets/segmented",
|
||
"widgets/select",
|
||
"widgets/shortcuts-help",
|
||
"widgets/skeleton",
|
||
"widgets/slider",
|
||
"widgets/spinner",
|
||
"widgets/splash",
|
||
"widgets/splitter",
|
||
"widgets/stat-card",
|
||
"widgets/status-bar",
|
||
"widgets/stepper",
|
||
"widgets/switch",
|
||
"widgets/table",
|
||
"widgets/tabs",
|
||
"widgets/terminal",
|
||
"widgets/text-area",
|
||
"widgets/text-editor",
|
||
"widgets/text-editor-core",
|
||
"widgets/text-editor-lsp",
|
||
"widgets/text-input",
|
||
"widgets/theme-switcher",
|
||
"widgets/tiled",
|
||
"widgets/timeline",
|
||
"widgets/toast",
|
||
"widgets/toolbar",
|
||
"widgets/tooltip",
|
||
"widgets/transport",
|
||
"widgets/tree",
|
||
"widgets/waveform",
|
||
"widgets/wawa-mark",
|
||
"widgets/wrap",
|
||
]
|
||
|
||
# `wawa/` se excluye del workspace global porque corre en target
|
||
# `x86_64-unknown-none` y `panic = "abort"`, incompatibles con los
|
||
# perfiles globales. Los crates compartidos se referencian por `path`
|
||
# cruzando la frontera.
|
||
# `llimphi-wawa` está EXCLUIDA, no ausente por olvido. Enciende
|
||
# `llimphi-text/cpu`, que es el backend EXCLUYENTE del `vello` que todo el resto
|
||
# del workspace usa por default — y la unificación de features de cargo los
|
||
# junta, disparando el `compile_error!` que llimphi-text tiene justo para
|
||
# delatarlo. Vive en el mismo mundo que el kernel: se compila aparte, con su
|
||
# propio lock. Sus tests se corren así:
|
||
# cargo test --manifest-path llimphi-wawa/Cargo.toml \
|
||
# --no-default-features --features std
|
||
#
|
||
# `llimphi-jaula` está excluida por lo MISMO, del otro lado: enciende
|
||
# `llimphi-text/wire`, el tercer backend excluyente (W4). Es la cáscara de una
|
||
# app dentro de la jaula WASM — el gemelo de `llimphi-wawa`—, y que las dos estén
|
||
# afuera del workspace no es una molestia sino el diseño: son dos procesos en dos
|
||
# lados de una frontera, y forzarlos a compartir un lock sería fingir lo
|
||
# contrario. Sus tests:
|
||
# cargo test --manifest-path llimphi-jaula/Cargo.toml \
|
||
# --no-default-features --features std
|
||
#
|
||
# `llimphi-hybrid-android` está excluida **por contagio**: consume `llimphi-wawa`
|
||
# y por lo tanto arrastra el mismo `llimphi-text/cpu`. Es la tercera cáscara de
|
||
# la familia —kernel, jaula, teléfono— y cae del mismo lado de la frontera por
|
||
# el mismo motivo. Se compila así:
|
||
# cargo check --manifest-path \
|
||
# android/llimphi-hybrid-android/Cargo.toml
|
||
# y se empaca con `android/scripts/build-android.sh`.
|
||
exclude = [
|
||
"android",
|
||
"demo",
|
||
"llimphi-jaula",
|
||
"llimphi-video-plane",
|
||
"llimphi-voxel-app",
|
||
"llimphi-voxel-studio",
|
||
"llimphi-wasm-core",
|
||
"llimphi-wasm-dist",
|
||
"llimphi-wasm-net",
|
||
"llimphi-wasm-open",
|
||
"llimphi-wasm-registry",
|
||
"llimphi-wasm-runner",
|
||
"llimphi-wawa",
|
||
"modules/allichay",
|
||
"modules/plugin-host",
|
||
"modules/shuma-term",
|
||
]
|
||
|
||
[workspace.package]
|
||
version = "0.1.0"
|
||
edition = "2021"
|
||
rust-version = "1.80"
|
||
license = "MIT"
|
||
authors = ["Sergio <gerencia@jlsoltech.com>"]
|
||
publish = true
|
||
repository = "https://git.tawasuyu.net/tawasuyu/llimphi"
|
||
|
||
[workspace.dependencies]
|
||
# === Configuración declarativa (vocabulario de esquemas) ===
|
||
# Escala única de `nice` de la sesión (compositor · marco · app · segundo plano
|
||
# · lote) + las tres formas de aplicarla (propia / pid vivo / pre_exec).
|
||
# Telemetría local de desarrollo (stderr+panics+tracing → $XDG_STATE_HOME/tawasuyu/<dominio>/<bin>.log)
|
||
# default = [] (núcleo liviano sin vello); `bake` es opt-in. Declaramos
|
||
# default-features = false aquí para que el `default-features = false` de los
|
||
# consumidores (splash/greeter/compositor) se honre y no quede el warning.
|
||
# === Registro de apps / menú global ===
|
||
app-bus = { path = "shared/app-bus", version = "0.1.0" }
|
||
# === Centro de eventos (notificaciones + capturas + clipboard + …) ===
|
||
# === Puente de drag-and-drop compositor → app (suple winit en Wayland) ===
|
||
# === Serialización ===
|
||
serde = { version = "1", features = ["derive"] }
|
||
serde_json = "1"
|
||
lsp-types = "0.97"
|
||
serde-big-array = "0.5"
|
||
postcard = { version = "1", features = ["use-std"] }
|
||
toml = "0.8"
|
||
ron = "0.8"
|
||
bincode = "1"
|
||
base64 = "0.22"
|
||
|
||
# === Errores ===
|
||
thiserror = "2" # bump uniforme; arje (era 1) puede requerir ajustes menores
|
||
anyhow = "1"
|
||
|
||
# === Async ===
|
||
tokio = { version = "1", features = ["full"] }
|
||
tokio-util = { version = "0.7", features = ["compat"] }
|
||
async-trait = "0.1"
|
||
futures = "0.3"
|
||
|
||
# === Observabilidad ===
|
||
tracing = "0.1"
|
||
tracing-subscriber = { version = "0.3", features = ["env-filter", "fmt"] }
|
||
|
||
# === Linux primitives (arje) ===
|
||
nix = { version = "0.29", features = ["signal", "process", "sched", "mount", "fs", "socket", "net", "user", "reboot"] }
|
||
libc = "0.2"
|
||
# DRM/KMS legacy (dumb buffer) para el splash nativo del arranque sin parpadeo.
|
||
# Misma versión que reexporta smithay (mirada-compositor) — el lock ya la fija.
|
||
drm = "0.14"
|
||
font8x8 = { version = "0.3", default-features = false }
|
||
|
||
# === IDs / Hash / Crypto ===
|
||
ulid = { version = "1", features = ["serde"] }
|
||
uuid = { version = "1", features = ["v4", "rng-getrandom"] }
|
||
sha2 = "0.10"
|
||
blake3 = "1.5"
|
||
ed25519-dalek = "2"
|
||
aes-gcm = "0.10"
|
||
chacha20poly1305 = "0.10"
|
||
argon2 = "0.5"
|
||
rand = "0.8"
|
||
# TOTP (RFC 6238) del segundo factor de nakui: HMAC-SHA1 es lo que hablan
|
||
# Google Authenticator, Aegis y los tokens de hardware — no es elección
|
||
# nuestra, es el formato del ecosistema. base32 para el secreto del QR.
|
||
hmac = "0.12"
|
||
sha1 = "0.10"
|
||
data-encoding = "2"
|
||
|
||
# === WASM (arje) ===
|
||
# wasmi 1.0: unifica la versión con wawa (su kernel ya corre 1.0), para
|
||
# que el ABI WASM del host sea idéntico en Linux y en bare-metal.
|
||
wasmi = "1.0"
|
||
wat = "1"
|
||
# wasmtime 46 (Fase 1 del pipeline JS): tier 0 de puriy-js pasa de wasmi
|
||
# (intérprete) a Wasmtime AOT (Cranelift → nativo) en Linux — quita la doble
|
||
# interpretación de QuickJS.wasm. En wawa bare-metal el runtime es Pulley (spike
|
||
# Q1 cerrado); mismo crate, distinto backend.
|
||
wasmtime = "46"
|
||
|
||
# === Storage / DB ===
|
||
sled = "0.34"
|
||
rusqlite = { version = "0.31", features = ["bundled", "blob"] }
|
||
|
||
# === Ingesta de documentos (iniy-ingest: PDF / EPUB) ===
|
||
pdf-extract = "0.7"
|
||
epub = "2.1"
|
||
|
||
# === Bulk import Wikipedia (iniy-wiki dump) ===
|
||
bzip2 = "0.4"
|
||
|
||
# === Compresión (minga multi-bundle) ===
|
||
zstd = "0.13"
|
||
xz2 = "0.1"
|
||
# Contenedores adicionales del visor Archive de nahual (sólo listado).
|
||
sevenz-rust = "0.6"
|
||
unrar = "0.5"
|
||
|
||
# === HTTP server (iniy-server) ===
|
||
axum = "0.7"
|
||
tower = "0.5"
|
||
|
||
# === ANN sobre embeddings (iniy nli --ann) ===
|
||
instant-distance = "0.6"
|
||
|
||
# === P2P (minga) ===
|
||
libp2p = { version = "0.56", features = ["tokio", "tcp", "dns", "noise", "yamux", "macros", "kad", "identify", "relay", "dcutr", "autonat", "mdns"] }
|
||
libp2p-stream = "=0.4.0-alpha"
|
||
libp2p-allow-block-list = "0.6"
|
||
|
||
# === SSH (ssh, sandokan RemoteEngine, matilda) ===
|
||
russh = "0.54"
|
||
|
||
# === Math determinista cross-platform (dominium) ===
|
||
libm = "0.2"
|
||
|
||
# === SMF (takiy-midi) ===
|
||
# midly: parser/emitter SMF tipo 0/1, no_std-friendly, sin allocs en hot path.
|
||
midly = "0.5"
|
||
|
||
# === Code parsing (minga) ===
|
||
# `wayland-data-control` trae el backend wl-clipboard-rs: bajo mirada (Wayland
|
||
# propio, sin Xwayland para apps nativas) arboard-x11 fallaba a no-op silencioso
|
||
# y el clipboard de los text-editor quedaba muerto. Con la feature habla
|
||
# zwlr_data_control_manager_v1 (que mirada expone) y cae a X11 si no hay Wayland.
|
||
arboard = { version = "3", features = ["wayland-data-control"] }
|
||
ropey = "1.6"
|
||
tree-sitter = "0.24"
|
||
tree-sitter-rust = "0.23"
|
||
tree-sitter-python = "0.23"
|
||
tree-sitter-typescript = "0.23"
|
||
tree-sitter-javascript = "0.23"
|
||
tree-sitter-go = "0.23"
|
||
|
||
# === FS notify ===
|
||
notify = "6.1"
|
||
|
||
# === Grafos (iniy, nakui-core ya lo usa directo en 0.6) ===
|
||
petgraph = "0.6"
|
||
|
||
# === Image decoding (nahual-image-viewer-llimphi) ===
|
||
# default-features = false: nos quedamos con PNG + JPEG + WebP (lossless).
|
||
# tullpu-render exporta a las tres; AVIF/TIFF/… los habilitamos si una app
|
||
# los pide específicamente.
|
||
# Decoders puro-Rust baratos; avif queda fuera (arrastra dav1d/rav1e).
|
||
image = { version = "0.25", default-features = false, features = ["png", "jpeg", "webp", "gif", "bmp", "ico", "tiff", "tga", "qoi"] }
|
||
# ONNX Runtime para los proveedores de píxel reales (pixel-verbo-onnx: segmentación
|
||
# u2net/isnet, inpaint, restyle…). `download-binaries` (default) baja el runtime nativo
|
||
# solo; ya lo arrastraba fastembed (rimay-verbo) transitivo — aquí lo declaramos directo.
|
||
ort = "2.0.0-rc.9"
|
||
|
||
# Rasterizador vectorial CPU (relleno/trazo anti-aliased) para capas vectoriales de tullpu.
|
||
tiny-skia = "0.11"
|
||
# Booleanos de polígonos robustos (union/intersection/difference/xor) para el
|
||
# clipper vectorial de tullpu — restar/intersecar paths que se solapan
|
||
# parcialmente, que la regla de relleno no expresa. Ya estaba en el lock.
|
||
geo = "0.28"
|
||
|
||
# === FUSE (minga-vfs) ===
|
||
# default-features = false: prescinde de pkg-config/libfuse-dev en build.
|
||
# El montaje pasa a ser Rust puro (vía el helper `fusermount3` en runtime).
|
||
fuser = { version = "0.15", default-features = false }
|
||
|
||
# === CLI / auth (minga) ===
|
||
clap = { version = "4", features = ["derive"] }
|
||
rpassword = "7"
|
||
|
||
# === PAM (auth-core) ===
|
||
pam = "0.8"
|
||
|
||
# === D-Bus (arje compat) ===
|
||
zbus = { version = "4", default-features = false, features = ["tokio"] }
|
||
|
||
# === Tests ===
|
||
tempfile = "3"
|
||
|
||
# === Llimphi (motor gráfico soberano) ===
|
||
# wgpu sobre Vulkan/Metal/DX12, winit para ventana en dev Linux.
|
||
# raw-window-handle 0.6 alinea winit 0.30 con wgpu 29.
|
||
# vello 0.9 = rasterizador vectorial sobre wgpu 29 (renderer GPU "wgpu" + opt-in "hybrid" CPU+GPU).
|
||
#
|
||
# **El 27→29 no fue por gusto** (2026-07-28): `vello_hybrid 0.0.9` —el ÚNICO
|
||
# rasterizador que el driver Mali del teléfono digiere, ver
|
||
# `02_ruway/llimphi/android/DIAGNOSTICO.md`— vive en wgpu 29, y dos versiones de
|
||
# wgpu no comparten un `Device`. La migración salió barata porque `vello 0.9`
|
||
# usa el mismo peniko 0.6.1 y no movió su API de `Scene`: el bump de vello dio
|
||
# CERO errores; todos los que hubo fueron deriva de wgpu, y concentrada en los
|
||
# cuatro crates que tienen código wgpu propio.
|
||
# 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).
|
||
# parley 0.6 = shaping/layout de texto compatible con peniko 0.6 (que vello 0.7 expone).
|
||
wgpu = "29"
|
||
# El compilador de shaders que wgpu lleva adentro. Se declara acá para que los
|
||
# tests que validan WGSL headless (llimphi-3d, supay-render-llimphi) usen la
|
||
# MISMA versión que después compila esos shaders en la GPU. Con dos versiones,
|
||
# un test puede dar verde sobre un shader que el runtime rechaza — o al revés.
|
||
naga = "29"
|
||
winit = "0.30"
|
||
raw-window-handle = "0.6"
|
||
pollster = "0.4"
|
||
# `default-features = false` acá arriba y no en cada consumidor: el default de
|
||
# vello es ["wgpu","wgpu_default"], y `llimphi-text`/`llimphi-compositor` sólo
|
||
# quieren sus TIPOS (Scene, peniko), no el motor de GPU. Declararlo abajo no
|
||
# alcanza — cargo IGNORA `default-features` en un dep heredado si la raíz no lo
|
||
# fijó, y lo avisa con un warning fácil de pasar por alto. Quien necesita el
|
||
# motor lo pide por feature (ver llimphi-raster).
|
||
vello = { version = "0.9", default-features = false }
|
||
# Renderer hybrid CPU+GPU sin compute shaders (mejor compat WebGL2/Adreno viejas).
|
||
# Opt-in; el renderer "wgpu" sigue siendo el default.
|
||
vello_hybrid = "0.0.9"
|
||
# foreign-lottie = fork vendorizado de velato 0.9 (Lottie → vello::Scene),
|
||
# completado para no paniquear ante features no soportadas. Lo consume
|
||
# llimphi-lottie. Ver shared/foreign-lottie.
|
||
foreign-lottie = { path = "shared/foreign-lottie", version = "0.1.0" }
|
||
# Árbol de accesibilidad para lectores de pantalla (NVDA/VoiceOver/Orca/TalkBack).
|
||
# Lo consume el runtime de Llimphi (iter 2/3 del plan AccessKit); el modelo
|
||
# `SemanticsSpec` del compositor es independiente de estas crates.
|
||
accesskit = "0.24"
|
||
accesskit_winit = "0.33"
|
||
taffy = "0.12"
|
||
# parley = shaping completo (bidi, ligatures, fallback CJK/emoji vía fontique, line break).
|
||
parley = "0.6"
|
||
# Bucle Elm (input→update→view→layout→raster→present). Lo consumen las apps.
|
||
llimphi-ui = { path = "llimphi-ui", version = "0.1.0" }
|
||
# El compositor DIRECTO, para que el catálogo de widgets cuelgue de él y no del
|
||
# shell de escritorio (W4.6). Un widget que dependa de `llimphi-ui` arrastra
|
||
# winit + accesskit + arboard + vello, y con eso queda fuera del alcance de una
|
||
# app enjaulada; colgando de acá sirve igual en Linux, en el kernel y en la jaula.
|
||
#
|
||
# `default-features = false` VA ACÁ Y NO EN CADA WIDGET. Es la trampa recurrente
|
||
# de cargo: apagar los defaults desde un miembro NO HACE NADA si el workspace
|
||
# declaró la dep sin ellos (cargo lo avisa y lo ignora). Ya pasó con taffy, vello
|
||
# y peniko. Sin esto, cada widget encendería el backend `vello` del compositor y
|
||
# volvería a quedar fuera del alcance de una app enjaulada — que es justamente lo
|
||
# que W4.6 vino a arreglar. Quien ensambla la app elige el backend: `llimphi-ui`
|
||
# en Linux, `llimphi-jaula` en la jaula, `llimphi-wawa` en el kernel.
|
||
llimphi-compositor = { path = "llimphi-compositor", version = "0.1.0" }
|
||
# Tier 3 — apps WASM con UI Llimphi real. El guest pinta un WireNode (IR
|
||
# serializable), el host (runner) lo materializa en View<Msg> y rebota los
|
||
# eventos al update del guest. SDK = lado guest, runner = lado host.
|
||
llimphi-wire-view = { path = "llimphi-wire-view", version = "0.1.0" }
|
||
llimphi-wire-escena = { path = "llimphi-wire-escena", version = "0.1.0" }
|
||
llimphi-wasm-app-sdk = { path = "llimphi-wasm-app-sdk", version = "0.1.0" }
|
||
# Núcleo puro de distribución (CAS + verificación + resolve), SIN runner/GPU.
|
||
# Cara con baterías: re-exporta core + puente al runner para correr la app.
|
||
llimphi-wasm-wasi = { path = "llimphi-wasm-wasi", version = "0.1.0" }
|
||
# Transporte P2P del bytecode por hash sobre BrahmanNet (card-net).
|
||
llimphi-3d = { path = "llimphi-3d", version = "0.1.0" }
|
||
# Runner wlr-layer-shell: corre un `App` de Llimphi como barra anclada a un
|
||
# borde (no como ventana), reusando la plumbing sctk+wgpu que pata probó.
|
||
llimphi-layer = { path = "llimphi-layer", version = "0.1.0" }
|
||
# Paleta semántica compartida por las apps y los widgets.
|
||
llimphi-theme = { path = "llimphi-theme", version = "0.1.0" }
|
||
# Tweens y helpers de animación sobre el bucle Elm.
|
||
llimphi-motion = { path = "llimphi-motion", version = "0.1.0" }
|
||
# Máquina de estados de animación (estilo Rive) clip-agnóstica. Núcleo puro;
|
||
# el render lo cablea el consumidor (llimphi-lottie). Escalón sobre el playback.
|
||
llimphi-anim = { path = "llimphi-anim", version = "0.1.0" }
|
||
# Studio de animación «rive»: además del editor (bin), expone como lib los
|
||
# documentos serializables (Doc + RigDoc + Project) que carga mirada-fondo.
|
||
llimphi-anim-studio = { path = "llimphi-anim-studio", version = "0.1.0" }
|
||
# Render de mallas deformables (skel::Mesh) a vello Scene: vectorial y texturizada.
|
||
llimphi-mesh = { path = "llimphi-mesh", version = "0.1.0" }
|
||
# Iconos vectoriales (BezPath en grid 24×24) compartidos por todas las apps.
|
||
llimphi-icons = { path = "llimphi-icons", version = "0.1.0" }
|
||
# Puente fino vello_svg → Llimphi para SVG arbitrario (íconos .desktop, logos).
|
||
llimphi-svg = { path = "llimphi-svg", version = "0.1.0" }
|
||
# Puente fino velato (Lottie) → Llimphi para animación vectorial autorada (.json).
|
||
llimphi-lottie = { path = "llimphi-lottie", version = "0.1.0" }
|
||
llimphi-image = { path = "llimphi-image", version = "0.1.0" }
|
||
# Decodificador de protocolos de gráficos de terminal (kitty/sixel) → RGBA.
|
||
llimphi-term-graphics = { path = "llimphi-term-graphics", version = "0.1.0" }
|
||
# Widgets reusables sobre llimphi-ui — uno por crate.
|
||
llimphi-widget-app-header = { path = "widgets/app-header", version = "0.1.0" }
|
||
llimphi-widget-banner = { path = "widgets/banner", version = "0.1.0" }
|
||
llimphi-widget-button = { path = "widgets/button", version = "0.1.0" }
|
||
llimphi-widget-rive-button = { path = "widgets/rive-button", version = "0.1.0" }
|
||
llimphi-widget-card = { path = "widgets/card", version = "0.1.0" }
|
||
llimphi-clipboard = { path = "widgets/clipboard", version = "0.1.0" }
|
||
llimphi-widget-context-menu = { path = "widgets/context-menu", version = "0.1.0" }
|
||
llimphi-widget-edit-menu = { path = "widgets/edit-menu", version = "0.1.0" }
|
||
llimphi-widget-menubar = { path = "widgets/menubar", version = "0.1.0" }
|
||
llimphi-widget-list = { path = "widgets/list", version = "0.1.0" }
|
||
llimphi-widget-grid = { path = "widgets/grid", version = "0.1.0" }
|
||
llimphi-widget-table = { path = "widgets/table", version = "0.1.0" }
|
||
llimphi-widget-color-picker = { path = "widgets/color-picker", version = "0.1.0" }
|
||
llimphi-widget-slider = { path = "widgets/slider", version = "0.1.0" }
|
||
llimphi-widget-scroll = { path = "widgets/scroll", version = "0.1.0" }
|
||
llimphi-widget-lazy-list = { path = "widgets/lazy-list", version = "0.1.0" }
|
||
llimphi-widget-splitter = { path = "widgets/splitter", version = "0.1.0" }
|
||
llimphi-widget-stat-card = { path = "widgets/stat-card", version = "0.1.0" }
|
||
llimphi-widget-tabs = { path = "widgets/tabs", version = "0.1.0" }
|
||
llimphi-module-command-palette = { path = "modules/command-palette", version = "0.1.0" }
|
||
llimphi-module-diff-viewer = { path = "modules/diff-viewer", version = "0.1.0" }
|
||
llimphi-module-fif = { path = "modules/fif", version = "0.1.0" }
|
||
llimphi-module-file-picker = { path = "modules/file-picker", version = "0.1.0" }
|
||
llimphi-module-bookmarks = { path = "modules/bookmarks", version = "0.1.0" }
|
||
llimphi-module-mini-map = { path = "modules/mini-map", version = "0.1.0" }
|
||
llimphi-module-symbol-outline = { path = "modules/symbol-outline", version = "0.1.0" }
|
||
llimphi-widget-theme-switcher = { path = "widgets/theme-switcher", version = "0.1.0" }
|
||
llimphi-widget-text-area = { path = "widgets/text-area", version = "0.1.0" }
|
||
llimphi-widget-text-editor-core = { path = "widgets/text-editor-core", version = "0.1.0" }
|
||
llimphi-widget-text-editor = { path = "widgets/text-editor", version = "0.1.0" }
|
||
llimphi-widget-text-editor-lsp = { path = "widgets/text-editor-lsp", version = "0.1.0" }
|
||
llimphi-widget-text-input = { path = "widgets/text-input", version = "0.1.0" }
|
||
llimphi-widget-tiled = { path = "widgets/tiled", version = "0.1.0" }
|
||
llimphi-widget-nodegraph = { path = "widgets/nodegraph", version = "0.1.0" }
|
||
llimphi-widget-tree = { path = "widgets/tree", version = "0.1.0" }
|
||
grafo-nav = { path = "shared/grafo", version = "0.1.0" }
|
||
llimphi-widget-navigator = { path = "widgets/navigator", version = "0.1.0" }
|
||
llimphi-widget-detail-table = { path = "widgets/detail-table", version = "0.1.0" }
|
||
llimphi-widget-select = { path = "widgets/select", version = "0.1.0" }
|
||
llimphi-widget-terminal = { path = "widgets/terminal", version = "0.1.0" }
|
||
# Sello vectorial wawa (rombo + W implícita + Merkle Core).
|
||
llimphi-widget-wawa-mark = { path = "widgets/wawa-mark", version = "0.1.0" }
|
||
# Widgets de elegancia transversal (tooltip, spinner, progress, toast,
|
||
# modal, empty, status-bar, shortcuts-help, splash).
|
||
llimphi-widget-tooltip = { path = "widgets/tooltip", version = "0.1.0" }
|
||
llimphi-widget-spinner = { path = "widgets/spinner", version = "0.1.0" }
|
||
llimphi-widget-progress = { path = "widgets/progress", version = "0.1.0" }
|
||
llimphi-widget-toast = { path = "widgets/toast", version = "0.1.0" }
|
||
llimphi-widget-modal = { path = "widgets/modal", version = "0.1.0" }
|
||
llimphi-widget-empty = { path = "widgets/empty", version = "0.1.0" }
|
||
llimphi-widget-status-bar = { path = "widgets/status-bar", version = "0.1.0" }
|
||
llimphi-widget-shortcuts-help = { path = "widgets/shortcuts-help", version = "0.1.0" }
|
||
llimphi-widget-timeline = { path = "widgets/timeline", version = "0.1.0" }
|
||
llimphi-widget-transport = { path = "widgets/transport", version = "0.1.0" }
|
||
llimphi-widget-waveform = { path = "widgets/waveform", version = "0.1.0" }
|
||
llimphi-widget-splash = { path = "widgets/splash", version = "0.1.0" }
|
||
# Controles de formulario y signaling (switch, segmented, breadcrumb,
|
||
# badge, avatar, skeleton, field).
|
||
llimphi-widget-switch = { path = "widgets/switch", version = "0.1.0" }
|
||
llimphi-widget-segmented = { path = "widgets/segmented", version = "0.1.0" }
|
||
llimphi-widget-rag-sidebar = { path = "widgets/rag-sidebar", version = "0.1.0" }
|
||
llimphi-widget-dock-rail = { path = "widgets/dock-rail", version = "0.1.0" }
|
||
llimphi-widget-toolbar = { path = "widgets/toolbar", version = "0.1.0" }
|
||
llimphi-widget-breadcrumb = { path = "widgets/breadcrumb", version = "0.1.0" }
|
||
llimphi-widget-badge = { path = "widgets/badge", version = "0.1.0" }
|
||
llimphi-widget-avatar = { path = "widgets/avatar", version = "0.1.0" }
|
||
llimphi-widget-skeleton = { path = "widgets/skeleton", version = "0.1.0" }
|
||
llimphi-widget-field = { path = "widgets/field", version = "0.1.0" }
|
||
# Firma visual transversal (gradient sutil + hairline accent).
|
||
# `default-features = false` acá y no en `card`: los defaults de un widget sólo
|
||
# se pueden apagar desde la declaración del WORKSPACE (la trampa recurrente de
|
||
# cargo). Sin esto, `card` arrastraría a `panel` con backend `vello` y volvería a
|
||
# quedar fuera de una jaula, aunque `card` pidiera `wire`.
|
||
llimphi-widget-panel = { path = "widgets/panel", version = "0.1.0" }
|
||
llimphi-widget-panes = { path = "widgets/panes", version = "0.1.0" }
|
||
# Widgets Flutter-like — composición sobre primitivas Tier 1/3 ya
|
||
# expuestas (sombra, gradient, animated, ripple).
|
||
llimphi-widget-chip = { path = "widgets/chip", version = "0.1.0" }
|
||
llimphi-widget-fab = { path = "widgets/fab", version = "0.1.0" }
|
||
llimphi-widget-wrap = { path = "widgets/wrap", version = "0.1.0" }
|
||
llimphi-widget-range-slider = { path = "widgets/range-slider", version = "0.1.0" }
|
||
llimphi-widget-calendar = { path = "widgets/calendar", version = "0.1.0" }
|
||
llimphi-widget-datetime-picker = { path = "widgets/datetime-picker", version = "0.1.0" }
|
||
llimphi-widget-form = { path = "widgets/form", version = "0.1.0" }
|
||
llimphi-widget-accordion = { path = "widgets/accordion", version = "0.1.0" }
|
||
llimphi-widget-stepper = { path = "widgets/stepper", version = "0.1.0" }
|
||
llimphi-widget-fitted-box = { path = "widgets/fitted-box", version = "0.1.0" }
|
||
llimphi-widget-carousel = { path = "widgets/carousel", version = "0.1.0" }
|
||
llimphi-widget-rating = { path = "widgets/rating", version = "0.1.0" }
|
||
llimphi-widget-gauge = { path = "widgets/gauge", version = "0.1.0" }
|
||
llimphi-widget-scaffold = { path = "widgets/scaffold", version = "0.1.0" }
|
||
llimphi-widget-hero = { path = "widgets/hero", version = "0.1.0" }
|
||
llimphi-widget-router = { path = "widgets/router", version = "0.1.0" }
|
||
llimphi-workspace = { path = "llimphi-workspace", version = "0.1.0" }
|
||
# Abstracción Selector — host (paths) + wawa (khipus).
|
||
llimphi-module-selector = { path = "modules/selector", version = "0.1.0" }
|
||
|
||
# === Filesystem helpers ===
|
||
directories = "5"
|
||
|
||
# === Diff line-based (llimphi-module-diff-viewer) ===
|
||
# `similar` es la crate de facto: implementa Myers + Patience + LCS,
|
||
# expone `TextDiff` con ChangeTag por línea (Equal/Insert/Delete),
|
||
# zero deps fuera de std. La 2.x es estable hace años.
|
||
similar = "2"
|
||
|
||
# === Fuzzy matching (shuma-history) ===
|
||
# nucleo-matcher = mismo matcher que helix-editor: rápido, Unicode-correct,
|
||
# bonus por prefijos, ranking estable. La versión 0.3 expone el API simple
|
||
# que necesitamos (Matcher + Pattern + score).
|
||
nucleo-matcher = "0.3"
|
||
|
||
# === Transporte autenticado (shuma-link) ===
|
||
# snow = framework Noise pure-rust. Lo usamos en modo Noise_XK (cliente
|
||
# conoce la pubkey del servidor, server descubre la del cliente y la
|
||
# valida contra una allowlist). ChaCha20-Poly1305 + X25519 + BLAKE2s.
|
||
# La versión 0.9 viene pinneada por libp2p, así nos alineamos.
|
||
snow = "0.9"
|
||
hex = "0.4"
|
||
|
||
# === PTY + emulador de terminal (shuma-exec, módulos REPL) ===
|
||
# portable-pty aloja un PTY cross-platform; lo usamos para los
|
||
# comandos TUI tipo vim/htop/less que necesitan un terminal de verdad.
|
||
# vt100 parsea la secuencia de bytes que el PTY emite (ANSI + cursor
|
||
# movement + erase + screen state) y mantiene un buffer de pantalla
|
||
# renderizable como grid.
|
||
portable-pty = "0.9"
|
||
vt100 = "0.16"
|
||
|
||
# === WASM web (tawasuyu) ===
|
||
wasm-bindgen = "0.2"
|
||
wasm-bindgen-futures = "0.4"
|
||
js-sys = "0.3"
|
||
web-sys = "0.3"
|
||
glam = "0.30"
|
||
|
||
# === Markdown (pluma) ===
|
||
pulldown-cmark = { version = "0.12", default-features = false, features = ["html"] }
|
||
|
||
# === Archivos comprimidos (nahual archive viewer) ===
|
||
# Sólo listamos el directorio central (nombres/tamaños); no descomprimimos,
|
||
# por eso default-features=false alcanza para ZIP. Para tar.gz sí
|
||
# descomprimimos en streaming con flate2 (ya declarado arriba), saltando
|
||
# los datos de cada entrada — sólo leemos headers.
|
||
zip = { version = "2.4", default-features = false }
|
||
tar = { version = "0.4", default-features = false }
|
||
|
||
# === Fuentes (nahual font viewer) ===
|
||
# Parseo de TTF/OTF/TTC y extracción de contornos de glifo a paths.
|
||
ttf-parser = "0.25"
|
||
|
||
# ============================================================
|
||
# Intra-workspace deps de nahual (referenciadas por workspace = true)
|
||
# ============================================================
|
||
|
||
# ============================================================
|
||
# Intra-workspace deps de pineal (módulo de gráficos)
|
||
# ============================================================
|
||
|
||
# ============================================================
|
||
# Intra-workspace deps de iniy (laboratorio semántico de creencias)
|
||
# ============================================================
|
||
# la física de decaimiento de khipu la importa iniy-derive (SDD iniy §3)
|
||
|
||
# === auto: declarados por crates internos faltantes ===
|
||
|
||
# === auto: externas de eternal ===
|
||
celestial-eop-data = { version = "0.1"}
|
||
approx = "0.5"
|
||
byteorder = "1.5"
|
||
cc = "1.0"
|
||
chrono = "0.4"
|
||
chrono-tz = "0.10"
|
||
crc32fast = "1.4"
|
||
criterion = "0.5"
|
||
csv = "1.4"
|
||
flate2 = "1.0"
|
||
glob = "0.3"
|
||
indicatif = "0.18"
|
||
lz4_flex = "0.11"
|
||
memmap2 = "0.9"
|
||
# Cliente Wayland (lado cliente) — lo usa hapiy para hablar zwlr_screencopy
|
||
# contra mirada (u otro compositor wlroots) y capturar la pantalla.
|
||
wayland-client = "0.31"
|
||
wayland-protocols-wlr = { version = "0.3", features = ["client"] }
|
||
wayland-protocols-misc = { version = "0.3", features = ["client"] }
|
||
mockito = "1.0"
|
||
ndarray = "0.15"
|
||
num-traits = "0.2"
|
||
once_cell = "1.19"
|
||
parking_lot = "0.12"
|
||
png = "0.18"
|
||
proptest = "1.4"
|
||
quick-xml = "0.31"
|
||
rayon = "1.8"
|
||
regex = "1.11"
|
||
reqwest = "0.12"
|
||
tiff = "0.11"
|
||
wide = "0.7"
|
||
wiremock = "0.6"
|
||
|
||
# === i18n (rimay-localize) ===
|
||
fluent-bundle = "0.15"
|
||
unic-langid = { version = "0.9", features = ["macros"] }
|
||
sys-locale = "0.3"
|
||
|
||
# === Servo (puriy-engine) ===
|
||
# Crates publicados de Servo embebibles individualmente. html5ever/markup5ever
|
||
# ya entran via ammonia→surrealdb→nakui, así que alineamos versión para no
|
||
# duplicar el árbol. markup5ever_rcdom es el DOM Rc-based simple (suficiente
|
||
# para Fase 2: parsear y renderizar, sin scripting). cssparser es el tokenizer
|
||
# CSS de Stylo, sirve para inline styles. ureq = HTTP síncrono minimalista,
|
||
# evita pull de tokio en el engine.
|
||
html5ever = "0.39"
|
||
markup5ever = "0.39"
|
||
markup5ever_rcdom = "0.39"
|
||
cssparser = "0.35"
|
||
url = "2"
|
||
# `gzip`: sin ella ureq ni anuncia `Accept-Encoding` ni decodifica la respuesta.
|
||
# python.org (detrás de Fastly) devuelve `content-encoding: gzip` AUNQUE no se lo
|
||
# pidan, y el cuerpo comprimido se decodificaba como UTF-8: 3.911 caracteres
|
||
# U+FFFD y una página de 16 cajas en vez de 1.489. Además baja lo que se
|
||
# descarga en todo el resto.
|
||
ureq = { version = "2", default-features = false, features = ["tls", "gzip"] }
|
||
# Charset de la web real: no todo es UTF-8 (google.com sirve ISO-8859-1).
|
||
# Ya venía transitivo por el stack de Servo — aquí se hace explícito.
|
||
encoding_rs = "0.8"
|
||
|
||
# === takiy-synth (SoundFont MIDI) ===
|
||
# rustysynth = sintetizador SF2 puro Rust, MIT. Reemplaza el oscilador
|
||
# feo de takiy-synth por muestras reales (FluidR3, GeneralUser GS, etc).
|
||
rustysynth = "1.3"
|
||
|
||
# === takiy-playback (audio device output) ===
|
||
# cpal = backend de audio cross-platform (ALSA/PulseAudio/Pipewire en
|
||
# Linux, WASAPI en Windows, CoreAudio en macOS). Lo usamos sólo para
|
||
# abrir el device default y empujar muestras f32 — nada de mezclado
|
||
# ni efectos en el callback.
|
||
cpal = "0.15"
|
||
|
||
# === media-source-wav (decoder PCM en disco) ===
|
||
# hound = lector/escritor WAV puro-Rust, sin deps nativas. Soporta PCM
|
||
# entero (8/16/24/32) y float (32). Suficiente para abrir samples y
|
||
# stems de prueba sin meter ffmpeg/symphonia.
|
||
hound = "3.5"
|
||
|
||
# === media-source-{mp3,flac,vorbis} (decoders vía symphonia) ===
|
||
# symphonia es una colección de decoders puro-Rust mantenida. `mp3` cubre
|
||
# media-source-mp3; `flac` (decoder + demuxer FLAC nativo) cubre
|
||
# media-source-flac (lossless); `vorbis` + `ogg` (codec + demuxer Ogg)
|
||
# cubren media-source-vorbis (lossy clásico, libre de patentes). Sin aac:
|
||
# ese tier patentado entra por shared/foreign-av.
|
||
symphonia = { version = "0.5", default-features = false, features = ["mp3", "flac", "vorbis", "ogg"] }
|
||
|
||
# === media-source-opus (decoder Opus NATIVO puro-Rust) ===
|
||
# Opus es el formato de audio nativo de tawasuyu (par del video AV1). ogg
|
||
# demuxea las páginas Ogg; opus-wave es un port puro-Rust de libopus
|
||
# (SILK+CELT, sin C ni FFI) — par del rav1d del lado video.
|
||
ogg = "0.9"
|
||
opus-wave = "3"
|
||
|
||
# === media-source-webm (demux nativo Matroska/WebM) ===
|
||
# matroska-demuxer es un demuxer puro-Rust de MKV/WebM (EBML). Saca los
|
||
# paquetes de los tracks V_AV1 y A_OPUS para alimentar a media-source-av1
|
||
# y media-source-opus — un .webm AV1+Opus se reproduce 100% nativo.
|
||
matroska-demuxer = "0.7"
|
||
|
||
# === Perfil `dist`: binarios de reparto livianos (equipos chicos / poca RAM) ===
|
||
# Hereda de `release` pero prioriza HUELLA sobre tiempo de compilación: LTO thin
|
||
# (poda código muerto entre crates), un solo codegen-unit (mejor inlining/DCE) y
|
||
# `strip` de símbolos. Reduce el tamaño en disco Y el segmento de código mapeado
|
||
# en RAM de cada binario (mirada, pata, apps Llimphi). No toca `cargo build
|
||
# --release` de iteración diaria; se usa sólo al empaquetar:
|
||
# cargo build --profile dist -p mirada-compositor -p pata-host …
|
||
# `panic = "unwind"` se mantiene a propósito: mirada-plugin-host aísla plugins
|
||
# con `catch_unwind`, así que `abort` rompería el sandbox.
|
||
|
||
[profile.dist]
|
||
inherits = "release"
|
||
lto = "thin"
|
||
codegen-units = 1
|
||
strip = "symbols"
|
||
panic = "unwind"
|
||
|
||
|