Saltar al contenido
CADCAMFUN
Documentos

Documentación

Solución de problemas de escritorio

Identifique el proceso fallido, inspeccione el punto final real y el directorio de datos, y recupere sin confundir la vista previa con la persistencia.

Traducido automáticamente del inglés. Ver el original en inglés

Identificar el tiempo de ejecución antes de cambiarlo

Una sesión de escritorio tiene límites de falla separados: Vite proporciona activos de interfaz durante el desarrollo; el proceso Tauri Rust posee integración nativa; el sidecar Bun atiende solicitudes de aplicaciones y persistencia; la vista web de SolidJS se conecta a esa API. Una ventana en blanco, un tiempo de espera de inicio, una respuesta 401 y una lista de proyectos vacía pueden tener diferentes causas.

Modo de lanzamientobackendLo que puede establecer
Paquete de escritorio dev sin URL complementariaCliente falso en memoriaComportamiento de pantalla basado en dispositivos admitidos, no almacenamiento duradero de aplicaciones.
Vite con URL y tokenSidecar de carrera seleccionadoSolicitudes de navegador a servidor y persistencia en el directorio de ese servidor.
Raíz desktop:devSidecar supervisado compiladoShell nativo, vista web, servidor/recursos incluidos y flujo de aplicaciones.
Aplicación de escritorio tauri:dev sin binario existenteSidecar de trozos generadosComportamiento de caparazón aislado; el código auxiliar no es la API de la aplicación completa.

Registre el comando de inicio y si el punto final provino de las variables Tauri o Vite. No elimine una base de datos ni reinstale dependencias simplemente porque un tiempo de ejecución diferente muestra datos diferentes.

Comprender el momento del inicio

El shell de Rust genera un token de inicio, resuelve los datos de la aplicación y los directorios de migración, y genera el sidecar de destino. el niño se une 127.0.0.1 en un puerto efímero. Espera hasta su publico /api/health responde, luego escribe un evento listo para JSON con ese puerto. La vista web invoca get_sidecar_endpoint y crea su tiempo de ejecución de API administrado.

PresupuestoValor actualSignificado
Apretón de manos listo para Shell60 segundos por inicioEspera máxima para el evento listo utilizable del niño.
Reinicio automático del supervisorUnoUn niño fallido no se reinicia indefinidamente.
Espera de punto final nativo125 segundosDos presupuestos listos más holgura.
Intento de conexión a vista web30 segundosTiempo de espera de estado/conexión para un intento.
Bucle de reintento de vista web150 segundos, 750 ms de pausaVuelve a resolver los puntos finales antes de ofrecer un error de tiempo de espera agotado.

Reintentar reinicia los intentos de conexión de Webview; no repone un presupuesto de supervisión de Rust agotado. Solucione la causa de inicio y reinicie la aplicación cuando el supervisor haya alcanzado el estado de falla del terminal. Un puerto anterior a un reinicio infantil puede estar obsoleto.

Verifique los puertos y la salud por separado

usos de vita localhost:1420 con una selección de puerto estricta, que coincide con la URL de desarrollo configurada de Tauri. Falla en lugar de trasladarse silenciosamente a otro puerto. El puerto del sidecar no está relacionado y cambia entre lanzamientos. El puerto HTTPS complementario es un tercer escucha, predeterminado 8443, y Studio usa loopback 4396.

Sondear un sidecar de desarrollo aislado; reemplace el puerto/token de ejemplo
CADCAM_URL=http://127.0.0.1:43111
CADCAM_TOKEN=local-development-token

curl --max-time 5 --fail-with-body "$CADCAM_URL/api/health"
curl --max-time 5 --fail-with-body "$CADCAM_URL/health"   -H "Authorization: Bearer $CADCAM_TOKEN"
curl --max-time 5 --fail-with-body "$CADCAM_URL/version"   -H "Authorization: Bearer $CADCAM_TOKEN"

