Pular para o conteúdo
CADCAMFUN
Docs

Documentação

Arquitetura

Limites de execução, fluxo de solicitação, persistência e pontos de extensão no desktop, sidecar, complemento móvel e site de documentação.

Traduzido automaticamente do inglês. Ver o original em inglês

Processos e limites de confiança

Tauri possui integração de janela nativa, comandos de credenciais seguros, menus, atualizações e ciclo de vida secundário. Seu webview executa o aplicativo SolidJS. O sidecar Bun compilado abre o banco de dados e serve HTTP em 127.0.0.1 com uma porta atribuída ao sistema operacional. O frontend não abre SQLite.

O ponto de entrada do sidecar é apps/sidecar/src/main.ts. Ele cria o servidor HTTP, constrói as camadas de aplicação, investiga /api/healthe, em seguida, imprime um evento de preparação JSON contendo a porta escolhida. Os logs são roteados para stderr para que o stdout permaneça disponível para o protocolo shell.

O complemento móvel alcança um gateway de desktop explicitamente emparelhado. Suas credenciais nativas de transporte e dispositivo são separadas da conexão de loopback do desktop webview. A documentação Worker é uma implantação separada e não tem conexão implícita com a área de trabalho do usuário.

Dependências da biblioteca

@cadcamfun/core contém CAD, desenho e computação CAM. Depende do Effect para esquemas e integração de limites; loops algorítmicos são TypeScript comuns. @cadcamfun/api importa tipos e esquemas principais para declarar entradas, saídas, erros e fluxos HTTP.

@cadcamfun/db possui o serviço de banco de dados do aplicativo, o esquema e a lógica de migração. O sidecar combina-o com pacotes principais, API, AI, plugin SDK, VCS e fluxo de trabalho. Seus repositórios utilizam o serviço de banco de dados; manipuladores delegam para repositórios e serviços.

A área de trabalho importa ambos @cadcamfun/api e @cadcamfun/core. Ele usa a API em tempo de execução por meio de um cliente Effect e usa geometria central em recursos CAD/CAM e na janela de visualização. O celular depende do pacote da API e agrupa solicitações complementares em seu cliente. O plug-in nikcli independente descobre o catálogo de ações do aplicativo em execução por HTTP, em vez de importar implementações de back-end.

Ciclo de vida da solicitação HTTP

  1. O webview obtém a conexão secundária do shell nativo.
  2. apps/desktop/src/app/client.ts cria um cliente Effect HttpApi com autorização de portador e um token de sessão de conta opcional. packages/api/src/client.ts fornece um cliente de contrato reutilizável para outros consumidores.
  3. apps/sidecar/src/layers.ts monta ServedApi, manipuladores, autorização, CORS e camadas de serviço compartilhado.
  4. O manipulador valida as entradas do contrato, resolve serviços, executa computação ou persistência e retorna a representação declarada de sucesso ou erro. Os pontos finais de streaming preservam o seu protocolo de fluxo declarado.

O CORS permite origens de produção Tauri e origens de loopback HTTP usadas no desenvolvimento. Não substitui a autorização. A API expõe vários estilos de envelope de resposta; os consumidores devem seguir o esquema de cada endpoint em vez de assumir que todas as respostas têm o mesmo formato.

Ciclo de vida do serviço e armazenamento

As camadas de efeito adquirem o banco de dados e os serviços compartilhados dentro do escopo da aplicação. A camada de banco de dados cria seu diretório pai, habilita WAL e chaves estrangeiras, opcionalmente aplica migrações e encapsula falhas de consulta com um nome de operação. A finalização tenta truncar o ponto de verificação WAL e fecha o identificador SQLite.

O DatabaseLive seleção de camada dataDir/cadcamfun.db. Uma pasta de migração deve ser fornecida para aplicar migrações na inicialização. Credenciais de IA, estado do plugin, objetos VCS, execução de fluxo de trabalho e armazenamento de arquivos são tratados por meio de suas respectivas interfaces de serviço; os detalhes de armazenamento estão descritos nas páginas do módulo.

