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.