feat: add reminders page, BMad skills upgrade, MCP server refactor

- Add reminders page with navigation support
- Upgrade BMad builder module to skills-based architecture
- Refactor MCP server: extract tools and auth into separate modules
- Add connections cache, custom AI provider support
- Update prisma schema and generated client
- Various UI/UX improvements and i18n updates
- Add service worker for PWA support

Made-with: Cursor
This commit is contained in:
Sepehr Ramezani
2026-04-13 21:02:53 +02:00
parent 18ed116e0d
commit fa7e166f3e
3099 changed files with 397228 additions and 14584 deletions

View File

@@ -80,6 +80,17 @@
"first5Values": "5 premières valeurs :",
"generatedTags": "Étiquettes générées :",
"howItWorksTitle": "Fonctionnement des tests",
"tagsGenerationTest": "🏷️ Test de génération d'étiquettes :",
"tagsStep1": "Envoie une note exemple au fournisseur IA",
"tagsStep2": "Demande 3-5 étiquettes pertinentes basées sur le contenu",
"tagsStep3": "Affiche les étiquettes générées avec les scores de confiance",
"tagsStep4": "Mesure le temps de réponse",
"embeddingsTestLabel": "🔍 Test d'embeddings :",
"embeddingsStep1": "Envoie un texte exemple au fournisseur d'embeddings",
"embeddingsStep2": "Génère une représentation vectorielle (liste de nombres)",
"embeddingsStep3": "Affiche les dimensions de l'embedding et des exemples de valeurs",
"embeddingsStep4": "Vérifie que le vecteur est valide et correctement formaté",
"tipContent": "Vous pouvez utiliser différents fournisseurs pour les étiquettes et les embeddings ! Par exemple, utilisez Ollama (gratuit) pour les étiquettes et OpenAI (meilleure qualité) pour les embeddings afin d'optimiser les coûts et les performances.",
"model": "Modèle :",
"provider": "Fournisseur :",
"responseTime": "Temps de réponse : {time}ms",
@@ -89,12 +100,25 @@
"testError": "Erreur de test : {error}",
"testFailed": "Test échoué",
"testPassed": "Test réussi",
"testSuccessToast": "Test {type} réussi !",
"testFailedToast": "Test {type} échoué",
"testingType": "Test de {type} en cours...",
"technicalDetails": "Détails techniques",
"testing": "Test en cours...",
"tipDescription": "Utilisez le panneau de test IA pour diagnostiquer les problèmes de configuration avant de tester.",
"tipTitle": "Astuce :",
"title": "Test des fournisseurs IA",
"vectorDimensions": "dimensions vectorielles"
},
"sidebar": {
"dashboard": "Tableau de bord",
"users": "Utilisateurs",
"aiManagement": "Gestion IA",
"settings": "Paramètres"
},
"metrics": {
"vsLastPeriod": "vs période précédente"
},
"aiTesting": "Test IA",
"security": {
"allowPublicRegistration": "Autoriser l'inscription publique",
@@ -201,7 +225,8 @@
"languageDetected": "Langue détectée",
"notebookSummary": {
"regenerate": "Régénérer le résumé",
"regenerating": "Régénération du résumé..."
"regenerating": "Régénération du résumé...",
"exportPDF": "Exporter en PDF"
},
"original": "Original",
"poweredByAI": "Propulsé par l'IA",
@@ -549,6 +574,7 @@
"connection": "connexion",
"connections": "Connexions",
"connectionsBadge": "{count} connexion{plural}",
"match": "{percentage}% correspondance",
"title": "💡 J'ai remarqué quelque chose...",
"description": "Connexions proactives entre vos notes",
"dailyInsight": "Aperçu quotidien de vos notes",
@@ -608,6 +634,11 @@
"unknownDate": "Date inconnue"
}
},
"notification": {
"shared": "a partagé « {title} »",
"untitled": "Sans titre",
"notifications": "Notifications"
},
"nav": {
"accountSettings": "Paramètres du compte",
"adminDashboard": "Tableau de bord Admin",
@@ -657,12 +688,21 @@
"generating": "Génération du résumé...",
"labels": "Étiquettes :",
"name": "Nom du carnet",
"namePlaceholder": "ex. Stratégie Marketing Q4",
"myNotebook": "Mon carnet",
"saving": "Enregistrement...",
"noLabels": "Aucune étiquette",
"selectColor": "Couleur",
"selectIcon": "Icône",
"summary": "Résumé du carnet",
"summaryDescription": "Générer un résumé alimenté par l'IA de toutes les notes de ce carnet.",
"summaryError": "Erreur lors de la génération du résumé"
"summaryError": "Erreur lors de la génération du résumé",
"pdfTitle": "Résumé — {name}",
"pdfNotesLabel": "Notes :",
"pdfGeneratedOn": "Généré le :",
"confidence": "confiance",
"savingReminder": "Erreur lors de la sauvegarde du rappel",
"removingReminder": "Erreur lors de la suppression du rappel"
},
"notebookSuggestion": {
"description": "Cette note semble appartenir à ce carnet",
@@ -906,6 +946,18 @@
"title": "Paramètres",
"version": "Version"
},
"reminders": {
"title": "Rappels",
"empty": "Aucun rappel",
"emptyDescription": "Ajoutez un rappel à une note pour le retrouver ici.",
"upcoming": "À venir",
"overdue": "En retard",
"done": "Terminés",
"markDone": "Marquer comme terminé",
"markUndone": "Marquer comme non terminé",
"todayAt": "Aujourd'hui à {time}",
"tomorrowAt": "Demain à {time}"
},
"sidebar": {
"archive": "Archives",
"editLabels": "Modifier les étiquettes",