La ruta de salud pública devuelve el estado y la marca de tiempo. Las rutas del sistema autenticadas exponen la preparación y la versión de la aplicación. Un proceso en buen estado no demuestra que todos los proveedores, consultas de bases de datos o diálogos nativos funcionen. comparar el API de salud y API del sistema al seleccionar las sondas.

Si el puerto 1420 está ocupado, identifique y detenga deliberadamente el servidor de desarrollo existente. Si un puerto API recordado rechaza conexiones, lea el evento listo actual o vuelva a resolver el punto final de Tauri en lugar de adivinar los puertos vecinos.

Reproducir con un sidecar aislado

Un proceso fuente es útil para separar los problemas del paquete nativo del comportamiento del servidor. Ejecute esto desde la raíz del repositorio en una terminal interactiva; crea un directorio de datos nuevo y utiliza explícitamente la carpeta de migración generada.

Mantenga esta terminal y stdin abiertos
CADCAM_DIAGNOSTIC_DIR=$(mktemp -d /tmp/cadcamfun-desktop-guide.XXXXXX)
CADCAMFUN_TOKEN=local-development-token CADCAMFUN_DATA_DIR="$CADCAM_DIAGNOSTIC_DIR/data" CADCAMFUN_MIGRATIONS_DIR="$PWD/packages/db/drizzle" CADCAMFUN_AI_OFFLINE=true bun --no-env-file apps/sidecar/src/main.ts

Copie el puerto anunciado en las variables de la sonda en una segunda terminal. El modo AI sin conexión evita depender de un modelo remoto configurado para diagnósticos de inicio básicos; no ejecuta un modelo local alternativo. El servidor observa el EOF estándar, un evento de apagado explícito e interrupciones normales del tiempo de ejecución.

Un proceso fuente utiliza archivos actuales. Un proceso nativo utiliza el ejecutable compilado ya preparado en src-tauri/binaries. Si solo falla la ejecución compilada, reconstruya mediante bun run build:sidecar e inspeccionar recursos de agrupación/migración. La edición de TypeScript no reemplaza un ejecutable que ya se está ejecutando.

Resolver la ruta real de la base de datos

Process/toolSelección de ruta
Sidecar lanzado por TauriTauri app_data_dir(), entonces cadcamfun.db.
sidecar manualCADCAMFUN_DATA_DIR/cadcamfun.db.
CLI de migraciónDATABASE_URL, de lo contrario ./data/cadcamfun.db en relación con su directorio de procesos.
Raíz db:migrate envolturaSe ejecuta en el paquete de base de datos, normalmente dando packages/db/data/cadcamfun.db por defecto.
API de estudio localCADCAMFUN_DB, entonces DATABASE_URL, luego raíz del repositorio data/cadcamfun.db.

Estos archivos no son alias. Haga coincidir la ruta del proceso seleccionada antes de investigar los dibujos faltantes. Los dispositivos del navegador nunca abren estos archivos SQLite. El sidecar aplica migraciones sólo cuando su configuración proporciona una carpeta de migración; omitirlo no descubre automáticamente la carpeta del árbol de origen.

La capa de base de datos habilita WAL y claves externas. Antes de actualizar una base de datos existente, escribe una copia de seguridad previa a la migración automática y conserva cinco copias de seguridad coincidentes. No crea dicha copia de seguridad en cada guardado, inicio sin cambios, primera creación o prueba en memoria. Preservar una copia de seguridad consistente a través del procedimiento de base de datos/recuperación; copiar solo el archivo principal de una base de datos WAL en ejecución puede omitir el contenido WAL comprometido.

Leer la salida del protocolo y los registros

En una terminal de origen, la salida estándar está reservada para eventos de protocolo listo/error y los registros de la aplicación JSON van a stderr. En la aplicación nativa, el complemento de registro de Rust captura eventos del lado del shell, incluida la salida secundaria supervisada. El shell redacta líneas que pueden contener sus credenciales de lanzamiento.

