Aller au contenu
CADCAMFUN
Docs

Documentation

Dépannage du bureau

Identifiez le processus défaillant, inspectez le véritable point de terminaison et le répertoire de données, puis récupérez sans confondre aperçu et persistance.

Traduit automatiquement de l'anglais. Voir l'original en anglais

Identifiez le runtime avant de le modifier

Une session de bureau a des limites de défaillance distinctes : Vite fournit des ressources frontales pendant le développement ; le processus Tauri Rust possède une intégration native ; le sidecar Bun sert les demandes d'application et la persistance ; la vue Web SolidJS se connecte à cette API. Une fenêtre vide, un délai de démarrage expiré, une réponse 401 et une liste de projets vide peuvent avoir différentes causes.

Mode de lancementBack-endCe qu'il peut établir
Forfait bureau dev sans URL sidecarFaux client en mémoireComportement d'écran basé sur les appareils pris en charge, pas de stockage d'application durable.
Vite avec URL et jetonSidecar en cours d'exécution sélectionnéRequêtes navigateur-serveur et persistance dans le répertoire de ce serveur.
Racine desktop:devSidecar supervisé compiléShell natif, vue Web, serveur/ressources groupés et flux d'applications.
Application de bureau tauri:dev sans binaire existantSidecar stub généréComportement des coques isolées ; le stub n'est pas l'API complète de l'application.

Enregistrez la commande de lancement et indiquez si le point final provient de variables Tauri ou Vite. Ne supprimez pas une base de données ou ne réinstallez pas les dépendances simplement parce qu'un environnement d'exécution différent affiche des données différentes.

Comprendre le timing de démarrage

Le shell Rust génère un jeton de lancement, résout les données d'application et les répertoires de migration et génère le sidecar cible. L'enfant lie 127.0.0.1 sur un port éphémère. Il attend son public /api/health répond, puis écrit un événement prêt pour JSON avec ce port. La vue Web invoque get_sidecar_endpoint et crée son environnement d'exécution d'API géré.

BudgetValeur actuelleSignification
Poignée de main prête à l'emploi60 secondes par démarrageAttente maximale pour l'événement prêt à l'emploi de l'enfant.
Redémarrage automatique du superviseurUnUn enfant en échec n'est pas relancé indéfiniment.
Attente du point de terminaison natif125 secondesDeux budgets prêts et du mou.
Tentative de connexion à la vue Web30 secondesDélai d'intégrité/de connexion pour une tentative.
Boucle de nouvelle tentative d'affichage Web150 secondes, 750 ms de pauseRésout à nouveau les points de terminaison avant de proposer un échec expiré.

Réessayer redémarre les tentatives de connexion à la vue Web ; il ne reconstitue pas un budget de supervision Rust épuisé. Corrigez la cause du démarrage et relancez l'application lorsque le superviseur a atteint son état d'échec de terminal. Un port antérieur à un redémarrage enfant peut être obsolète.

Vérifiez les ports et la santé séparément

Utilisations de Vite localhost:1420 avec une sélection de port stricte, correspondant à l'URL de développement configurée par Tauri. Il échoue au lieu de se déplacer silencieusement vers un autre port. Le port sidecar n’a aucun rapport et change entre les lancements. Le port HTTPS associé est un troisième écouteur, par défaut 8443, et Studio utilise le bouclage 4396.

Sonder un sidecar de développement isolé ; remplacer l'exemple de port/jeton
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 route de santé publique renvoie le statut et l’horodatage. Les routes système authentifiées exposent l’état de préparation et la version de l’application. Un processus sain ne prouve pas que tous les fournisseurs, requêtes de base de données ou boîtes de dialogue natives fonctionnent. Comparez les API de santé et API système lors de la sélection des sondes.

Si le port 1420 est occupé, identifiez et arrêtez délibérément le serveur de développement existant. Si un port API mémorisé refuse les connexions, lisez l'événement prêt en cours ou résolvez à nouveau le point de terminaison Tauri plutôt que de deviner les ports voisins.

Reproduire avec un sidecar isolé

Un processus source est utile pour séparer les problèmes liés au bundle natif du comportement du serveur. Exécutez-le à partir de la racine du référentiel dans un terminal interactif ; il crée un nouveau répertoire de données et utilise explicitement le dossier de migration généré.

Gardez ce terminal et stdin ouverts
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

Copiez le port annoncé dans les variables de la sonde dans un deuxième terminal. Le mode IA hors ligne évite de dépendre d'un modèle distant configuré pour les diagnostics de démarrage de base ; il ne gère pas de modèle local alternatif. Le serveur observe stdin EOF, un événement d'arrêt explicite et des interruptions d'exécution normales.

