Vai al contenuto
CADCAMFUN
Documentazione

Documentazione

Risoluzione dei problemi del desktop

Identifica il processo in errore, ispeziona l'endpoint reale e la directory dei dati ed esegui il ripristino senza confondere l'anteprima con la persistenza.

Tradotto automaticamente dall'inglese. Vedi l'originale in inglese

Identificare il runtime prima di modificarlo

Una sessione desktop ha limiti di errore separati: Vite fornisce risorse frontend durante lo sviluppo; il processo Tauri Rust possiede un'integrazione nativa; il sidecar Bun serve le richieste applicative e la persistenza; la visualizzazione web SolidJS si connette a quell'API. Una finestra vuota, un timeout di avvio, una risposta 401 e un elenco di progetti vuoto possono avere cause diverse.

Modalità di lancioBackendCosa può stabilire
Pacchetto desktop dev senza URL collateraleClient falso in memoriaComportamento dello schermo basato sul dispositivo supportato, non archiviazione durevole delle applicazioni.
Invito con URL e tokenSidecar da corsa selezionatoRichieste da browser a server e persistenza nella directory di quel server.
Radice desktop:devSidecar supervisionato compilatoShell nativa, visualizzazione Web, server/risorse in bundle e flusso dell'applicazione.
App desktop tauri:dev senza binario esistenteSidecar stub generatoComportamento del guscio isolato; lo stub non è l'API dell'applicazione completa.

Registra il comando di avvio e se l'endpoint proviene da variabili Tauri o Vite. Non eliminare un database o reinstallare le dipendenze semplicemente perché un runtime diverso mostra dati diversi.

Comprendere i tempi di avvio

La shell Rust genera un token di avvio, risolve i dati dell'applicazione e le directory di migrazione e genera il sidecar di destinazione. Il bambino si lega 127.0.0.1 su un porto effimero. Aspetta finché non è pubblico /api/health risponde, quindi scrive un evento pronto per JSON con quella porta. La visualizzazione web invoca get_sidecar_endpoint e crea il relativo runtime API gestito.

BilancioValore attualeSenso
Stretta di mano pronta per la shell60 secondi all'avvioMassima attesa per l'evento pronto utilizzabile del bambino.
Riavvio automatico del supervisoreUnoUn figlio fallito non viene riavviato indefinitamente.
Attesa dell'endpoint nativo125 secondiDue budget pronti più margine di flessibilità.
Tentativo di connessione alla visualizzazione Web30 secondiTimeout di integrità/connessione per un tentativo.
Ciclo di tentativi di visualizzazione Web150 secondi, 750 ms di pausaRisolve nuovamente gli endpoint prima di offrire un errore scaduto.

Riprova riavvia i tentativi di connessione alla visualizzazione Web; non ricostituisce un budget esaurito per la supervisione di Rust. Risolvi la causa dell'avvio e riavvia l'app quando il supervisore ha raggiunto lo stato di terminale non riuscito. Una porta precedente al riavvio figlio può essere obsoleta.

Controlla le porte e l'integrità separatamente

Vite utilizza localhost:1420 con una rigorosa selezione della porta, corrispondente all'URL di sviluppo configurato di Tauri. Fallisce invece di spostarsi silenziosamente su un'altra porta. Il porting del sidecar non è correlato e cambia tra un lancio e l'altro. La porta HTTPS complementare è un terzo listener, predefinito 8443, e Studio utilizza il loopback 4396.

Sondare un sidecar di sviluppo isolato; sostituire la porta/token di esempio
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"

Il percorso della sanità pubblica restituisce lo stato e il timestamp. I percorsi di sistema autenticati espongono la disponibilità e la versione dell'applicazione. Un processo integro non dimostra che tutti i provider, le query di database o le finestre di dialogo native funzionino. Confronta il API sanitaria e API di sistema quando si selezionano le sonde.

Se la porta 1420 è occupata, identifica e arresta deliberatamente il server di sviluppo esistente. Se una porta API ricordata rifiuta le connessioni, leggi l'evento ready corrente o risolvi nuovamente l'endpoint Tauri anziché indovinare le porte vicine.

Riprodurre con un sidecar isolato

Un processo di origine è utile per separare i problemi del bundle nativo dal comportamento del server. Eseguilo dalla root del repository in un terminale interattivo; crea una nuova directory di dati e utilizza esplicitamente la cartella di migrazione generata.

Mantieni questo terminale e stdin aperti
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

Copia la porta annunciata nelle variabili della sonda in un secondo terminale. La modalità AI offline evita di dipendere da un modello remoto configurato per la diagnostica di avvio di base; non esegue un modello locale alternativo. Il server osserva stdin EOF, un evento di spegnimento esplicito e normali interruzioni di runtime.

