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
- La vista web obtiene la conexión sidecar del shell nativo.
apps/desktop/src/app/client.tscrea un cliente Effect HttpApi con autorización de portador y un token de sesión de cuenta opcional.packages/api/src/client.tsproporciona un cliente de contrato reutilizable para otros consumidores.apps/sidecar/src/layers.tsensamblaServedApi, controladores, autorización, CORS y capas de servicios compartidos.- 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
| Credencial | Objetivo | Límite |
|---|---|---|
| Token de portador de aplicación | Admitir 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-token | Seleccione 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 complementario | Admita 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 IA | Exponer 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 proveedor | Autenticar llamadas de modelos salientes. | Gestionado por el servicio de credenciales sidecar; no sustituye la autorización de la solicitud. |
| ficha de GitHub | Realice 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
| Área | donde vive | Que 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 escritorio | apps/desktop/src/ | app/, features/ (cad, cam, ai, chat, proyectos, trayectorias de herramientas, complementos,…), viewport/, shared/ |
| Entrada con sidecar | apps/sidecar/src/main.ts | Apretón de manos listo, capas adentro layers.ts, configuración en config.ts |
| Controladores HTTP | apps/sidecar/src/http/ | Un archivo por grupo, p.e. toolpath-generator.ts, ai.ts, kv.ts |
| Servicios y repositorios | apps/sidecar/src/services/, repos/ | cam-program.ts, companion.ts, auth-tokens.ts, storage.ts |
| Contrato | packages/api/src/ | index.ts, groups/, errors.ts, client.ts |
| Núcleo | packages/core/src/ | cad/history.ts, cad/sketch.ts, cam/kernel/, cam/post/ |
| Asistente | packages/ai/src/ | actions/, tools/, nikcli/, prompts/ |
| Almacenamiento | packages/db/src/ | index.ts, upgrade.ts, schema.ts |
| Historia | packages/vcs/, packages/workflow/ | API de repositorio, fusión, esquema de flujo de trabajo |
| Compañero | apps/mobile/ | app/ rutas, lib/ conexión y emparejamiento |
Seguimiento: desde el lanzamiento hasta la primera solicitud
- Tauri comienza y el supervisor en
sidecar.rsgenera un token aleatorio. - Se genera
sidecar-<triple>conCADCAMFUN_TOKEN,CADCAMFUN_DATA_DIRyCADCAMFUN_MIGRATIONS_DIR. - 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.
- Se une
127.0.0.1en un puerto efímero e imprime una línea lista para JSON en la salida estándar. El supervisor espera hasta 60 s. - El supervisor emite
sidecar-status{ state: "ready", port }; la vista web llamaget_sidecar_endpointpara{ baseUrl, token }. - 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
- El espacio de trabajo CAM captura los elementos de dibujo, el stock y las llamadas.
POST /api/toolpaths/manufacture. - El middleware portador admite la solicitud; el cuerpo es decodificado contra
CamKernelRequest. runKernelRequestenservices/cam-program.tsllamadascam.kernel.jobOfSnapshot; los problemas de preparación se convierten en un 400.cam.kernel.runJobplanifica 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.- El resultado se decodifica contra
CamKernelResulty 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.