Un processus source utilise les fichiers actuels. Un processus natif utilise l'exécutable compilé déjà mis en scène sous src-tauri/binaries. Si seule l'exécution compilée échoue, reconstruisez via bun run build:sidecar et inspecter les ressources de regroupement/migration. La modification de TypeScript ne remplace pas un exécutable déjà en cours d'exécution.

Résoudre le chemin réel de la base de données

Process/toolSélection du chemin
Sidecar lancé par TauriTauri app_data_dir(), alors cadcamfun.db.
Sidecar manuelCADCAMFUN_DATA_DIR/cadcamfun.db.
CLI de migrationDATABASE_URL, sinon ./data/cadcamfun.db par rapport à son répertoire de processus.
Racine db:migrate emballageS'exécute dans le package de base de données, donnant normalement packages/db/data/cadcamfun.db par défaut.
API Studio localeCADCAMFUN_DB, alors DATABASE_URL, puis racine du référentiel data/cadcamfun.db.

Ces fichiers ne sont pas des alias. Faites correspondre le chemin de processus sélectionné avant d'examiner les dessins manquants. Les appareils du navigateur n'ouvrent jamais ces fichiers SQLite. Le sidecar applique les migrations uniquement lorsque sa configuration fournit un dossier de migration ; son omission ne découvre pas automatiquement le dossier de l'arborescence source.

La couche de base de données active les WAL et les clés étrangères. Avant une mise à niveau de base de données existante, il écrit une sauvegarde automatique de pré-migration et conserve cinq sauvegardes correspondantes. Il ne crée pas une telle sauvegarde à chaque sauvegarde, démarrage inchangé, première création ou test en mémoire. Préserver une sauvegarde cohérente grâce à la procédure de base de données/récupération ; copier uniquement le fichier principal d'une base de données WAL en cours d'exécution peut omettre le contenu WAL validé.

Lire les sorties et les journaux du protocole

Dans un terminal sidecar source, stdout est réservé aux événements de protocole prêt/erreur et les journaux d'application JSON sont envoyés vers stderr. Dans l'application native, le plugin de journalisation Rust capture les événements côté shell, y compris la sortie enfant supervisée. Le shell supprime les lignes pouvant contenir ses informations d’identification de lancement.

Le natif get_logs_dir la commande résout le répertoire du journal des applications du système d’exploitation. C’est plus fiable que de supposer un chemin universel à travers les systèmes. Un diagnostic de développeur dans la vue Web peut l'invoquer via l'interface de commande Tauri existante ; l'ouverture du chemin natif est limitée aux dossiers autorisés et refuse les types de fichiers exécutables.

Le composant d'écran de démarrage réutilisable prend en charge un rappel facultatif d'affichage des journaux, mais le composant actuel App.tsx ne transmet pas ce rappel. Ne présumez pas qu’un bouton Afficher les journaux sera visible lors d’un échec de démarrage. Gardez le terminal de lancement de développement disponible ou utilisez le répertoire de journaux natif via une surface de diagnostic appropriée.

Pour un rapport, incluez le mode de lancement, les chemins de données/migration non secrets, l'attente écoulée, la version actuelle de l'API, la balise/message d'erreur exact et les derniers événements de démarrage pertinents. Rédigez les jetons de lancement/session/appareil, les liens de couplage, les clés de modèle et le matériel de signature.

Distinguer l'authentification des données vides

Le mode client réel du navigateur nécessite à la fois VITE_SIDECAR_URL et VITE_SIDECAR_TOKEN. Une URL sans jeton n’active pas le faux repli ; la résolution du point de terminaison échoue. Les variables doivent être fournies avant le démarrage de Vite. La mise à jour d'un shell parent ne reconfigure pas un serveur déjà en cours d'exécution.

Navigateur connecté au processus source isolé
VITE_SIDECAR_URL=http://127.0.0.1:43111 VITE_SIDECAR_TOKEN=local-development-token bun run --filter @cadcamfun/desktop dev

Les appels protégés peuvent utiliser le contexte de session de compte en plus du jeton d'application. Les jetons de pont compagnon et autonomes ont des portées plus étroites et ne remplacent pas un jeton de lancement. Un 401 a besoin d'un diagnostic d'informations d'identification ; un 403 nécessite un diagnostic de fonctionnement/d'accès ; un projet absent ou inaccessible peut être signalé comme 404.

Certains écrans, y compris les onglets des ressources enfants du projet, transforment actuellement les erreurs de liste individuelles en tableaux vides. Un onglet vide ne constitue pas une preuve suffisante que les enregistrements ont été supprimés. Lire le correspondant projet, dessin, ou parcours d'outil point final avant de recréer le travail.

