Saltar al contenido
CADCAMFUN
Documentos

Documentación

Arquitectura

Límites de ejecución, flujo de solicitudes, persistencia y puntos de extensión en el escritorio, el sidecar, el complemento móvil y el sitio de documentación.

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

Procesos y límites de confianza

Tauri posee integración de ventanas nativas, comandos de credenciales seguras, menús, actualizaciones y ciclo de vida complementario. Su vista web ejecuta la aplicación SolidJS. El sidecar Bun compilado abre la base de datos y sirve HTTP en 127.0.0.1 con un puerto asignado por el sistema operativo. La interfaz no abre SQLite.

El punto de entrada del sidecar es apps/sidecar/src/main.ts. Crea el servidor HTTP, construye las capas de aplicación, sondea /api/healthy luego imprime un evento de preparación JSON que contiene el puerto elegido. Los registros se enrutan a stderr para que stdout permanezca disponible para el protocolo de shell.

El compañero móvil llega a una puerta de enlace de escritorio emparejada explícitamente. Sus credenciales nativas de transporte y dispositivo están separadas de la conexión loopback de la vista web de escritorio. El trabajador de documentación es una implementación independiente y no tiene conexión implícita con el escritorio de un usuario.

Dependencias de la biblioteca

@cadcamfun/core contiene CAD, dibujos y cálculos CAM. Depende del Efecto para esquemas e integración de límites; Los bucles algorítmicos son TypeScript ordinario. @cadcamfun/api importa tipos y esquemas principales para declarar entradas, salidas, errores y flujos HTTP.

@cadcamfun/db es propietario del servicio de base de datos de la aplicación, el esquema y la lógica de migración. El sidecar lo combina con paquetes principales, API, AI, SDK de complementos, VCS y flujo de trabajo. Sus repositorios utilizan el servicio de base de datos; los manejadores delegan en repositorios y servicios.

El escritorio importa ambos. @cadcamfun/api y @cadcamfun/core. Utiliza la API en tiempo de ejecución a través de un cliente Effect y utiliza la geometría central en las funciones CAD/CAM y la ventana gráfica. Mobile depende del paquete API y envuelve las solicitudes complementarias en su cliente. El complemento nikcli independiente descubre el catálogo de acciones de la aplicación en ejecución a través de HTTP en lugar de importar implementaciones de backend.

Ciclo de vida de la solicitud HTTP

  1. La vista web obtiene la conexión sidecar del shell nativo.
  2. apps/desktop/src/app/client.ts crea un cliente Effect HttpApi con autorización de portador y un token de sesión de cuenta opcional. packages/api/src/client.ts proporciona un cliente de contrato reutilizable para otros consumidores.
  3. apps/sidecar/src/layers.ts ensambla ServedApi, controladores, autorización, CORS y capas de servicios compartidos.
  4. El controlador valida las entradas del contrato, resuelve servicios, realiza cálculos o persistencia y devuelve la representación de éxito o error declarado. Los puntos finales de transmisión conservan su protocolo de transmisión declarado.

CORS permite orígenes de producción de Tauri y orígenes de bucle invertido HTTP utilizados en el desarrollo. No reemplaza la autorización. La API expone varios estilos de sobres de respuesta; los consumidores deben seguir el esquema de cada punto final en lugar de asumir que cada respuesta tiene la misma forma.

Ciclo de vida del servicio y almacenamiento.

Las capas de efectos adquieren la base de datos y los servicios compartidos dentro del alcance de la aplicación. La capa de base de datos crea su directorio principal, habilita WAL y claves externas, opcionalmente aplica migraciones y encapsula los errores de consulta con un nombre de operación. La finalización intenta truncar el punto de control WAL y cierra el identificador SQLite.

El DatabaseLive selecciones de capa dataDir/cadcamfun.db. Se debe proporcionar una carpeta de migración para aplicar las migraciones al inicio. Las credenciales de IA, el estado de los complementos, los objetos VCS, la ejecución del flujo de trabajo y el almacenamiento de archivos se manejan a través de sus respectivas interfaces de servicio; Los detalles de almacenamiento se describen en las páginas de sus módulos.