Un processo di origine utilizza i file correnti. Un processo nativo utilizza l'eseguibile compilato già messo in scena src-tauri/binaries. Se solo l'esecuzione compilata fallisce, ricostruire bun run build:sidecar e ispezionare le risorse di raggruppamento/migrazione. La modifica di TypeScript non sostituisce un eseguibile già in esecuzione.

Risolvere il percorso effettivo del database

Process/toolSelezione del percorso
Sidecar lanciato da TauriTauri app_data_dir(), poi cadcamfun.db.
Sidecar manualeCADCAMFUN_DATA_DIR/cadcamfun.db.
CLI di migrazioneDATABASE_URL, altrimenti ./data/cadcamfun.db rispetto alla directory del processo.
Radice db:migrate involucroViene eseguito nel pacchetto database, normalmente dando packages/db/data/cadcamfun.db per impostazione predefinita.
API Studio localeCADCAMFUN_DB, poi DATABASE_URL, quindi repository-root data/cadcamfun.db.

Questi file non sono alias. Abbina il percorso del processo selezionato prima di indagare sui disegni mancanti. I dispositivi browser non aprono mai questi file SQLite. Il sidecar applica le migrazioni solo quando la sua configurazione fornisce una cartella di migrazione; omettendolo non viene rilevata automaticamente la cartella dell'albero di origine.

Il livello del database abilita WAL e chiavi esterne. Prima di un aggiornamento del database esistente, scrive un backup automatico di pre-migrazione e conserva cinque backup corrispondenti. Non crea tale backup a ogni salvataggio, avvio senza modifiche, prima creazione o test in memoria. Conservare un backup coerente attraverso la procedura di database/ripristino; copiare solo il file principale di un database WAL in esecuzione può omettere il contenuto WAL impegnato.

Leggere l'output e i log del protocollo

In un terminale sidecar di origine, stdout è riservato per eventi di protocollo ready/error e i log dell'applicazione JSON vanno a stderr. Nell'app nativa, il plug-in di registrazione di Rust cattura gli eventi lato shell, incluso l'output secondario supervisionato. La shell oscura le righe che potrebbero contenere le sue credenziali di lancio.

Il nativo get_logs_dir il comando risolve la directory del registro dell'applicazione del sistema operativo. È più affidabile che assumere un percorso universale attraverso i sistemi. Una diagnostica dello sviluppatore all'interno della visualizzazione web può richiamarla tramite l'interfaccia di comando Tauri esistente; l'apertura del percorso nativo è limitata alle cartelle consentite e rifiuta i tipi di file eseguibili.

Il componente riutilizzabile della schermata di avvio supporta un callback opzionale per i registri di visualizzazione, ma il file current App.tsx non passa quella richiamata. Non dare per scontato che il pulsante Visualizza registri sarà visibile durante un errore di avvio. Mantenere disponibile il terminale di avvio dello sviluppo oppure utilizzare la directory dei log nativi tramite un'apposita superficie diagnostica.

Per un report, includi la modalità di avvio, i percorsi di migrazione/dati non segreti, l'attesa trascorsa, la versione corrente dell'API, il tag/messaggio di errore esatto e gli ultimi eventi di avvio rilevanti. Redigere token di lancio/sessione/dispositivo, collegamenti di accoppiamento, chiavi del modello e materiale per la firma.

Distinguere l'autenticazione dai dati vuoti

La modalità client reale del browser richiede entrambi VITE_SIDECAR_URL e VITE_SIDECAR_TOKEN. Un URL senza token non attiva il falso fallback; la risoluzione dell'endpoint non riesce. Le variabili devono essere fornite prima dell'avvio di Vite. L'aggiornamento di una shell genitore non riconfigura un server già in esecuzione.

Browser connesso al processo di origine isolato
VITE_SIDECAR_URL=http://127.0.0.1:43111 VITE_SIDECAR_TOKEN=local-development-token bun run --filter @cadcamfun/desktop dev

Le chiamate protette possono utilizzare il contesto della sessione dell'account oltre al token dell'applicazione. I token bridge associati e autonomi hanno ambiti più ristretti e non sostituiscono un token di lancio. A 401 occorre una diagnosi delle credenziali; un 403 necessita di diagnosi di funzionamento/accesso; un progetto assente o inaccessibile può essere segnalato come 404.

Alcune schermate, incluse le schede delle risorse secondarie del progetto, attualmente trasformano gli errori dei singoli elenchi in array vuoti. Una scheda vuota non è una prova sufficiente che i record siano stati eliminati. Leggi il corrispondente progetto, disegno, o percorso utensile endpoint prima di ricreare il lavoro.

