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:
@@ -325,6 +325,7 @@
|
||||
"connections": "Connections",
|
||||
"connection": "connection",
|
||||
"connectionsBadge": "{count} connection{plural}",
|
||||
"match": "{percentage}% match",
|
||||
"fused": "Fused",
|
||||
"clickToView": "Click to view note →",
|
||||
"overlay": {
|
||||
@@ -385,6 +386,11 @@
|
||||
"unknownDate": "Unknown date"
|
||||
}
|
||||
},
|
||||
"notification": {
|
||||
"shared": "shared \"{title}\"",
|
||||
"untitled": "Untitled",
|
||||
"notifications": "Notifications"
|
||||
},
|
||||
"nav": {
|
||||
"home": "Home",
|
||||
"notes": "Notes",
|
||||
@@ -560,11 +566,26 @@
|
||||
"save": "Set reminder",
|
||||
"cancel": "Cancel"
|
||||
},
|
||||
"reminders": {
|
||||
"title": "Reminders",
|
||||
"empty": "No reminders",
|
||||
"emptyDescription": "Add a reminder to a note to find it here.",
|
||||
"upcoming": "Upcoming",
|
||||
"overdue": "Overdue",
|
||||
"done": "Done",
|
||||
"markDone": "Mark as done",
|
||||
"markUndone": "Mark as undone",
|
||||
"todayAt": "Today at {time}",
|
||||
"tomorrowAt": "Tomorrow at {time}"
|
||||
},
|
||||
"notebook": {
|
||||
"create": "Create Notebook",
|
||||
"createNew": "Create New Notebook",
|
||||
"createDescription": "Start a new collection to organize your notes, ideas, and projects efficiently.",
|
||||
"name": "Notebook Name",
|
||||
"namePlaceholder": "e.g. Q4 Marketing Strategy",
|
||||
"myNotebook": "My Notebook",
|
||||
"saving": "Saving...",
|
||||
"selectIcon": "Icon",
|
||||
"selectColor": "Color",
|
||||
"cancel": "Cancel",
|
||||
@@ -579,7 +600,13 @@
|
||||
"generating": "Generating summary...",
|
||||
"summaryError": "Error generating summary",
|
||||
"labels": "Labels:",
|
||||
"noLabels": "No labels"
|
||||
"noLabels": "No labels",
|
||||
"pdfTitle": "Summary — {name}",
|
||||
"pdfNotesLabel": "Notes:",
|
||||
"pdfGeneratedOn": "Generated on:",
|
||||
"confidence": "confidence",
|
||||
"savingReminder": "Failed to save reminder",
|
||||
"removingReminder": "Failed to remove reminder"
|
||||
},
|
||||
"notebookSuggestion": {
|
||||
"title": "Move to {icon} {name}?",
|
||||
@@ -689,12 +716,27 @@
|
||||
"embeddingsTestTitle": "Embeddings Test",
|
||||
"embeddingsTestDescription": "Test the AI provider responsible for semantic search embeddings",
|
||||
"howItWorksTitle": "How Testing Works",
|
||||
"tagsGenerationTest": "🏷️ Tags Generation Test:",
|
||||
"tagsStep1": "Sends a sample note to the AI provider",
|
||||
"tagsStep2": "Requests 3-5 relevant tags based on the content",
|
||||
"tagsStep3": "Displays the generated tags with confidence scores",
|
||||
"tagsStep4": "Measures response time",
|
||||
"embeddingsTestLabel": "🔍 Embeddings Test:",
|
||||
"embeddingsStep1": "Sends a sample text to the embedding provider",
|
||||
"embeddingsStep2": "Generates a vector representation (list of numbers)",
|
||||
"embeddingsStep3": "Displays embedding dimensions and sample values",
|
||||
"embeddingsStep4": "Verifies the vector is valid and properly formatted",
|
||||
"tipContent": "You can use different providers for tags and embeddings! For example, use Ollama (free) for tags and OpenAI (best quality) for embeddings to optimize costs and performance.",
|
||||
"provider": "Provider:",
|
||||
"model": "Model:",
|
||||
"testing": "Testing...",
|
||||
"runTest": "Run Test",
|
||||
"testPassed": "Test Passed",
|
||||
"testFailed": "Test Failed",
|
||||
"testSuccessToast": "{type} Test Successful!",
|
||||
"testFailedToast": "{type} Test Failed",
|
||||
"testingType": "Testing {type}...",
|
||||
"technicalDetails": "Technical details",
|
||||
"responseTime": "Response time: {time}ms",
|
||||
"generatedTags": "Generated Tags:",
|
||||
"embeddingDimensions": "Embedding Dimensions:",
|
||||
@@ -704,6 +746,15 @@
|
||||
"testError": "Test Error: {error}",
|
||||
"tipTitle": "Tip:",
|
||||
"tipDescription": "Use the AI Test Panel to diagnose configuration issues before testing."
|
||||
},
|
||||
"sidebar": {
|
||||
"dashboard": "Dashboard",
|
||||
"users": "Users",
|
||||
"aiManagement": "AI Management",
|
||||
"settings": "Settings"
|
||||
},
|
||||
"metrics": {
|
||||
"vsLastPeriod": "vs last period"
|
||||
}
|
||||
},
|
||||
"about": {
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in New Issue
Block a user