el nativo get_logs_dir el comando resuelve el directorio de registro de la aplicación del sistema operativo. Es más confiable que asumir un camino universal entre sistemas. Un diagnóstico de desarrollador dentro de la vista web puede invocarlo a través de la interfaz de comando Tauri existente; La apertura de rutas nativas está restringida a las carpetas permitidas y rechaza los tipos de archivos ejecutables.

El componente de pantalla de inicio reutilizable admite una devolución de llamada de Ver registros opcional, pero la versión actual App.tsx no pasa esa devolución de llamada. No asuma que el botón Ver registros estará visible durante un error de inicio. Mantenga disponible la terminal de inicio de desarrollo o utilice el directorio de registro nativo a través de una superficie de diagnóstico adecuada.

Para obtener un informe, incluya el modo de inicio, las rutas de migración/datos no secretos, la espera transcurrida, la versión actual de la API, la etiqueta/mensaje de error exacto y los últimos eventos de inicio relevantes. Redactar tokens de lanzamiento/sesión/dispositivo, enlaces de emparejamiento, claves de modelo y material de firma.

Distinguir la autenticación de los datos vacíos

El modo de cliente real del navegador requiere ambos VITE_SIDECAR_URL y VITE_SIDECAR_TOKEN. Una URL sin token no activa el respaldo falso; La resolución del punto final falla. Las variables deben proporcionarse antes de que comience Vite. La actualización de un shell principal no reconfigura un servidor que ya se está ejecutando.

Navegador conectado al proceso fuente aislado
VITE_SIDECAR_URL=http://127.0.0.1:43111 VITE_SIDECAR_TOKEN=local-development-token bun run --filter @cadcamfun/desktop dev

Las llamadas protegidas pueden utilizar el contexto de la sesión de la cuenta además del token de la aplicación. Los tokens puente complementarios e independientes tienen alcances más limitados y no sustituyen a un token de lanzamiento. Un 401 necesita diagnóstico de credenciales; un 403 necesita diagnóstico de operación/acceso; un proyecto ausente o inaccesible se puede informar como 404.

Algunas pantallas, incluidas las pestañas de recursos secundarios del proyecto, actualmente convierten los errores de listas individuales en matrices vacías. Una pestaña en blanco no es prueba suficiente de que se eliminaron registros. Leer el correspondiente proyecto, dibujo, o trayectoria de herramienta punto final antes de recrear el trabajo.

Un token de lanzamiento válido tiene 64 caracteres hexadecimales (32 bytes aleatorios) y cambia en cada lanzamiento. El shell del escritorio no emitió un token de otra forma.

Reconocer la vista previa y las limitaciones nativas

La API falsa maneja proyectos, dibujos, materiales, herramientas, máquinas, rutas de herramientas, KV y rutas de generador seleccionados. Las colecciones no admitidas devuelven HTTP 501 con un mensaje específico de vista previa. Los datos del dispositivo pertenecen a la página de ejecución. Una acción de vista previa exitosa no puede demostrar la persistencia de la organización, el complemento, la facturación o el comportamiento del proveedor en vivo.

Los diálogos nativos, las operaciones de llavero, la bandeja, el actualizador y los materiales de macOS requieren el host Tauri y las capacidades correctas. Es posible que un comando registrado aún no esté disponible para la vista web en su configuración de capacidad. Para abrir archivos, el shell registra las asociaciones admitidas y reenvía rutas; eso por sí solo no prueba que un editor en particular haya importado los contenidos.

Las fallas gráficas son otro límite. Un tamaño de contenedor distinto de cero, entidades/capas visibles, selección desbloqueada y WebGL compatible son requisitos previos para las interacciones relevantes de la ventana gráfica. Una malla renderizada es evidencia de renderizado, no de un guardado exitoso o de una verificación CAM. Utilice el diagnóstico de ventana gráfica para la capacidad del trabajador, el tiempo de espera y el comportamiento de cuatro vistas.

Recuperar preferencias y problemas de visualización

