▶️ Ejecución y Build (Desktop)
Esta página documenta los scripts de build, desarrollo y empaquetado de Context Code Desktop (Tauri + React + Rust). Para conocer las funcionalidades de la app, consulta: /desktop/overview.
✅ Requisitos previos
- Node.js 18+ y pnpm (gestor de paquetes).
- Rust toolchain estable (rustup con toolchain por defecto).
- Tauri CLI 2.x:
cargo install tauri-cli --version "^2.0". - WebView2 (Windows 10/11, preinstalado) o WebKitGTK (Linux).
- CLI
contextopcional (la app puede funcionar con el motor nativo Rust de Tauri; el CLI embebido se construye localmente conbuild:cli).
🛠️ Modos de ejecución
1) Desarrollo (Vite + Tauri)
pnpm tauri:dev- Arranca Vite en
127.0.0.1:1420y lanza la ventana Tauri en modo dev (HMR + DevTools). - Si el puerto está ocupado:
pnpm tauri:dev:resetmata el proceso en :1420 y reintenta. - Para una build incremental más estable:
pnpm tauri:dev:stable(usaCARGO_TARGET_DIR=.cargo-target).
2) Solo frontend (Vite)
pnpm dev- Útil para iterar UI sin recompilar Rust. El backend Tauri no estará disponible (los
invoke()fallarán).
3) Build de producción
pnpm tauri:build- Compila TypeScript (
tsc) y frontend (vite build), y luego el binario Rust optimizado contauri build. - Artefactos:
src-tauri/.cargo-target/release/bundle/{nsis,msi,dmg,macos,deb,appimage}/.
📦 Instaladores multiplataforma
Todos los scripts copian el bundle final a la raíz de apps/desktop para facilitar distribución:
| Script | Plataforma | Bundles | Destino |
|---|---|---|---|
pnpm instalador | Windows | NSIS + MSI | ./windows/ |
pnpm instaladormac | macOS | DMG + .app | ./mac/ |
pnpm instaladorlinux | Linux | DEB + AppImage | ./linux/ |
Variantes con un solo formato: instalador:nsis, instalador:msi, instalador:mac, instalador:linux.
🧱 Motor CLI embebido
La app incluye una copia local del CLI context (compilada al bundle de Tauri) que el motor Rust puede lanzar como subproceso cuando se desea paridad total con la terminal.
Sincronización
pnpm build:cli # compila apps/cli y copia dist + bootstrap + package.json → src-tauri/resources/CLI/
pnpm sync:cli-deps # pnpm install --prod dentro de resources/CLI (linker hoisted)build-cli.mjs aplana duplicados de @opentelemetry/* anidados para evitar errores de MAX_PATH en instaladores Windows.
Cuándo se usa
- Por defecto el motor nativo de Tauri (
core/engine.rs) maneja las sesiones: es ~10x más rápido y permite streaming NDJSON en tiempo real. - El CLI embebido se lanza cuando se pide explícitamente paridad con flags legacy de terminal (ej.
--dangerously-skip-permissions).
🧰 Scripts auxiliares
pnpm kill:1420— mata procesos en el puerto 1420 (Windows:netstat+taskkill; Unix:lsof+kill).pnpm tauri:dev:reset— combinación dekill:1420+tauri:dev:stable.pnpm build:test/pnpm test:desktop— compila contsconfig.test.jsony corre el smoke test (lib/desktopSmoke.js).pnpm lint:handlers— valida referencias cruzadas TS↔Rust (los handlers Tauri encommands/*.rsdeben estar expuestos enmain.rsy consumidos por el frontend). Se ejecuta también comoprebuild.pnpm lint:dto— detecta DTOsSerialize"fantasma" (definidos pero nunca retornados por un handler).
🐞 Debug y logs
La app no usa tauri-plugin-log ni env_logger (no incluidos en Cargo.toml). El logging es mixto:
- Rust:
eprintln!yprintln!→ visibles en la terminal donde se ejecutótauri dev. - Frontend:
console.warn/console.error→ visibles en DevTools (Ctrl+Shift+I en dev).
Para logs persistentes, redirige la salida de tauri dev a un archivo o usa tee:
pnpm tauri:dev 2>&1 | tee desktop-dev.log🧯 Troubleshooting rápido
Comandos útiles:
node --version # debe ser >= 18
rustc --version # toolchain estable
cargo --version # con tauri-cli instalado
pnpm --versionSi la app no abre: revisa src-tauri/resources/CLI/ (debe contener context-bootstrap.js); si no, ejecuta pnpm build:cli.
