fix: brainstorm infinite loop, ghost cursor, embedding ::vector cast, semantic search, billing stats, usage meter accordion
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 5s

- Fix useBrainstormSocket: stable guestId via useRef, remove setState in cleanup
- Fix GhostCursor: direct DOM manipulation via refs, no useState re-renders
- Fix all SQL embedding queries: add ::vector cast on text columns
- Fix embedding truncation to 15000 chars (under 8192 token limit)
- Fix NoteEmbedding INSERT: remove non-existent updatedAt column
- Fix billing page: show all quota stats in grid instead of single metric
- Fix usage meter: accordion expand/collapse, per-feature detail
- Fix semantic search: rebuild 103 note embeddings, ::vector cast on vectorSearch
- Fix brainstorm expand/manual-idea/create: ::vector cast on embedding SQL
This commit is contained in:
Antigravity
2026-05-16 18:50:34 +00:00
parent ee8e2bda59
commit 8c7ca69640
117 changed files with 11732 additions and 834 deletions

View File

@@ -463,8 +463,8 @@
"undoAI": "Annuler la transformation IA",
"undoApplied": "Texte original restauré",
"minWordsError": "La note doit contenir au moins 5 mots pour utiliser les actions IA.",
"wordCountMin": "Veuillez sélectionner au moins {min} mots pour reformuler ({current} mots sélectionnés)",
"wordCountMax": "Veuillez sélectionner au maximum {max} mots pour reformuler ({current} mots sélectionnés)",
"wordCountMin": "Minimum {min} mots requis ({current} actuels)",
"wordCountMax": "Maximum {max} mots autorisés ({current} actuels)",
"genericError": "Erreur IA",
"actionError": "Erreur lors de l'action IA",
"appliedToNote": "Appliqué à la note",
@@ -630,7 +630,9 @@
"presentationReadyBadge": "Présentation prête",
"openInLabTitle": "Ouvrir dans le Lab",
"inlineSummaryMarkdown": "**Résumé :**",
"networkErrorShort": "Erreur réseau."
"networkErrorShort": "Erreur réseau.",
"featureLocked": "Cette fonctionnalité nécessite le plan PRO ou supérieur.",
"quotaExceeded": "Limite mensuelle atteinte. Se réinitialise le mois prochain."
},
"titleSuggestions": {
"available": "Suggestions de titre",
@@ -887,10 +889,11 @@
"showRecentNotes": "Afficher la section Récent",
"showRecentNotesDescription": "Afficher les notes récentes (7 derniers jours) sur la page principale",
"recentNotesUpdateSuccess": "Paramètre des notes récentes mis à jour avec succès",
"recentNotesUpdateFailed": "Échec de la mise à jour du paramètre des notes récentes"
"recentNotesUpdateFailed": "Échec de la mise à jour du paramètre des notes récentes",
"tab": "Profil"
},
"aiSettings": {
"title": "Paramètres IA",
"title": "IA",
"description": "Configurez vos fonctionnalités IA et préférences",
"features": "Fonctionnalités IA",
"provider": "Fournisseur IA",
@@ -917,7 +920,8 @@
"autoLabeling": "Suggestion des labels",
"autoLabelingDesc": "Suggère et applique des étiquettes automatiquement à vos notes",
"noteHistory": "Historique des notes",
"noteHistoryDesc": "Active les snapshots de versions et la restauration depuis History"
"noteHistoryDesc": "Active les snapshots de versions et la restauration depuis History",
"titleSuggestions": "Suggestion de titres"
},
"general": {
"loading": "Chargement...",
@@ -1179,6 +1183,8 @@
"deleteFailed": "Échec de la suppression",
"roleUpdateSuccess": "Rôle de l'utilisateur mis à jour à {role}",
"roleUpdateFailed": "Échec de la mise à jour du rôle",
"tierUpdateSuccess": "Abonnement mis à jour à {tier}",
"tierUpdateFailed": "Échec de la mise à jour de l'abonnement",
"demote": "Rétrograder en utilisateur",
"promote": "Promouvoir en admin",
"confirmDelete": "Êtes-vous sûr ? Cette action est irréversible.",
@@ -1186,6 +1192,7 @@
"name": "Nom",
"email": "Courriel",
"role": "Rôle",
"subscription": "Abonnement",
"createdAt": "Créé le",
"actions": "Actions"
},
@@ -1323,7 +1330,8 @@
"documentation": "Documentation",
"reportIssues": "Signaler des problèmes",
"feedback": "Commentaires"
}
},
"tab": "À propos"
},
"support": {
"title": "Supporter le développement de Memento",
@@ -1377,7 +1385,7 @@
"loading": "Chargement..."
},
"dataManagement": {
"title": "Gestion des données",
"title": "Données",
"toolsDescription": "Outils pour maintenir la santé de votre base de données",
"exporting": "Exportation...",
"importing": "Importation...",
@@ -1439,7 +1447,8 @@
"fontSystem": "Police système par défaut",
"fontInterDefault": "Inter (défaut)",
"fontPlayfairDisplay": "Playfair Display",
"fontJetBrainsMono": "JetBrains Mono"
"fontJetBrainsMono": "JetBrains Mono",
"tab": "Apparence"
},
"usageMeter": {
"packName": "Pack découverte IA",
@@ -1458,10 +1467,15 @@
"proChat": "100 messages de chat / mois",
"later": "Plus tard",
"upgradePricing": "Passer à Pro",
"addApiKey": "Utiliser votre propre clé API (BYOK)"
"addApiKey": "Utiliser votre propre clé API (BYOK)",
"featureReformulate": "Reformulations",
"featureChat": "Messages IA",
"featureBrainstormCreate": "Créations brainstorm",
"featureBrainstormExpand": "Extensions brainstorm",
"featureBrainstormEnrich": "Enrichissements brainstorm"
},
"generalSettings": {
"title": "Paramètres généraux",
"title": "Généraux",
"description": "Paramètres généraux de l'application"
},
"toast": {
@@ -1647,7 +1661,7 @@
"collapse": "Réduire"
},
"mcpSettings": {
"title": "Paramètres MCP",
"title": "MCP",
"description": "Gérez vos clés API et configurez les outils externes",
"whatIsMcp": {
"title": "Qu'est-ce que MCP ?",
@@ -2331,6 +2345,216 @@
"checkoutSuccessBody": "Bienvenue sur {tier}. Vos fonctionnalités sont maintenant débloquées.",
"subscriptionType": "subscriptionType",
"renewalDate": "renewalDate",
"noRenewalDate": "—"
"noRenewalDate": "—",
"tab": "Facturation",
"currentUsage": "Utilisation actuelle",
"currentPeriod": "Période en cours",
"aiCredits": "Crédits IA",
"used": "utilisés",
"billing": "Facturation",
"renewal": "Renouvellement",
"paidPlanDesc": "Votre abonnement se renouvelle automatiquement.",
"businessDescription": "Pour les équipes et chefs de produit."
},
"landing": {
"nav": {
"features": "Fonctionnalités",
"agents": "Agents IA",
"brainstorm": "Brainstorm",
"pricing": "Tarifs",
"tech": "Architecture",
"login": "Se connecter",
"cta": "Commencez"
},
"hero": {
"badge": "Augmenté par l'Intelligence Artificielle",
"title1": "Votre second cerveau,",
"title2": "enfin amplifié.",
"subtitle": "Momento n'est pas qu'une simple application de notes. C'est un écosystème intelligent qui connecte, analyse et développe vos idées en temps réel grâce à 6 types d'agents IA et une recherche sémantique de pointe.",
"cta": "S'inscrire maintenant",
"secondary": "Voir les fonctionnalités",
"memoryEcho": "Memory Echo",
"memoryEchoText": "\"Connexion détectée avec votre projet de design durable de Mars 2024...\"",
"brainstormLive": "Brainstorm Live",
"ideasGenerated": "+12 idées générées"
},
"features": {
"label": "Capacités IA",
"title": "Une intelligence fluide,",
"title2": "intégrée à chaque mot.",
"desc": "Momento orchestre vos idées grâce à une architecture multi-fournisseurs.",
"f1Title": "Recherche Sémantique",
"f1Desc": "Ne cherchez plus par mots-clés. Trouvez par concept. Notre moteur hybride Vector + FTS comprend l'intention derrière vos notes.",
"f2Title": "Chat RAG Contextuel",
"f2Desc": "Discutez avec votre savoir. Nos agents lisent vos notes, explorent le web et analysent vos documents pour répondre avec précision.",
"f3Title": "Écriture Augmentée",
"f3Desc": "Reformulation, suggestions de titres, tagging automatique et résumés. L'IA travaille en arrière-plan pour structurer votre pensée."
},
"agents": {
"label": "Agents Spécialisés",
"title": "Déléguez le travail complexe.",
"desc": "6 types d'agents IA autonomes pour automatiser vos recherches, vos résumés et vos présentations.",
"scraper": {
"title": "Scraper",
"desc": "Scrape des URLs, parse les flux RSS et synthétise l'info avec placement d'images intelligent."
},
"researcher": {
"title": "Researcher",
"desc": "Génère des requêtes complexes, explore les sources web et rédige des notes de recherche structurées."
},
"slideGen": {
"title": "Slide Gen",
"desc": "Transforme vos notes en présentations PowerPoint professionnelles ou Slides HTML Interactives."
},
"monitor": {
"title": "Monitor",
"desc": "Analyse continuellement vos carnets pour détecter les tendances et les nouveaux insights."
},
"diagramGen": {
"title": "Diagram Gen",
"desc": "Convertit vos idées en diagrammes Excalidraw fluides (Mindmaps, Flowcharts) avec auto-layout."
},
"custom": {
"title": "Custom",
"desc": "Définissez vos propres agents avec des rôles et des sources de données spécifiques."
}
},
"brainstorm": {
"label": "Vagues de Pensée",
"title": "Brainstorming radial en temps réel.",
"waveGeneration": {
"title": "Génération par Vagues",
"desc": "Variations, Analogies, puis Disruptions. L'IA pousse votre concept initial dans ses retranchements."
},
"collaboration": {
"title": "Collaboration Native",
"desc": "Curseurs fantômes IA, avatars synchronisés et déplacement de nœuds en temps réel."
},
"export": {
"title": "Export Sémantique",
"desc": "Convertissez tout votre brainstorm en notes structurées d'un seul clic."
},
"disruptionLabel": "DISRUPTION",
"disruptionText": "Architecture Modulaire 2.0",
"analogyLabel": "ANALOGIE",
"analogyText": "Le cycle des marées"
},
"tech": {
"label": "Architecture & Fournisseurs",
"title": "Connectez votre propre intelligence.",
"tags": {
"title": "Tags",
"desc": "Indépendamment configurable avec n'importe quel modèle."
},
"embeddings": {
"title": "Embeddings",
"desc": "Indépendamment configurable avec n'importe quel modèle."
},
"chatRag": {
"title": "Chat RAG",
"desc": "Indépendamment configurable avec n'importe quel modèle."
}
},
"pricing": {
"label": "Plans & Tarification",
"title": "Choisissez votre niveau d'amplification.",
"desc": "Des options flexibles pour les esprits créatifs, de l'usage individuel aux grandes organisations.",
"monthly": "Mensuel",
"annual": "Annuel",
"perMonth": "/mois",
"perMonthAnnual": "/mois, facturé annuellement",
"perUser": "+ 3,90€/user",
"perUserAnnual": "+ 2,90€/user, facturé annuellement",
"popular": "Le plus populaire",
"basic": {
"name": "Basic",
"desc": "Pour découvrir la magie de Momento.",
"cta": "Commencer",
"feature0": "100 Notes max",
"feature1": "3 Carnets",
"feature2": "50 crédits IA (Lifetime)",
"feature3": "Recherche sémantique",
"feature4": "Historique 7 jours"
},
"pro": {
"name": "Pro",
"desc": "Pour les consultants et créateurs exigeants.",
"cta": "Passer Pro",
"feature0": "Notes illimitées",
"feature1": "BYOK (OpenAI/Anthropic)",
"feature2": "200 recherches sémantiques",
"feature3": "Agents (12 runs/mois)",
"feature4": "Historique 30 jours",
"feature5": "Support Email"
},
"business": {
"name": "Business",
"desc": "Pour les équipes et chefs de produit.",
"cta": "Choisir Business",
"feature0": "10 Collaborateurs inclus",
"feature1": "BYOK (13 fournisseurs)",
"feature2": "1000 recherches sémantiques",
"feature3": "Agents (60 runs/mois)",
"feature4": "Brainstorm illimité",
"feature5": "Accès API"
},
"enterprise": {
"name": "Enterprise",
"desc": "Mémoire organisationnelle sécurisée.",
"cta": "Contacter Ventes",
"feature0": "Tout Business",
"feature1": "Agents illimités",
"feature2": "SSO / SAML",
"feature3": "Audit Logs & SLA",
"feature4": "Support Dédié",
"feature5": "Onboarding Live"
}
},
"byok": {
"label": "Technologie Cloud Ouverte",
"title": "La stratégie BYOK",
"desc": "Vous possédez déjà des clés API OpenAI, Anthropic ou Google ? Connectez-les directement à Momento. Utilisez l'IA sans limites de crédits imposées, en payant uniquement ce que vous consommez chez votre fournisseur favori.",
"noLockin": "Pas de lock-in",
"noLockinDesc": "Changez de fournisseur en 1 clic.",
"cost": "Coûts optimisés",
"costDesc": "Payez le prix direct API.",
"configLabel": "Config Multi-Fournisseurs"
},
"cta": {
"title1": "Prêt à libérer votre",
"title2": "plein potentiel ?",
"desc": "Rejoignez des milliers de chercheurs, designers et penseurs qui utilisent déjà Momento pour construire leur futur.",
"button": "Lancer Momento"
},
"footer": {
"desc": "Le second cerveau amplifié par l'IA. Pensé pour les esprits créatifs.",
"product": {
"title": "Produit",
"link0": "Changelog",
"link1": "Documentation",
"link2": "Roadmap",
"link0Href": "#",
"link1Href": "#",
"link2Href": "#"
},
"community": {
"title": "Communauté",
"link0": "Discord",
"link1": "Twitter / X",
"link2": "LinkedIn",
"link0Href": "#",
"link1Href": "#",
"link2Href": "#"
},
"legal": {
"title": "Légal",
"link0": "Politique de confidentialité",
"link1": "Conditions d'utilisation",
"link2": "Cookies",
"link0Href": "#",
"link1Href": "#",
"link2Href": "#"
}
}
}
}
}