O estúdio local em packages/web/script/studio-server.ts é um processo Bun adicional. Ele abre diretamente um banco de dados de aplicativo existente configurado e fornece dados de visão geral autenticados na porta de loopback 4396. Seu proxy de desenvolvimento e sessões de cookies são independentes da conexão sidecar Tauri.

Eventos de projeto ao vivo (solicitações pull, confirmações, execuções de fluxo de trabalho e fases de sessão de assistente) são publicados por meio de um serviço de eventos em processo. Um novo assinante recebe primeiro até os 20 eventos correspondentes mais recentes e depois os eventos ao vivo, opcionalmente filtrados por projeto e tipo de evento (apps/sidecar/src/services/live-events.ts).

Limites de extensão

Existem duas integrações de plugins. O plug-in de aplicativo SDK define manifestos, recursos, ativação e contratos de host. A ponte nikcli expõe ações CAD/CAM registradas a um assistente externo. Instalar um plug-in por meio de uma rota de registro HTTP é uma operação separada da ativação de um módulo no host de tempo de execução.

Análise e agendamento de fluxo de trabalho em tempo real packages/workflow. As etapas apoiadas pelo serviço são registradas por camadas secundárias, enquanto as etapas puras do projeto e do CAM podem ser executadas com as entradas fornecidas. O VCS calcula hashes de objetos, diferenças, mesclagens e operações de transporte GitHub em sua biblioteca; os serviços secundários conectam essas operações à persistência do projeto.

O assistente de documentação da web recupera documentação renderizada e pode publicar artefatos de guia quando o armazenamento é configurado. Responde a questões de documentação; ele não herda o acesso ao projeto local do aplicativo CAD/CAM.

Limites de conexão e credenciais

CredencialPropósitoLimite
Token de portador do aplicativoAdmita a aplicação local em rotas de sidecar protegidas.Gerado/fornecido para lançamento do sidecar; o webview obtém isso por meio da conexão nativa.
x-session-tokenSelecione a conta que está por trás do aplicativo admitido.Uma sessão ausente, inválida, expirada ou órfã retorna ao perfil local.
Token de dispositivo complementarAdmita um telefone emparelhado individualmente às rotas de gateway.Verificado pelo gateway HTTPS separado e sua lista de permissões de método/caminho.
Token de ponte AIExponha as ações permitidas para um único projeto a um agente externo.Admite os dois pontos de extremidade da ponte de ação e impõe escopo de leitura ou leitura/gravação.
Chave de API do provedorAutentique chamadas de modelo de saída.Gerenciado pelo serviço de credenciais sidecar; não substitui a autorização do aplicativo.
Token GitHubExecute uma operação de espelhamento solicitada.Fornecido para essa chamada através x-github-token; não dados de instantâneo do projeto.

A autorização é em camadas. A aprovação do middleware do portador não prova a propriedade de um desenho ou projeto específico; manipuladores e repositórios verificam esses recursos. Da mesma forma, o emparelhamento não transforma o telefone em um cliente secundário irrestrito. Consulte o endpoint específico e a política complementar antes de escolher uma credencial.

O adaptador de autorização é apps/sidecar/src/http/authorization.ts. As decisões complementares e de ponte residem em seus próprios serviços. Manter esses caminhos separados permite que um dispositivo perdido ou um token de integração seja revogado sem substituir o segredo de um provedor de IA.

Isolamento de falha

As falhas antes do evento de prontidão pertencem à inicialização do sidecar: configuração, atualização do banco de dados, construção de serviço ou inicialização HTTP. As falhas após a preparação podem ser específicas de um provedor, operação de sistema de arquivos, endpoint ou sessão de cliente. O ciclo de vida do shell e o orçamento para novas tentativas de conexão do webview são distintos; inspecione ambos quando uma reinicialização altera a porta de escuta.

Um fluxo de IA desconectado não interrompe necessariamente a conversa no servidor. Recupere o estado da sessão antes de reenviar uma instrução de edição. Um fluxo de trabalho com falha não reverte seu commit acionador. Um push remoto malsucedido não apaga o histórico local. Essas distinções evitam que uma falha de rede seja tratada como se uma operação persistente nunca tivesse ocorrido.