Un token di lancio valido contiene 64 caratteri esadecimali (32 byte casuali) e cambia a ogni avvio. La shell del desktop non ha emesso un token di forma diversa.

Riconoscere l'anteprima e le limitazioni native

La falsa API gestisce progetti, disegni, materiali, strumenti, macchine, percorsi utensile, KV e percorsi del generatore selezionati. Le raccolte non supportate restituiscono HTTP 501 con un messaggio specifico per l'anteprima. I dati degli incontri appartengono alla pagina corrente. Un'azione di anteprima riuscita non può dimostrare il comportamento persistente dell'organizzazione, del plug-in, della fatturazione o del fornitore attivo.

Le finestre di dialogo native, le operazioni del portachiavi, il vassoio, il programma di aggiornamento e i materiali macOS richiedono l'host Tauri e le funzionalità corrette. Un comando registrato può ancora non essere disponibile per la visualizzazione Web nella sua configurazione di funzionalità. Per l'apertura dei file, la shell registra le associazioni supportate e inoltra i percorsi; questo da solo non prova che un particolare editor abbia importato i contenuti.

I guasti grafici sono un altro limite. Una dimensione del contenitore diversa da zero, entità/livelli visibili, selezione sbloccata e WebGL supportato sono prerequisiti per le interazioni del viewport rilevanti. Una mesh renderizzata è la prova del rendering, non di un salvataggio riuscito o di una verifica CAM. Usa il diagnostica della vista per la capacità del lavoratore, il timeout e il comportamento a quattro visualizzazioni.

Ripristina le preferenze e i problemi di visualizzazione

Il record delle preferenze di visualizzazione Web condiviso è cadcamfun.settings. Le impostazioni predefinite includono millimetri, tema di sistema, tre decimali, preferenza GRBL, snap abilitato, tolleranza 0.01 mm e vetro abilitato. I campi memorizzati vengono convalidati in modo indipendente; i valori non validi rientrano senza far fallire la shell. L'archiviazione locale completa/bloccata può impedire la persistenza.

La modifica delle unità di visualizzazione non ridimensiona la geometria CAD memorizzata. La tolleranza del documento viene propagata tramite l'assistente condiviso delle impostazioni CAD/generatore/verifica. Alcuni valori di funzioni/rotazioni utilizzano esplicitamente i gradi; gli angoli di disegno utilizzano i radianti. Verificare il contratto sul campo prima di diagnosticare una mancata corrispondenza numerica come geometria danneggiata.

Il comportamento del vetro dipende dal supporto Tauri/macOS. L'implementazione utilizza Liquid Glass dove supportato, vivacità su macOS meno recenti tramite il plug-in e un fallback opaco quando non disponibile o disabilitato. Le modifiche al tema/materiale non alterano la geometria, la proprietà del progetto o le prove di lavorazione.

Preferisci le impostazioni pertinenti o il controllo delle funzionalità rispetto alla cancellazione di tutta la memoria di visualizzazione web. Tale spazio di archiviazione può contenere anche passaggi di sessione/editor. Il ripristino delle preferenze visive non è una procedura di ripristino del database.

Separare il recupero dell'interfaccia utente dalle prove di lavorazione

Un progetto caricato, un salvataggio HTTP riuscito, un percorso utensile animato e un NC generato sono osservazioni diverse. Prima di fare affidamento su un risultato di lavorazione salvato, ispezionare l'esatto NC, il disegno/il grezzo di origine, gli assiemi di utensili, la dotazione della macchina, il post selezionato e il rilascio/problemi di verifica per quel risultato.

Il codice dell'istantanea CAM conserva l'evidenza del kernel solo quando il testo NC corrente e il relativo hash corrispondono. Le scritture del programma portatile convalidano la coerenza del documento e possono rivalutare le richieste del kernel catturate. La modifica del NC o il cambio dello stock possono invalidare le prove precedenti. La riapertura del semplice NC può analizzare un programma senza ripristinare la stessa prova di produzione.

Dopo un arresto anomalo o un salvataggio interrotto, ispeziona innanzitutto la riga salvata e le relative versioni. Il salvataggio modale CAM registra il programma precedente prima di un aggiornamento, mentre il salvataggio manuale dei dettagli del percorso utensile registra la revisione aggiornata. La cronologia del progetto è di nuovo separata. Utilizzo il confronto storico scegliere un percorso di recupero.

Non convertire un assegno non risolto in un'operazione accettata perché l'interfaccia utente è stata ripristinata. Rieseguire la verifica appropriata rispetto alle risorse effettive e alle NC; un'analisi dello stato dell'applicazione non ha autorità sulla sicurezza della macchina.

