Pular para o conteúdo
CADCAMFUN
Docs

Documentação

Operações do site de documentação

Execute o site Astro, mantenha a API e pesquise conteúdo, exporte Markdown, configure ligações de assistente e entenda os limites locais do Studio.

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

Arquitetura do site

packages/web é um aplicativo de saída de servidor Astro com o adaptador Cloudflare. Os artigos de documentação declaram pré-renderização e tornam-se ativos HTML estáticos. As rotas do servidor lidam com a exportação de Markdown, solicitações de assistente de documentação, visualização de artefatos/conteúdo bruto e o substituto do Studio de produção. Esta implantação é separada do sidecar CAD/CAM.

O site de documentação descreve o comportamento do aplicativo e fornece conteúdo de referência gerado. Ele não herda os projetos do visitante, o token de portador do aplicativo local, as credenciais do provedor ou a conexão de desktop emparelhada. Seu assistente usa trechos de documentação em vez de operar silenciosamente o espaço de trabalho CAD/CAM.

O Studio local é um processo Bun adicional porque usa bun:sqlite. Vite faz proxy de suas solicitações de API de desenvolvimento para a porta de loopback 4396. Um Cloudflare Worker implantado não pode abrir esse banco de dados local; a API de produção do Studio explica isso deliberadamente com HTTP 503.

Comandos locais

Da raiz do repositório
bun run --filter @cadcamfun/web start
bun run --filter @cadcamfun/web dev
bun run --filter @cadcamfun/web studio
bun test packages/web/test
bun run --filter @cadcamfun/web typecheck
bun run --filter @cadcamfun/web build
ComandoProcesso ou saída
startApenas servidor de desenvolvimento Astro. Use o endereço impresso no terminal.
devProcesso Studio Bun mais Astro. Seu iniciador interrompe os processos filhos quando o processo de desenvolvimento principal termina.
studioSomente a API local do Studio na porta de loopback 4396.
typecheckVerificações de TypeScript e integridade de conteúdo configuradas neste espaço de trabalho.
buildProdução do trabalhador de produção e ativos pré-renderizados em packages/web/dist.

Use o Astro apenas para edição de artigos quando o Studio for desnecessário. A compilação de produção valida a geração de modelos e roteia a saída, mas não chama um back-end de modelo real, publica artefatos ou verifica uma conta Cloudflare implantada.

Geração de conteúdo e API

Os artigos vivem em src/pages/docs e compartilhe DocsLayout.astro. A barra lateral em src/data/docsSidebar.ts é o inventário da rota de documentação. docsIndex.ts adiciona resumos por rota e palavras-chave para recuperação. Uma página pública deve ter uma entrada de navegação e uma cópia de recuperação precisa; um artigo desvinculado não pode ser descoberto apenas porque seu arquivo existe.

A referência da API combina um instantâneo de contrato gerado com agrupamento de recursos selecionados em src/data/apiGroups.ts. src/lib/apiReference.ts seleciona todas as operações, resolve esquemas nomeados e fornece os modelos de recursos. O instantâneo é gerado a partir do aplicativo composto HttpApi usando sua implementação de efeito instalada.

Dentro de pacotes/web
bun run generate:api-reference
bun run check:api-reference
bun run check:docs-index
bun test test

A regeneração grava o contrato de esquema atual; ele não escreve orientações de domínio nem prova que um aplicativo remoto está na mesma versão. As páginas manuscritas explicam validação de negócios, efeitos colaterais, permissões, recuperação e limites de implementação. Mantenha essas explicações vinculadas aos manipuladores e serviços reais.

Notas de leitura da fonte podem ser preparadas em packages/web/.tmp/content. São material editorial temporário, excluído de publicação. Mova as explicações finalizadas para as páginas do artigo e atualize a navegação/recuperação; não use uma nota temporária como única documentação para uma operação.

Exportação de redução

GET /llm lista páginas de documentação conhecidas como links Markdown. Com path, ele busca o artigo renderizado correspondente e o converte em Markdown no estilo GitHub. Adicionando format=prompt agrupa esse conteúdo em um prompt de instruções que inclui sua fonte canônica.

Substitua DOCS_ORIGIN pelo site em execução
curl "$DOCS_ORIGIN/llm"
curl "$DOCS_ORIGIN/llm?path=/docs/cam"
curl "$DOCS_ORIGIN/llm?path=/docs/api/projects&format=prompt"