El registro de preferencia de vista web compartida es cadcamfun.settings. Los valores predeterminados incluyen milímetros, tema del sistema, tres decimales, preferencia GRBL, ajuste habilitado, tolerancia 0.01 mm y vidrio habilitado. Los campos almacenados se validan de forma independiente; los valores no válidos retroceden sin que el shell falle. El almacenamiento local lleno/bloqueado puede impedir la persistencia.

Cambiar las unidades de visualización no cambia la escala de la geometría CAD almacenada. La tolerancia del documento se propaga a través del asistente de configuración de verificación/generador/CAD compartido. Algunas funciones/valores giratorios utilizan explícitamente grados; Los ángulos para dibujar utilizan radianes. Verifique el contrato de campo antes de diagnosticar una discrepancia numérica como geometría corrupta.

El comportamiento del vidrio depende de la compatibilidad con Tauri/macOS. La implementación utiliza Liquid Glass cuando es compatible, vitalidad en macOS más antiguo a través del complemento y un respaldo opaco cuando no está disponible o está deshabilitado. Los cambios de tema/material no alteran la geometría, la propiedad del proyecto ni la evidencia de mecanizado.

Prefiera la configuración relevante o el control de funciones a borrar todo el almacenamiento de vistas web. Ese almacenamiento también puede contener transferencias de sesión/editor. Un restablecimiento de preferencias visuales no es un procedimiento de reparación de base de datos.

Separe la recuperación de la interfaz de usuario de la evidencia de mecanizado

Un proyecto cargado, un guardado HTTP exitoso, una ruta de herramienta animada y un NC generado son observaciones diferentes. Antes de confiar en un resultado de mecanizado guardado, inspeccione el NC exacto, el dibujo/stock de origen, los conjuntos de herramientas, la envolvente de la máquina, el poste seleccionado y la versión/problemas de verificación para ese resultado.

El código de instantánea CAM conserva la evidencia del kernel solo cuando el texto NC actual y su hash coinciden. Las escrituras de programas portátiles validan la coherencia del documento y pueden reevaluar las solicitudes del kernel capturadas. Editar NC o cambiar stock puede invalidar la evidencia anterior. Reabrir NC simple puede analizar un programa sin restaurar la misma prueba de fabricación.

Después de un bloqueo o una interrupción del guardado, primero inspeccione la fila guardada y sus versiones. El modo de guardado CAM registra el programa anterior antes de una actualización, mientras que el guardado manual de detalles de la ruta de herramienta registra la revisión actualizada. El historial del proyecto vuelve a estar separado. Usar la comparación de la historia elegir un camino de recuperación.

No convierta una verificación no resuelta en una operación aceptada porque la interfaz de usuario se recuperó. Vuelva a ejecutar la verificación adecuada con respecto a los recursos reales y NC; una sonda de estado de la aplicación no tiene autoridad sobre la seguridad de la máquina.

Triaje un fallo a la vez

  1. Registre el modo de inicio, las versiones del proceso, los puertos y el directorio de datos reales.
  2. Estado de la sonda, luego una lectura protegida. Separe la conectividad de la autorización.
  3. Inspeccione los errores de inicio/migración estructurados antes de restablecer o eliminar algo.
  4. Reproduzca contra un proceso fuente aislado cuando se sospeche de un problema compilado/nativo.
  5. Corrija la causa identificada, reinicie el proceso apropiado y actualice las variables de punto final obsoletas.
  6. Vuelva a abrir el documento/programa guardado e inspeccione el estado persistente, las versiones, las exportaciones y la verificación actual.

Los anclajes de implementación son app/App.tsx, app/sidecar.ts, src-tauri/src/{sidecar,commands,lib}.rs, el sidecar main.ts/config.ts/shutdown.tsy el ciclo de vida de la base de datos. Desarrollo local suministra detalles de configuración; pareja de compañeros maneja su límite de red independiente.

