Sobre o projeto

Launchstack é um motor TypeScript para construir aplicações nativas de IA, distribuído juntamente com uma aplicação de referência Next.js que demonstra como as peças se encaixam. O motor abrange ingestão, OCR, RAG, um grafo de conhecimento, abstrações de LLM e tarefas em segundo plano, organizados como pacotes em camadas atrás de portas tipadas. Estrutura do repositório O repositório é um workspace pnpm, não uma aplicação em si; os comandos de nível raiz limitam-se a scripts de lint, typecheck, format e Changesets, e os comandos de pacote devem ser direcionados com --filter. apps/web é o host Next.js (UI, autenticação, aceitação de comandos, leituras síncronas). apps/worker é o coordenador durável de fluxos de trabalho que consome a outbox de ingestão e aloja tarefas em segundo plano. apps/landing é o site de marketing público separado e não faz parte das implementações auto-alojadas. O motor reside em packages/protocol, evidence, application e adapters, com packages/core como fachada de compatibilidade sobre eles, e packages/features a conter funcionalidades verticais. services/ contém serviços de computação fora do workspace (um conversor de documentos Node, mais serviços Python de transcrição e edição de documentos). Arquitetura O Core expõe portas que o host liga; as funcionalidades dependem apenas dessas portas e nunca acedem à aplicação ou ao framework. O host é responsável pelo ambiente, autenticação e encaminhamento e implementa portas como armazenamento (S3), despacho de tarefas (Inngest), créditos e RAG. createEngine(config) abre o pool de base de dados e regista slots; vários subsistemas são configurados através de chamadas de registo separadas. Os slots são lidos de forma preguiçosa, pelo que devem ser definidos antes do primeiro uso. O estado do motor é armazenado em globalThis, o que protege contra a reavaliação do HMR do Next.js, mas significa um motor por processo. O ESLint declara as fronteiras de importação core/features/host e o CI aplica-as; os pacotes do motor não leem process.env. Executá-lo Os requisitos são Node 20+ e pnpm 10.15.1. O Docker Compose é o caminho recomendado, com uma stack lite e um perfil OCR que adiciona Docling; os alvos make cobrem up, logs, down e down-clean com limpeza de volumes. Sem Docker, precisa de Postgres com a extensão pgvector, depois executar migrações, um seed opcional, o servidor de desenvolvimento Next.js, o worker e, opcionalmente, a UI de desenvolvimento do Inngest. O servidor de desenvolvimento web aceita uploads mas não processa nada, pelo que o worker tem de correr ao lado dele ou os documentos ficam em fila. DATABASE_URL e BETTER_AUTH_SECRET são necessários para arrancar. Configuração de chat O chat chega a um único endpoint que implementa o protocolo de chat-completions da OpenAI, com predefinição para o endpoint compatível com OpenAI do Google Gemini via GOOGLE_AI_API_KEY. Outros fornecedores são alcançados definindo CHAT_BASE_URL e, opcionalmente, CHAT_API_KEY; variáveis por fornecedor como OPENAI_API_KEY ou OLLAMA_BASE_URL não configuram o chat. Qual o modelo que trata do chat geral, extração, raciocínio e imagens é declarado num ficheiro de configuração YAML com presets e rotas; o comportamento não é inferido a partir dos ids dos modelos, e as rotas especializadas falham de forma fechada. A configuração de chat é independente de embeddings, OCR, transcrição, reranking e text-to-speech. Capacidades da aplicação de referência A aplicação demonstra autenticação própria com papéis por workspace, acesso ao nível de pastas, convites e um registo de auditoria; upload de documentos com OCR opcional através de vários fornecedores; recuperação semântica com PostgreSQL mais pgvector; chat de IA com guardrails incluindo um filtro de PII, grounding e um portão de confiança; análise preditiva de documentos (oito tipos de documentos definidos, com o validador de pedidos a aceitar atualmente contract, financial, technical, compliance e general); um pipeline de marketing para Reddit, X, LinkedIn e Bluesky; tarefas em segundo plano suportadas pelo Inngest; e tracing opcional com LangSmith. Fontes de ingestão O pipeline lê exportações do Notion, Google Docs/Sheets, Google Drive Takeout, Slack e GitHub sem OAuth, a par de adaptadores de primeira classe para PDF, DOCX, PPTX, XLSX, Markdown, HTML, texto e imagens. Uma ressalva documentada: o ZipAdapter ignora os adaptadores JSON e de imagens para entradas dentro de um arquivo, pelo que uma exportação do Slack enviada como ZIP de JSON não produz páginas. Auto-alojamento e estado As implementações são auto-alojadas a menos que DEPLOYMENT_MODE=cloud; o uso é registado mas não limitado, não são carregados telemetria nem recursos de CDN, e o primeiro registo torna-se o proprietário do workspace. Os pacotes do motor ainda não estão publicados no npm; até à primeira release do Changesets, o motor é consumido executando o repositório. O projeto tem licença Apache-2.0 e aceita contribuições, com um issue por PR e Changesets para alterações ao motor.