Triage un fallimento alla volta

  1. Registra la modalità di avvio, le versioni del processo, le porte e la directory dei dati effettivi.
  2. Sonda l'integrità, quindi una lettura protetta. Connettività separata dall'autorizzazione.
  3. Ispeziona gli errori strutturati di avvio/migrazione prima di reimpostare o eliminare qualsiasi cosa.
  4. Riproduci rispetto a un processo di origine isolato quando si sospetta un problema compilato/nativo.
  5. Correggere la causa identificata, riavviare il processo appropriato e aggiornare le variabili dell'endpoint non aggiornate.
  6. Riapri il documento/programma salvato e controlla lo stato persistente, le versioni, le esportazioni e la verifica corrente.

Gli ancoraggi di implementazione sono app/App.tsx, app/sidecar.ts, src-tauri/src/{sidecar,commands,lib}.rs, il sidecar main.ts/config.ts/shutdown.tse il ciclo di vita del database. Sviluppo locale fornisce i dettagli di configurazione; abbinamento di compagni gestisce il proprio confine di rete separato.

Lista di controllo di avvio

  1. È presente il binario sidecar per questa piattaforma (src-tauri/binaries/sidecar-<target triple>)? desktop:dev lo costruisce; tauri:dev può usare uno stub.
  2. Le migrazioni vengono organizzate in fasi src-tauri/resources/migrations? bun run build:sidecar o bun scripts/build.ts --only=resources li rimonta.
  3. Il sidecar è stato stampato ready entro 60 secondi? Cerca un error riga su stdout e JSON accede a stderr nella directory dei log (get_logs_dir).
  4. Si è riavviato? È consentito un solo riavvio automatico; un secondo fallimento lascia lo stato a failed.
  5. Fa GET /api/health risposta sulla porta segnalata? In tal caso, ma i percorsi protetti restituiscono 401, il token appartiene a un lancio diverso.
  6. La directory dei dati è scrivibile e il file del database non è tenuto aperto da un altro processo con migrazioni incompatibili?
TimerValoreProprietario
Pronta stretta di mano60 s per tentativoSupervisore della Rust
Riavvii automatici1Supervisore della Rust
Attesa dell'endpoint125 s (due strette di mano + 5 s)get_sidecar_endpoint
Budget per il recupero di Webview150 s, 30 s per tentativo, 750 ms tra i tentativiVisualizzazione Web
Grazia dello spegnimento2 s dopo la linea di spegnimento, quindi il processo viene completato (fino a 5 s)Supervisore della Rust

Lettura dei log

I log sidecar sono linee JSON su stderr, mantenute separate dall'handshake stdout. Le righe che potrebbero contenere credenziali vengono sostituite da [redacted: line may contain credentials] prima che vengano scritti, quindi è prevista una riga oscurata in un registro, non corruzione. Se l'handshake stesso conteneva una linea di questo tipo, l'errore di avvio segnalato è l'indicatore di redazione; leggere le righe stderr circostanti per il contesto.

La directory dei log è specifica della piattaforma. Ottienilo da get_logs_dir comando invece di indovinare un percorso e aprirlo con open_path, che accetta la directory del registro dell'applicazione.

Messaggi di errore e cosa significano

MessaggioDa dove vieneCosa fare
La coda mesh 3D è piena. Ridurre la complessità della scena.Coda di meshing viewport (128 lavori)Nascondere o semplificare i corpi; la coda è stata cancellata
3Mesh D scaduto. Ridurre la complessità della scena.Un processo di meshing ha superato 15 sSemplificare il solido; il lavoratore è stato riavviato
Nessun provider AI è configurato. Aggiungi una chiave API nelle impostazioni AI.Flusso dell'assistente, code: "config"Aggiungi una chiave del provider; nient'altro è sbagliato
Il diario delle migrazioni legacy non corrisponde alle migrazioni localiAggiornamento del database all'avvioConserva la directory dei dati; installare la versione corrispondente
La richiesta di pull non è apertaUnire o chiudere un PR unito/chiusoAggiorna l'elenco PR
Revisione sconosciuta <rev>Ripristino della cronologia o registro con una revisione errataScegli una revisione dal registro
Plugin <id> may not use "<capability>": it was not granted at install timeContesto del pluginReinstallare e concedere la funzionalità oppure modificare il plug-in
Gli assi rotanti della macchina non possono raggiungere questo piano di lavoro entro i loro limitiLavorazione indicizzataUsa un'altra configurazione per quella faccia

Nel 3D

Dove si verificano guasti al desktop Trascina per orbitare · scorri per ingrandire · trascina con il tasto destro per eseguire la panoramica
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.