El estudio local en packages/web/script/studio-server.ts es un proceso adicional de Bun. Abre directamente una base de datos de aplicaciones existente configurada y proporciona datos de descripción general autenticados en el puerto de bucle invertido 4396. Su proxy de desarrollo y sus sesiones de cookies son independientes de la conexión sidecar de Tauri.

Los eventos del proyecto en vivo (solicitudes de extracción, confirmaciones, ejecuciones de flujo de trabajo y fases de sesión del asistente) se publican a través de un servicio de eventos en proceso. Un nuevo suscriptor recibe primero hasta los 20 eventos coincidentes más recientes y luego los activos, opcionalmente filtrados por proyecto y tipo de evento (apps/sidecar/src/services/live-events.ts).

Límites de extensión

Hay dos integraciones de complementos. El SDK del complemento de aplicación define manifiestos, capacidades, activación y contratos de host. El puente nikcli expone las acciones CAD/CAM registradas a un asistente externo. La instalación de un complemento a través de una ruta de registro HTTP es una operación independiente de la activación de un módulo en el host de ejecución.

Análisis y programación del flujo de trabajo en vivo packages/workflow. Los pasos respaldados por el servicio se registran mediante capas sidecar, mientras que los pasos puros del proyecto y CAM se pueden ejecutar con las entradas proporcionadas. VCS calcula hashes, diferencias, fusiones y operaciones de transporte de GitHub de objetos en su biblioteca; Los servicios sidecar conectan esas operaciones con la persistencia del proyecto.

El asistente de documentación web recupera la documentación renderizada y puede publicar artefactos de guía cuando se configura el almacenamiento. Responde preguntas sobre documentación; no hereda el acceso al proyecto local de la aplicación CAD/CAM.

Límites de conexión y credenciales

CredencialObjetivoLímite
Token de portador de aplicaciónAdmitir la aplicación local a rutas protegidas con sidecar.Generado/suministrado para el lanzamiento del sidecar; la vista web lo obtiene a través de la conexión nativa.
x-session-tokenSeleccione la cuenta que actúa detrás de la solicitud admitida.Una sesión ausente, no válida, caducada o huérfana recurre al perfil local.
Token de dispositivo complementarioAdmita un teléfono emparejado individualmente a las rutas de puerta de enlace.Comprobado por la puerta de enlace HTTPS independiente y su lista de métodos/rutas permitidas.
Ficha de puente de IAExponer las acciones permitidas para un solo proyecto a un agente externo.Admite los dos puntos finales del puente de acción y aplica el alcance de lectura o lectura/escritura.
Clave API del proveedorAutenticar llamadas de modelos salientes.Gestionado por el servicio de credenciales sidecar; no sustituye la autorización de la solicitud.
ficha de GitHubRealice una operación de duplicación solicitada.Proporcionado para esa llamada a través x-github-token; no proyecta datos de instantáneas.

La autorización está en capas. Pasar el middleware al portador no prueba la propiedad de un dibujo o proyecto en particular; Los manejadores y repositorios verifican esos recursos. De manera similar, el emparejamiento no convierte el teléfono en un cliente complementario sin restricciones. Consulte la política específica de terminales y acompañantes antes de elegir una credencial.

El adaptador de autorización es apps/sidecar/src/http/authorization.ts. Las decisiones de los compañeros y puentes viven en sus propios servicios. Mantener esas rutas separadas permite revocar un dispositivo perdido o un token de integración sin reemplazar el secreto de un proveedor de IA.

Aislamiento de fallas

Las fallas antes del evento de preparación pertenecen a la inicialización del sidecar: configuración, actualización de la base de datos, construcción del servicio o inicio de HTTP. Las fallas después de la preparación pueden ser específicas de un proveedor, operación del sistema de archivos, punto final o sesión del cliente. El ciclo de vida del shell y el presupuesto de reintento de conexión de la vista web son distintos; inspeccione ambos cuando un reinicio cambie el puerto de escucha.

Una transmisión de IA desconectada no necesariamente detiene su conversación del lado del servidor. Recupere el estado de la sesión antes de reenviar una instrucción de edición. Un flujo de trabajo fallido no revierte su confirmación desencadenante. Un envío remoto fallido no borra el historial local. Estas distinciones evitan que una falla de la red se maneje como si nunca hubiera ocurrido una operación persistente.