O pipeline lê apenas o artigo marcado data-llm-document. Ele remove conteúdo, scripts, estilos, decoração SVG e botões excluídos para que os controles de navegação e cópia não se tornem contexto de resposta. Ele converte blocos de código, títulos, tabelas e links em vez de manter um segundo corpus Markdown manuscrito.

Somente caminhos de documentação conhecidos são admitidos. Caminhos desconhecidos retornam 404. Uma falha no carregamento da página retorna 502; outra falha de conversão retorna 500. A resposta é Markdown com CORS de leitura permissiva e uma política de cache pública de cinco minutos com obsoleto enquanto revalida. Esses artigos públicos exportados não contêm credenciais de projetos locais.

No Cloudflare, o auxiliar prefere a ligação ASSETS para páginas pré-renderizadas. Isso mantém a leitura dentro da implantação do Worker. O desenvolvimento pode voltar à busca ao vivo quando a construção de ativo existente não contém uma página. Uma árvore dist local obsoleta e uma árvore de origem atual podem, portanto, ser entradas diferentes durante a edição.

Assistente de documentação

POST /api/docs-assistant aceita mensagens de conversação, um caminho de documentação opcional e um identificador de sessão de back-end opcional. Ele mantém apenas as mensagens do usuário/assistente, corta cada mensagem para 1,200 caracteres, retém as 12 mensagens válidas mais recentes e exige uma pergunta do usuário.

A recuperação primeiro pontua a pergunta atual e as perguntas anteriores do usuário em relação a títulos, rotas, palavras-chave e resumos. A página conhecida atual é mantida. Quando uma ligação Workers AI está disponível, um planejador de chamada de ferramenta opcional pode selecionar rotas de documentação relevantes; seleções inválidas ou falhas do planejador recorrem à recuperação lexical.

Até três páginas são carregadas. Cada um é condensado em um orçamento de 5,000 caracteres, mantendo sua introdução e seções correspondentes. Uma página longa de recursos de API, portanto, não é fornecida automaticamente por completo ao modelo. Vincule o usuário à operação relevante quando o trecho não contém detalhes suficientes.

O Markdown carregado é armazenado em cache separadamente por 30 minutos quando o cache do Worker está disponível. Uma edição de origem pode exigir atualização de cache em uma implantação já em execução. Se nenhuma página selecionada puder ser carregada, a rota retornará 502. Se não existir nenhuma ligação Workers AI ou configuração completa de back-end do nikcli, ele retornará 503 antes da geração.

Uma única solicitação do assistente pode conter no máximo 12 mensagens de conversa, e uma pergunta é limitada a 1,200 caracteres (MAX_MESSAGES e MAX_QUESTION_CHARS em src/lib/docsAssistant.ts).

Modelos e limites de taxas

Vinculação ou configuraçãoPapel
AIExecução de modelo de IA de trabalhadores para planejamento, respostas e renderização de guia opcional mais rica.
DOCS_ASSISTANT_MODELModelo de resposta/planejamento; o padrão é @cf/meta/llama-3.1-8b-instruct-fast na rota.
DOCS_ASSISTANT_ARTIFACT_MODELModelo de renderização de guia; o padrão é @cf/openai/gpt-oss-20b.
SESSIONSNamespace KV opcional usado para contadores horários de melhor esforço por IP.
DOCS_ASSISTANT_RATE_LIMITLimite horário configurado; o substituto da rota é 20.
CADCAMFUN_DOCS_SERVER e CADCAMFUN_DOCS_TOKENAmbos são necessários para selecionar o back-end alternativo da sessão nikcli.
CADCAMFUN_DOCS_AGENT, CADCAMFUN_DOCS_DIRECTORYAgente e diretório opcionais para esse back-end remoto.

O caminho nikcli cria ou reutiliza uma sessão remota, assina seu fluxo antes de enviar a mensagem e aplica um tempo limite de 90 segundos. Este é o suporte à documentação em um back-end configurado; seu token é separado da ponte ou das credenciais do provedor do aplicativo CAD/CAM.

O limitador de taxa requer a ligação KV opcional e um cabeçalho IP do cliente. Sua sequência de leitura/incremento/gravação é de melhor esforço, em vez de uma cota de segurança atômica, e falhas de KV são permitidas. Sem a vinculação, não há limite por IP imposto. Não a apresente como uma alocação garantida nem confie em afirmações de preços de modelos históricos.

