À propos du projet
Launchstack est un moteur TypeScript pour créer des applications natives de l'IA, livré avec une application de référence Next.js qui montre comment les pièces s'assemblent. Le moteur couvre l'ingestion, l'OCR, le RAG, un graphe de connaissances, les abstractions LLM et les tâches d'arrière-plan, organisés en paquets superposés derrière des ports typés.
Organisation du dépôt
Le dépôt est un espace de travail pnpm, pas une application en soi ; les commandes à la racine se limitent aux scripts lint, typecheck, format et Changesets, et les commandes de paquet doivent être ciblées avec --filter. apps/web est l'hôte Next.js (UI, authentification, acceptation des commandes, lectures synchrones). apps/worker est le coordinateur durable des workflows qui consomme la boîte d'envoi d'ingestion et héberge les tâches d'arrière-plan. apps/landing est le site marketing public séparé et ne fait pas partie des déploiements auto-hébergés. Le moteur réside dans packages/protocol, evidence, application et adapters, avec packages/core comme façade de compatibilité au-dessus d'eux, et packages/features contenant les fonctionnalités verticales. services/ contient des services de calcul hors espace de travail (un convertisseur de documents Node, plus des services Python de transcription et d'édition de documents).
Architecture
Core expose des ports que l'hôte câble ; les fonctionnalités dépendent uniquement de ces ports et n'accèdent jamais à l'application ou au framework. L'hôte possède l'environnement, l'authentification et le routage et implémente des ports tels que le stockage (S3), la répartition des tâches (Inngest), les crédits et le RAG. createEngine(config) ouvre le pool de base de données et enregistre les slots ; plusieurs sous-systèmes sont configurés via des appels d'enregistrement séparés. Les slots sont lus paresseusement, ils doivent donc être définis avant la première utilisation. L'état du moteur est stocké sur globalThis, ce qui protège contre la réévaluation HMR de Next.js mais implique un moteur par processus. ESLint déclare les frontières d'import core/features/host et la CI les applique ; les paquets du moteur ne lisent aucun process.env.
Exécution
Les prérequis sont Node 20+ et pnpm 10.15.1. Docker Compose est la voie recommandée, avec une pile lite et un profil OCR qui ajoute Docling ; les cibles make couvrent up, logs, down et down-clean avec suppression des volumes. Sans Docker, il faut Postgres avec l'extension pgvector, puis exécuter les migrations, un seed optionnel, le serveur de développement Next.js, le worker, et éventuellement l'interface de développement Inngest. Le serveur de développement web accepte les téléversements mais ne traite rien, donc le worker doit tourner à côté, sinon les documents restent en file d'attente. DATABASE_URL et BETTER_AUTH_SECRET sont requis pour démarrer.
Configuration du chat
Le chat atteint un point de terminaison unique implémentant le protocole chat-completions d'OpenAI, par défaut le point de terminaison compatible OpenAI de Google Gemini via GOOGLE_AI_API_KEY. D'autres fournisseurs sont atteints en définissant CHAT_BASE_URL et éventuellement CHAT_API_KEY ; les variables par fournisseur telles que OPENAI_API_KEY ou OLLAMA_BASE_URL ne configurent pas le chat. Le modèle qui gère le chat général, l'extraction, le raisonnement et les images est déclaré dans une configuration YAML avec des presets et des routes ; le comportement n'est pas déduit des identifiants de modèle, et les routes spécialisées échouent en mode fermé. La configuration du chat est indépendante des embeddings, de l'OCR, de la transcription, du reranking et de la synthèse vocale.
Capacités de l'application de référence
L'application démontre une authentification first-party avec des rôles par espace de travail, un accès au niveau des dossiers, des invitations et un journal d'audit ; le téléversement de documents avec OCR optionnel via plusieurs fournisseurs ; la récupération sémantique PostgreSQL plus pgvector ; un chat IA avec garde-fous incluant un filtre PII, l'ancrage et une porte de confiance ; l'analyse prédictive de documents (huit types de documents définis, le validateur de requête acceptant actuellement contract, financial, technical, compliance et general) ; un pipeline marketing pour Reddit, X, LinkedIn et Bluesky ; des tâches d'arrière-plan soutenues par Inngest ; et un traçage LangSmith optionnel.
Sources d'ingestion
Le pipeline lit les exports de Notion, Google Docs/Sheets, Google Drive Takeout, Slack et GitHub sans OAuth, aux côtés d'adaptateurs de première classe pour PDF, DOCX, PPTX, XLSX, Markdown, HTML, texte et images. Une mise en garde documentée : ZipAdapter ignore les adaptateurs JSON et image pour les entrées à l'intérieur d'une archive, donc un export Slack livré sous forme de ZIP de JSON ne produit aucune page.
Auto-hébergement et statut
Les déploiements sont auto-hébergés sauf si DEPLOYMENT_MODE=cloud ; l'usage est enregistré mais non limité, aucune télémétrie ni ressource CDN n'est chargée, et la première inscription devient propriétaire de l'espace de travail. Les paquets du moteur ne sont pas encore publiés sur npm ; jusqu'à la première version Changesets, le moteur est consommé en exécutant le dépôt. Le projet est sous licence Apache-2.0 et accueille les contributions, avec une issue par PR et Changesets pour les modifications du moteur.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.