Un jeton de lancement valide comporte 64 caractères hexadécimaux (32 octets aléatoires) et change à chaque lancement. Aucun jeton de forme différente n'a été émis par le shell du bureau.

Reconnaître les limitations de l'aperçu et du natif

La fausse API gère les projets, dessins, matériaux, outils, machines, parcours d'outils, KV et générateurs sélectionnés. Les collections non prises en charge renvoient HTTP 501 avec un message spécifique à l'aperçu. Les données des appareils appartiennent à la page en cours d'exécution. Une action de prévisualisation réussie ne peut pas démontrer le comportement persistant de l’organisation, du plug-in, de la facturation ou du fournisseur en direct.

Les boîtes de dialogue natives, les opérations de trousseau, la barre d'état, le programme de mise à jour et les matériaux macOS nécessitent l'hôte Tauri et les fonctionnalités appropriées. Une commande enregistrée peut toujours être indisponible pour la vue Web sous sa configuration de capacité. Pour l'ouverture de fichiers, le shell enregistre les associations prises en charge et transfère les chemins ; cela ne prouve pas à lui seul qu’un éditeur particulier a importé le contenu.

Les échecs graphiques sont une autre limite. Une taille de conteneur non nulle, des entités/couches visibles, une sélection déverrouillée et WebGL pris en charge sont des conditions préalables pour les interactions de fenêtre pertinentes. Un maillage rendu est une preuve de rendu, et non une sauvegarde ou une vérification CAM réussie. Utilisez le diagnostic de la fenêtre d'affichage pour la capacité des travailleurs, le délai d'attente et le comportement à quatre vues.

Récupérer les problèmes de préférences et d'affichage

L'enregistrement de préférence d'affichage Web partagé est cadcamfun.settings. Les paramètres par défaut incluent les millimètres, le thème du système, trois décimales, la préférence GRBL, l'accrochage activé, la tolérance 0,01 mm et le verre activé. Les champs stockés sont validés indépendamment ; les valeurs non valides reviennent sans faire échouer le shell. Un stockage local complet/bloqué peut empêcher la persistance.

La modification des unités d'affichage ne redimensionne pas la géométrie CAO stockée. La tolérance du document est propagée via l'assistant partagé de paramètres CAO/générateur/vérification. Certaines valeurs de fonctionnalité/rotation utilisent explicitement des degrés ; les angles de dessin utilisent des radians. Vérifiez le contrat de terrain avant de diagnostiquer une inadéquation numérique en tant que géométrie corrompue.

Le comportement du verre dépend de la prise en charge de Tauri/macOS. L'implémentation utilise Liquid Glass lorsqu'il est pris en charge, le dynamisme sur les anciens macOS via le plugin et une solution de secours opaque en cas d'indisponibilité ou de désactivation. Les changements de thème/matériau ne modifient pas la géométrie, la propriété du projet ou les preuves d'usinage.

Préférez les paramètres ou le contrôle des fonctionnalités pertinents à la suppression de tout le stockage de la vue Web. Ce stockage peut également contenir des transferts de session/éditeur. Une réinitialisation des préférences visuelles n'est pas une procédure de réparation de base de données.

Séparer la récupération de l'interface utilisateur des preuves d'usinage

Un projet chargé, une sauvegarde HTTP réussie, un parcours d'outil animé et une CN générée sont des observations différentes. Avant de vous fier à un résultat d'usinage enregistré, inspectez la CN exacte, le dessin/le brut source, les assemblages d'outils, l'enveloppe de la machine, la poste sélectionnée et les versions/problèmes de vérification pour ce résultat.

Le code de l'instantané CAM préserve les preuves du noyau uniquement lorsque le texte NC actuel et son hachage correspondent. Le programme portable écrit pour valider la cohérence du document et peut réévaluer les requêtes capturées du noyau. La modification d'une NC ou la modification du stock peut invalider les preuves antérieures. La réouverture de Plain NC peut analyser un programme sans restaurer la même preuve de fabrication.

Après un crash ou une sauvegarde interrompue, inspectez d’abord la ligne enregistrée et ses versions. La sauvegarde modale CAM enregistre le programme précédent avant une mise à jour, tandis que la sauvegarde manuelle des détails du parcours d'outil enregistre la révision mise à jour. L’historique du projet est à nouveau séparé. Utiliser la comparaison historique choisir un chemin de récupération.

Ne convertissez pas un chèque non résolu en une opération acceptée car l'interface utilisateur a été récupérée. Réexécutez la vérification appropriée par rapport aux ressources réelles et à la NC ; une sonde d’intégrité d’application n’a aucune autorité sur la sécurité de la machine.