Lista de verificación de inicio

  1. ¿Está presente el binario sidecar para esta plataforma (src-tauri/binaries/sidecar-<target triple>)? desktop:dev lo construye; tauri:dev puede utilizar un talón.
  2. ¿Las migraciones se realizan en src-tauri/resources/migrations? bun run build:sidecar o bun scripts/build.ts --only=resources los reescenifica.
  3. ¿Se imprimió el sidecar? ready ¿en 60 segundos? busca un error línea en stdout y registros JSON en stderr en el directorio de registro (get_logs_dir).
  4. ¿Se reinició? Sólo se permite un reinicio automático; un segundo fallo deja el estado en failed.
  5. Hace GET /api/health ¿Respuesta en el puerto informado? Si lo hace pero las rutas protegidas devuelven 401, el token pertenece a un lanzamiento diferente.
  6. ¿Se puede escribir en el directorio de datos y el archivo de la base de datos no se mantiene abierto mediante otro proceso con migraciones incompatibles?
MinuteroValorDueño
Apretón de manos listo60 s por intentosupervisor de Rust
Reinicios automáticos1supervisor de Rust
Espera de punto final125 s (dos apretones de manos + 5 s)get_sidecar_endpoint
Presupuesto de recuperación de vista web150 s, 30 s por intento, 750 ms entre intentosVista web
Gracia de apagado2 s después de la línea de apagado, luego se cosecha el proceso (hasta 5 s)supervisor de Rust

Leyendo los registros

Los registros de Sidecar son líneas JSON en stderr, que se mantienen separadas del protocolo de enlace estándar. Las líneas que podrían contener credenciales se reemplazan por [redacted: line may contain credentials] antes de que se escriban, por lo que se espera una línea redactada en un registro, no corrupción. Si el protocolo de enlace en sí incluía dicha línea, el error de inicio informado es el marcador de redacción; lea las líneas stderr circundantes para conocer el contexto.

El directorio de registro es específico de la plataforma. Consíguelo del get_logs_dir comando en lugar de adivinar un camino, y ábralo con open_path, que acepta el directorio de registro de la aplicación.

Mensajes de error y lo que significan

Mensajede donde vieneque hacer
La cola de malla 3D está llena. Reducir la complejidad de la escena.Cola de mallado de ventana gráfica (128 trabajos)Ocultar o simplificar cuerpos; la cola fue despejada
3Se agotó el tiempo de espera del mallado D. Reducir la complejidad de la escena.Un trabajo de mallado superó los 15 sSimplifica el sólido; el trabajador fue reiniciado
No hay ningún proveedor de IA configurado. Agregue una clave API en la configuración de AI.flujo asistente, code: "config"Agregue una clave de proveedor; nada más está mal
El diario de migración heredado no coincide con las migraciones localesActualización de la base de datos al inicioMantener el directorio de datos; instalar la versión correspondiente
La solicitud de extracción no está abiertaFusionar o cerrar un PR fusionado/cerradoActualizar la lista de relaciones públicas
Revisión desconocida <rev>Restaurar historial o iniciar sesión con una mala revisiónElija una revisión del registro
Plugin <id> may not use "<capability>": it was not granted at install timeContexto del complementoReinstale y otorgue la capacidad, o cambie el complemento
Los ejes giratorios de la máquina no pueden alcanzar este plano de trabajo dentro de sus límites.Mecanizado indexadoUsa otra configuración para esa cara.

En 3D

Dónde ocurren las fallas del escritorio Arrastrar para orbitar · desplazarse para hacer zoom · arrastrar con el botón derecho para desplazarse
Processes at run time. The Tauri shell spawns the sidecar and waits for its {”event”:”ready”,”port”:N} line on stdout (sidecar.rs); the webview then talks HTTP to 127.0.0.1 on that port with the bearer token. The sidecar owns the SQLite database, the embedded nikcli AI host (CADCAMFUN_AI_HOST=nikcli, the default) and plugins; the mobile app reaches it through companion pairing.