Para uma solicitação de API com falha, registre seu método, caminho, status, ID do endpoint e identificadores não secretos relevantes. Compare a corrida /api/openapi.json com o instantâneo do contrato de documentação quando as versões do cliente e do servidor diferem. Evite solucionar problemas com um token de um lançamento anterior de sidecar.

Instantâneo da arquitetura por caminho de origem

ÁreaOnde moraO que ler primeiro
Shell da área de trabalho (Rust)apps/desktop/src-tauri/src/sidecar.rs (supervisor), commands.rs, updater.rs, menu.rs, tray.rs, secrets.rs
IU da área de trabalhoapps/desktop/src/app/, features/ (cad, cam, ai, chat, projetos, percursos da ferramentas, plugins,…), viewport/, shared/
Entrada lateralapps/sidecar/src/main.tsAperto de mão pronto, camadas layers.ts, configuração em config.ts
Manipuladores HTTPapps/sidecar/src/http/Um arquivo por grupo, por ex. toolpath-generator.ts, ai.ts, kv.ts
Serviços e repositóriosapps/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/
Assistentepackages/ai/src/actions/, tools/, nikcli/, prompts/
Armazenarpackages/db/src/index.ts, upgrade.ts, schema.ts
Históriapackages/vcs/, packages/workflow/API de repositório, mesclagem, esquema de fluxo de trabalho
Companheiroapps/mobile/app/ rotas, lib/ conexão e emparelhamento

Rastreamento: desde o lançamento até a primeira solicitação

  1. Tauri inicia e o supervisor entra sidecar.rs gera um token aleatório.
  2. Isso gera sidecar-<triple> com CADCAMFUN_TOKEN, CADCAMFUN_DATA_DIR e CADCAMFUN_MIGRATIONS_DIR.
  3. O sidecar lê sua configuração, abre SQLite (WAL, chaves estrangeiras), faz backup e migra, se necessário, e constrói suas camadas de serviço.
  4. Ele liga 127.0.0.1 em uma porta efêmera e imprime uma linha pronta para JSON em stdout. O supervisor espera até 60 s por isso.
  5. O supervisor emite sidecar-status { state: "ready", port }; as chamadas de webview get_sidecar_endpoint para { baseUrl, token }.
  6. A visualização da web é construída ApiClient.layer({ baseUrl, token }) e começa a carregar projetos.

Se o sidecar sair, o supervisor o reinicia uma vez e anuncia a nova porta; uma segunda falha deixa o status em failed. Ao sair, o supervisor escreve a linha shutdown, espera 2 s e então retoma o processo; a camada de banco de dados verifica o WAL conforme seu escopo é fechado.

Trace: uma solicitação de fabricação

  1. A área de trabalho CAM captura os elementos de desenho e estoque e chama POST /api/toolpaths/manufacture.
  2. O middleware portador admite a solicitação; o corpo é decodificado contra CamKernelRequest.
  3. runKernelRequest em services/cam-program.ts chamadas cam.kernel.jobOfSnapshot; questões de preparação tornam-se um 400.
  4. cam.kernel.runJob planeja ou acompanha operações, calcula dados de corte, gera percursos da ferramenta, publica NC para o dialeto da máquina e os reproduz em estoque voxel para avaliar reivindicações.
  5. O resultado é decodificado contra CamKernelResult e voltou. Nada é armazenado até que o cliente salve um percurso com um documento portátil, momento em que o sidecar executa novamente a solicitação capturada e compara.

Em 3D

Gráfico de dependência do espaço de trabalho Arraste para orbitar · role para ampliar · arraste com o botão direito para deslocar
Todos os 13 pacotes de espaço de trabalho de seus arquivos package.json; cada linha é um espaço de trabalho:* dependência (17 no total). As linhas têm profundidade de dependência: pacotes sem dependências de espaço de trabalho na frente, o sidecar, que depende de 8 deles, atrás. Caixas laranja são aplicativos.