A configuração do adaptador local desativa ligações remotas. O modelo não tem implementação local neste site. Uma visualização normal do artigo local pode funcionar enquanto as solicitações do assistente retornam 503. Configure um back-end acessível ou valide o comportamento do modelo no ambiente de implantação pretendido.

Artefatos de guia gerados

Uma solicitação de guia, lista de verificação, referência ou página reutilizável semelhante pode produzir um rascunho de artefato. Com ARTIFACTS R2, o auxiliar o normaliza para um documento HTML e grava o conteúdo mais os metadados. Um documento vazio normalizado ou maior que 256 KiB não é publicado.

O link retornado carrega um ?key= capacidade de leitura. Qualquer pessoa com esse link completo pode ler o artefato. O identificador simples não é suficiente; não há porta de login da conta do proprietário para esses guias anônimos. Trate a chave como uma credencial de compartilhamento e evite colocar dados privados do projeto em um guia compartilhado publicamente.

O visualizador usa um shell privado e sem cache e uma sandbox iframe, permitindo scripts e pop-ups sem permissão de mesma origem. A rota HTML bruta aplica uma política de conteúdo que permite scripts/estilos embutidos e imagens de blob/dados incorporados, mas bloqueia buscas de rede externas e carregamentos de fontes/estilos/scripts externos. Os guias gerados devem ser independentes; seu layout não pode depender do DOM atual do site ou do armazenamento local.

O auxiliar de publicação atual grava a versão 1 e um novo recurso aleatório. A rota bruta pode selecionar uma versão armazenada válida com v; uma versão inválida ou fora do intervalo volta para a versão armazenada mais recente. Esse suporte de recuperação não estabelece uma API pública de edição/gerenciamento de versão.

ARTIFACT_PUBLIC_ORIGIN pode selecionar a origem do link de compartilhamento canônico para implantações não locais. O armazenamento ausente retorna 503 no acesso ao artefato. O conteúdo ausente retorna 404 e uma capacidade de leitura rejeitada retorna 401. Mantenha separados os ativos de armazenamento de guias gerados e de documentação pública.

Estúdio local

O estúdio escolhe CADCAMFUN_DB, então DATABASE_URL depois de remover um prefixo de arquivo inicial, então o repositório data/cadcamfun.db. Ele abre apenas um arquivo existente. Esta seleção difere do padrão relativo ao processo da CLI do pacote de banco de dados e do diretório de dados do aplicativo da área de trabalho nativa.

O login verifica a senha armazenada de um usuário existente com o verificador de senha do Bun. Ele grava uma sessão de sete dias na tabela Session do aplicativo e define um cookie SameSite=Lax somente HTTP para o Studio local. Nenhum registro de usuário ou inicialização de senha inicial é implementado por esse servidor local. Um perfil local nativo sem senha não adquire uma senha do Studio automaticamente.

Consultas de visão geral autenticadas contam usuários, projetos, desenhos e percursos da ferramenta na instalação selecionada e, em seguida, retornam os oito projetos atualizados mais recentemente. É uma visão geral da instalação local, em vez de um painel filtrado por propriedade por projeto. Use um banco de dados e uma conta locais apropriados; abrir o Studio não é motivo para apontá-lo para um arquivo de usuário não relacionado.