Trier un échec à la fois

  1. Enregistrez le mode de lancement, les versions de processus, les ports et le répertoire de données réel.
  2. Sonde de santé, puis une lecture protégée. Séparez la connectivité de l’autorisation.
  3. Inspectez les erreurs de démarrage/migration structurées avant de réinitialiser ou de supprimer quoi que ce soit.
  4. Reproduisez sur un processus source isolé lorsqu'un problème compilé/natif est suspecté.
  5. Corrigez la cause identifiée, redémarrez le processus approprié et mettez à jour les variables de point de terminaison obsolètes.
  6. Rouvrez le document/programme enregistré et inspectez l'état persistant, les versions, les exportations et la vérification actuelle.

Les points d’ancrage de la mise en œuvre sont app/App.tsx, app/sidecar.ts, src-tauri/src/{sidecar,commands,lib}.rs, le sidecar main.ts/config.ts/shutdown.ts, et le cycle de vie de la base de données. Développement local fournit les détails de configuration ; appariement de compagnon gère sa limite de réseau distincte.

Liste de contrôle de démarrage

  1. Le binaire sidecar est-il présent pour cette plateforme (src-tauri/binaries/sidecar-<target triple>)? desktop:dev le construit; tauri:dev peut utiliser un talon.
  2. Les migrations s’effectuent-elles src-tauri/resources/migrations? bun run build:sidecar ou bun scripts/build.ts --only=resources les remet en scène.
  3. Le sidecar a-t-il imprimé ready dans les 60 secondes ? Cherchez un error ligne sur stdout et les journaux JSON sur stderr dans le répertoire des journaux (get_logs_dir).
  4. Est-ce qu'il a redémarré ? Un seul redémarrage automatique est autorisé ; un deuxième échec laisse le statut à failed.
  5. Fait GET /api/health réponse sur le port signalé ? Si c'est le cas mais que les routes protégées renvoient 401, le jeton appartient à un lancement différent.
  6. Le répertoire de données est-il accessible en écriture et le fichier de base de données n'est-il pas maintenu ouvert par un autre processus avec des migrations incompatibles ?
MinuteurValeurPropriétaire
Poignée de main prête60 s par tentativeSuperviseur de Rust
Redémarrages automatiques1Superviseur de Rust
Attente du point de terminaison125 s (deux poignées de main + 5 s)get_sidecar_endpoint
Budget de récupération WebView150 s, 30 s par tentative, 750 ms entre les tentativesVue Web
Grâce d'arrêt2 s après la ligne d'arrêt, le processus est alors récupéré (jusqu'à 5 s)Superviseur de Rust

Lire les journaux

Les journaux sidecar sont des lignes JSON sur stderr, séparées de la poignée de main stdout. Les lignes pouvant contenir des informations d'identification sont remplacées par [redacted: line may contain credentials] avant qu'ils ne soient écrits, donc une ligne expurgée dans un journal est attendue, pas une corruption. Si la poignée de main elle-même comportait une telle ligne, l'erreur de démarrage signalée est le marqueur de rédaction ; lisez les lignes stderr environnantes pour le contexte.

Le répertoire des journaux est spécifique à la plateforme. Obtenez-le du get_logs_dir commande plutôt que de deviner un chemin, et ouvrez-le avec open_path, qui accepte le répertoire du journal des applications.

Messages d'erreur et leur signification

MessageD'où ça vientCe qu'il faut faire
La file d'attente du maillage 3D est pleine. Réduisez la complexité de la scène.File d'attente de maillage de fenêtre (128 tâches)Masquer ou simplifier les corps ; la file d'attente a été vidée
3Le délai de maillage D a expiré. Réduisez la complexité de la scène.Une tâche de maillage a dépassé 15 sSimplifier le solide ; le travailleur a été redémarré
Aucun fournisseur d'IA n'est configuré. Ajoutez une clé API dans les paramètres AI.Flux d'assistants, code: "config"Ajoutez une clé de fournisseur ; rien d'autre n'est faux
Le journal de migration hérité ne correspond pas aux migrations localesMise à niveau de la base de données au démarrageConservez le répertoire de données ; installer la version correspondante
La demande de tirage n'est pas ouverteFusionner ou fermer un PR fusionné/ferméActualiser la liste PR
Révision inconnue <rév>Restauration de l'historique ou journalisation avec une mauvaise révisionChoisissez une révision dans le journal
Plugin <id> may not use "<capability>": it was not granted at install timeContexte du pluginRéinstallez et accordez la fonctionnalité, ou modifiez le plugin
Les axes rotatifs de la machine ne peuvent pas atteindre ce plan de travail dans leurs limitesUsinage indexéUtilisez une autre configuration pour ce visage

En 3D

Où se produisent les pannes de bureau Faites glisser vers l'orbite · faites défiler pour zoomer · faites glisser vers la droite pour effectuer un panoramique
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.