Skip to content

▶️ 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 context opcional (la app puede funcionar con el motor nativo Rust de Tauri; el CLI embebido se construye localmente con build:cli).

🛠️ Modos de ejecución

1) Desarrollo (Vite + Tauri)

bash
pnpm tauri:dev
  • Arranca Vite en 127.0.0.1:1420 y lanza la ventana Tauri en modo dev (HMR + DevTools).
  • Si el puerto está ocupado: pnpm tauri:dev:reset mata el proceso en :1420 y reintenta.
  • Para una build incremental más estable: pnpm tauri:dev:stable (usa CARGO_TARGET_DIR=.cargo-target).

2) Solo frontend (Vite)

bash
pnpm dev
  • Útil para iterar UI sin recompilar Rust. El backend Tauri no estará disponible (los invoke() fallarán).

3) Build de producción

bash
pnpm tauri:build
  • Compila TypeScript (tsc) y frontend (vite build), y luego el binario Rust optimizado con tauri 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:

ScriptPlataformaBundlesDestino
pnpm instaladorWindowsNSIS + MSI./windows/
pnpm instaladormacmacOSDMG + .app./mac/
pnpm instaladorlinuxLinuxDEB + 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

bash
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 de kill:1420 + tauri:dev:stable.
  • pnpm build:test / pnpm test:desktop — compila con tsconfig.test.json y corre el smoke test (lib/desktopSmoke.js).
  • pnpm lint:handlers — valida referencias cruzadas TS↔Rust (los handlers Tauri en commands/*.rs deben estar expuestos en main.rs y consumidos por el frontend). Se ejecuta también como prebuild.
  • pnpm lint:dto — detecta DTOs Serialize "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! y println! → 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:

bash
pnpm tauri:dev 2>&1 | tee desktop-dev.log

🧯 Troubleshooting rápido

Ver: /desktop/troubleshooting

Comandos útiles:

bash
node --version        # debe ser >= 18
rustc --version       # toolchain estable
cargo --version       # con tauri-cli instalado
pnpm --version

Si la app no abre: revisa src-tauri/resources/CLI/ (debe contener context-bootstrap.js); si no, ejecuta pnpm build:cli.

Desarrollado con pasión e Inteligencia Artificial.