A queda na produção sob /studio/api/* é HTTP 503. A implantação dos documentos públicos não carrega o conteúdo SQLite nem transforma esta ferramenta local em um serviço de banco de dados hospedado.

Implantação

wrangler.toml declara a entrada do Worker, o diretório de ativos estáticos, os domínios personalizados em cadcam.fun, Workers AI, namespaces KV de sessão e limite de taxa de assistente e o bucket de artefato R2. O Wrangler provisiona recursos dedicados e os vincula à implantação. Configure segredos por meio do ambiente Cloudflare de destino. Um nome de ligação em uma interface TypeScript não é prova de que o recurso existe na conta.

O script de implantação constrói o Astro, escreve dist/.assetsignore portanto, a entrada Worker é excluída dos ativos estáticos e invoca a implantação do Wrangler. A implantação é uma operação de publicação; a verificação normal da documentação deve usar verificações locais e de compilação sem executá-la.

Before publishing, validate static routes and API snapshot freshness, confirm intended bindings, verify assistant failure behavior without its backend, and check artifact capability access if storage is enabled. Após a publicação, inspecione a implantação resultante e o back-end configurado em vez de tratar uma construção local como evidência de um serviço ativo.

Diagnóstico operacional

EncontrandoVerificar
Assistente 400Corpo JSON válido e pelo menos uma mensagem de usuário não vazia após análise/corte.
Assistente 429O contador por IP configurado opcionalmente e o intervalo horário atual.
Assistente 502Se os caminhos de artigos selecionados podem ser carregados e convertidos na implantação.
Assistente 503Vinculação de IA de trabalhadores ou configuração completa de URL/token de back-end do nikcli.
Remarcação 404A rota solicitada deve estar no inventário de navegação e não em um URL arbitrário.
Artefato 401Use o link de capacidade completo, incluindo sua chave.
Estúdio 503 localmenteO arquivo SQLite existente selecionado e a API Bun Studio em execução.
Estúdio 503 em produçãoComportamento de reserva esperado; o Worker implantado não é o processo Bun local.

Fontes de implementação: astro.config.mjs, wrangler.toml, script/dev.ts, script/deploy.ts, script/studio-server.ts, src/lib/docsMarkdown.ts, docsRetrieval.ts, nikcliDocsSession.ts, docsArtifact.tse os manipuladores de rota em src/pages.

Scripts do pacote docs

RoteiroCorreUse-o para
devbun script/dev.tsInicie o site para edição local
startastro devServidor de desenvolvimento Astro simples
studiobun script/studio-server.tsEstúdio local contra CADCAMFUN_DB, DATABASE_URL ou data/cadcamfun.db
build / previewastro build / astro previewProduzir e servir a construção de produção
deploybun script/deploy.tsPublicar na Cloudflare
check:freshnesscheck:docs-index então check:api-referenceFalha quando o índice de pesquisa ou a referência da API está obsoleto
typecheckbun check -p tsconfig.json, então check:freshnessErros de tipo e ambas as verificações de atualização
generate:api-referencescript/generate-api-reference.mjsGerar novamente a referência após uma alteração de contrato

Escrevendo uma página

  1. Criar src/pages/docs/<slug>.astro usando DocsLayout com title, subtitle, description e um toc matriz cujo hrefs corresponde aos IDs da seção.
  2. Escreva cada seção como <section id="…" class="doc-section"> com um <h2>.
  3. Usar DocCode (language, title) para código, DocCallout (type informação, aviso ou nota) para avisos, DocCard para grades de links, DocRelated no final, e DocViewer3D para visualizações 3D.
  4. Escape de colchetes literais no texto como &#123; e &#125;; coloque código dentro de uma expressão como {String.raw`…`}.
  5. Adicione a página aos dados da barra lateral e execute bun run typecheck, que também reconstrói e verifica o índice de pesquisa.
Página mínima
---
export const prerender = true
import DocsLayout from "../../layouts/DocsLayout.astro"
import DocCode from "../../components/docs/DocCode.astro"
const toc = [{ title: "Overview", href: "#overview" }]
---
<DocsLayout title="Example" subtitle="One line." description="For search engines." toc={toc}>
  <section id="overview" class="doc-section">
    <h2>Overview</h2>
    <p>Text with an escaped brace: &#123;</p>
    <DocCode language="bash" title="Run">{`bun run typecheck`}</DocCode>
  </section>
</DocsLayout>

Verifique todos os fatos

Documente apenas o comportamento que você pode apontar no código e execute exemplos antes de colar sua saída. A referência da API é gerada; páginas escritas à mão não são.

3Visualizações D

SuporteTipoSignificado
title, captioncordaTítulo e explicação sob a tela
solidsvariedadebox (size), extrude (profile, holes, height) ou cylinder (radius, height), cada um com opcional at, color, opacity
pathsvariedadePolilinhas com points como [x, y, z], rapid (tracejado) e color
heightnúmeroAltura da tela em pixels
animatebooleanoDesenhe caminhos progressivamente e mostre um botão de repetição

O componente usa three.js com Z up, é montado somente quando rolado para visualização e mostra um substituto de texto sem WebGL. Alimente-o com resultados reais, como movimentos do kernel, em vez de coordenadas desenhadas à mão.

Em 3D

Onde fica o site de documentos: a web depende apenas do banco de dados 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.