Para una solicitud de API fallida, registre su método, ruta, estado, ID de punto final e identificadores no secretos relevantes. comparar la carrera /api/openapi.json con el instantánea del contrato de documentación cuando las versiones del cliente y del servidor difieren. Evite solucionar problemas con un token de un lanzamiento anterior de sidecar.

Instantánea de la arquitectura por ruta de origen

Áreadonde viveQue leer primero
Carcasa de escritorio (Rust)apps/desktop/src-tauri/src/sidecar.rs (supervisor), commands.rs, updater.rs, menu.rs, tray.rs, secrets.rs
Interfaz de usuario de escritorioapps/desktop/src/app/, features/ (cad, cam, ai, chat, proyectos, trayectorias de herramientas, complementos,…), viewport/, shared/
Entrada con sidecarapps/sidecar/src/main.tsApretón de manos listo, capas adentro layers.ts, configuración en config.ts
Controladores HTTPapps/sidecar/src/http/Un archivo por grupo, p.e. toolpath-generator.ts, ai.ts, kv.ts
Servicios y repositoriosapps/sidecar/src/services/, repos/cam-program.ts, companion.ts, auth-tokens.ts, storage.ts
Contratopackages/api/src/index.ts, groups/, errors.ts, client.ts
Núcleopackages/core/src/cad/history.ts, cad/sketch.ts, cam/kernel/, cam/post/
Asistentepackages/ai/src/actions/, tools/, nikcli/, prompts/
Almacenamientopackages/db/src/index.ts, upgrade.ts, schema.ts
Historiapackages/vcs/, packages/workflow/API de repositorio, fusión, esquema de flujo de trabajo
Compañeroapps/mobile/app/ rutas, lib/ conexión y emparejamiento

Seguimiento: desde el lanzamiento hasta la primera solicitud

  1. Tauri comienza y el supervisor en sidecar.rs genera un token aleatorio.
  2. Se genera sidecar-<triple> con CADCAMFUN_TOKEN, CADCAMFUN_DATA_DIR y CADCAMFUN_MIGRATIONS_DIR.
  3. El sidecar lee su configuración, abre SQLite (WAL, claves externas), realiza copias de seguridad y migra si es necesario, y construye sus capas de servicio.
  4. Se une 127.0.0.1 en un puerto efímero e imprime una línea lista para JSON en la salida estándar. El supervisor espera hasta 60 s.
  5. El supervisor emite sidecar-status { state: "ready", port }; la vista web llama get_sidecar_endpoint para { baseUrl, token }.
  6. La vista web se construye ApiClient.layer({ baseUrl, token }) y comienza a cargar proyectos.

Si el sidecar sale, el supervisor lo reinicia una vez y anuncia el nuevo puerto; un segundo fallo deja el estado en failed. Al salir, el supervisor escribe la línea de cierre, espera 2 s y luego cosecha el proceso; la capa de base de datos marca el WAL a medida que se cierra su alcance.

Seguimiento: una solicitud de fabricación

  1. El espacio de trabajo CAM captura los elementos de dibujo, el stock y las llamadas. POST /api/toolpaths/manufacture.
  2. El middleware portador admite la solicitud; el cuerpo es decodificado contra CamKernelRequest.
  3. runKernelRequest en services/cam-program.ts llamadas cam.kernel.jobOfSnapshot; los problemas de preparación se convierten en un 400.
  4. cam.kernel.runJob planifica o sigue operaciones, calcula datos de corte, genera trayectorias de herramientas, publica NC para el dialecto de la máquina y lo reproduce en stock de vóxeles para evaluar las reclamaciones.
  5. El resultado se decodifica contra CamKernelResult y regresó. No se almacena nada hasta que el cliente guarda una ruta de herramienta con un documento portátil, momento en el que el sidecar vuelve a ejecutar la solicitud capturada y la compara.

En 3D

Gráfico de dependencia del espacio de trabajo Arrastrar para orbitar · desplazarse para hacer zoom · arrastrar con el botón derecho para desplazarse
Todos los 13 paquetes de espacio de trabajo desde sus archivos package.json; cada línea es un espacio de trabajo:* dependencia (17 en total). Las filas son la profundidad de dependencia: paquetes sin dependencias de espacio de trabajo al frente, el sidecar, que depende de 8 de ellos, al final. Los cuadros naranjas son aplicaciones.