feat(insights): fix DBSCAN, Persian embeddings crash, D3 physics layouts, and D3 node not found runtime error
Some checks failed
CI / Lint, Test & Build (push) Failing after 1m7s
CI / Deploy production (on server) (push) Has been skipped

This commit is contained in:
Antigravity
2026-05-24 18:57:33 +00:00
parent e2672cd2c2
commit e881004c77
63 changed files with 5729 additions and 563 deletions

View File

@@ -85,7 +85,8 @@
"richtext": "Rich Text",
"markdown": "Markdown",
"text": "Plain text",
"checklist": "Checklist"
"checklist": "Checklist",
"clip": "Web clip"
},
"listItem": "List item",
"addListItem": "+ List item",
@@ -861,9 +862,47 @@
"brainstormInvite": "Brainstorm",
"brainstormJoined": "Brainstorm",
"systemNotification": "System",
"clipSaved": "Web clip saved",
"downloadFailed": "Download failed",
"brainstormShared": "Brainstorm shared"
},
"clipper": {
"webClipper": "Web Clipper",
"connected": "Connected",
"destinationNotebook": "Destination notebook",
"selectNotebook": "Select a notebook",
"activePage": "Active page",
"selectionDetected": "Selection detected",
"ignore": "ignore",
"selectionHint": "Tip: highlight text on the page to clip a precise selection as a note.",
"clipSelection": "Clip selection",
"clipPage": "Clip this page",
"analyzingSource": "Analyzing source",
"processing": "Processing…",
"processingDetail": "Generating tags, semantic summary and embeddings.",
"successBadge": "Success",
"sentToNotebook": "Note saved to notebook",
"viewInMomento": "View in Momento",
"clipAnother": "Clip another page",
"captureFailed": "Capture failed",
"genericError": "Something went wrong while sending to your instance.",
"retry": "Retry",
"footer": "Momento Companion v2.1.2 · Secured HTTPS TLS 1.3",
"quitSimulator": "Close simulator",
"simulatorBadge": "Capture simulator",
"extensionActive": "Extension active on this page",
"publishedOn": "Published on {domain}",
"realtimeCapture": "Date: live capture",
"selectTextHint": "Select text below to clip",
"evalTipTitle": "Try it:",
"evalTipBody": "Highlight any text in the article below to activate the Selection state in the extension. You can also click a paragraph to simulate it.",
"clickParagraph": "Click to select this paragraph",
"selectionSaved": "Selection saved ({count} words)",
"clearSelection": "Clear selection",
"toastTitle": "Clipped note —",
"view": "View",
"simulatedClipper": "Clipper simulator"
},
"nav": {
"home": "Home",
"notes": "Notes",
@@ -880,6 +919,9 @@
"trash": "Trash",
"support": "Support Memento ☕",
"reminders": "Reminders",
"graphView": "Link map",
"insights": "Semantic themes",
"revision": "Review",
"userManagement": "User Management",
"accountSettings": "Account Settings",
"manageAISettings": "Manage AI Settings",
@@ -1745,6 +1787,8 @@
"imagesLabel": "Images",
"notebookLabel": "Notebook",
"typeLabel": "Type",
"sourceWebLabel": "Web source",
"openSource": "Open original page",
"createdLabel": "Created",
"modifiedLabel": "Updated",
"labelsSection": "Labels",
@@ -2847,11 +2891,23 @@
"title": "Graph View",
"notesCount": "{count} notes",
"connectionsCount": "{count} connections",
"visibleConnections": "{count} visible",
"globalView": "Fit to View",
"searchPlaceholder": "Filter...",
"noNotesFound": "No notes found",
"notebooks": "Notebooks",
"resetFilter": "Reset",
"resetFocus": "Full graph",
"exploreFromNode": "Explore from this note",
"linkFilters": "Link filters",
"semanticThreshold": "Semantic threshold",
"edgeTypes": {
"explicitLink": "Note links (manual)",
"semanticEcho": "Memory Echo (AI)",
"titleMention": "Title mention",
"sharedLabel": "Shared tags",
"jaccard": "Keyword similarity"
},
"relationshipTypes": "Relationship Types",
"connections": "{count} connection",
"connectionsPlural": "{count} connections",
@@ -2866,6 +2922,82 @@
"updated": "Updated on"
}
},
"insightsView": {
"title": "Semantic Insights",
"subtitle": "Discover the hidden architecture of your knowledge",
"resync": "Re-sync network",
"mapping": "Mapping…",
"loading": "Loading your notes…",
"mappingTitle": "Mapping your knowledge…",
"mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.",
"analyzeNow": "Start semantic analysis",
"emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).",
"embeddingsHint": "Only {indexed} of {total} notes are indexed for AI. Analysis will prepare them first (this may take several minutes).",
"vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.",
"openGraphMap": "Open link map",
"analysisFailed": "Analysis failed. Check your AI settings or try again.",
"analysisSuccess": "Analysis complete: {count} themes detected.",
"analysisNoClusters": "No themes detected yet.",
"staleResults": "Showing results from the last analysis. Many notes changed since then — click “Resynchronize network” to refresh.",
"semanticGraphLegend": "Detected themes overview (not the link map)",
"fitGraphView": "Fit view",
"graphPreviewHint": "Theme overview: the number is how many notes belong here. Hover a dot for the title, click to open. Full list on the right.",
"graphMoreNotes": "+{count} more in this theme",
"graphNotesLabel": "notes",
"clusterFallback": "Theme {index}",
"unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).",
"emptyTitle": "Discover your knowledge clusters",
"emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections",
"stats": {
"clusters": "Clusters",
"bridgeNotes": "Bridge notes"
},
"clusters": {
"title": "Semantic clusters",
"notesCount": "{count} notes",
"centralNotes": "Central notes",
"emptyCluster": "No notes in this cluster"
},
"bridgeNotes": {
"title": "Powerful bridge notes",
"score": "Score: {score}%",
"empty": "No significant bridge notes yet. Deepen your research to find new connections."
},
"suggestions": {
"title": "Missing links (AI generated)",
"bridging": "Bridging {clusterA} & {clusterB}",
"emptyTitle": "No connection suggestions yet",
"emptyDescription": "All your clusters may already be connected!",
"createNote": "Create bridge note"
},
"unknownNote": "Untitled note",
"viewSplit": "Split",
"viewGraph": "Graph",
"viewDashboard": "Dashboard",
"isolatedClusters": {
"title": "Isolated clusters ({count})",
"badge": "Not connected",
"empty": "All your semantic clusters are interconnected!"
},
"focusCluster": {
"title": "Cluster Focus Active",
"description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:",
"close": "Close"
},
"badgeDominant": "Dominant",
"bridgeCount": "bridge(s)",
"echoTitle": "You keep returning to this idea",
"tipClusters": "AI grouped your notes by semantic affinity — regardless of which notebook they're in. Each theme represents a subject your mind keeps returning to.",
"tipClustersAction": "Click a theme to see its notes. Click a note to open it.",
"tipBridgeNotes": "These notes speak to two different themes at once. They reveal where your thinking crosses boundaries — often where the most original ideas hide.",
"tipBridgeNotesAction": "Click a note to open it and understand the connection.",
"tipEcho": "Memory Echo detects two notes written at very different times that cover the same idea. Your mind revisited a thought without realising it.",
"tipEchoAction": "Two notes, same idea, different moments. Click to explore.",
"tipSuggestions": "These themes have no note linking them yet. AI proposes a starting idea. Click 'Create bridge note' to write it and open it in the editor.",
"tipSuggestionsAction": "Click 'Create bridge note' to write the note and open it immediately.",
"tipIsolated": "These themes are isolated: no note connects them to the others. Maybe you're exploring a fragile idea? One synthesis note would be enough to create the link.",
"tipIsolatedAction": "These themes have no note connecting them to the rest of your thinking."
},
"consent": {
"banner": {
"title": "Cookie Preferences",

View File

@@ -714,24 +714,54 @@
"error": "خطا در بارگذاری ارتباطات"
},
"comparison": {
"title": "💡 مقایسه یادداشت‌ها",
"similarityInfo": "این یادداشت‌ها با {similarity}% شباهت مرتبط هستند",
"highSimilarityInsight": "این یادداشت‌ها در مورد یک موضوع با درجه بالایی از شباهت صحبت می‌کنند. می‌توانند ادغام یا تلفیق شوند.",
"title": "مقایسه کنار هم",
"subtitle": "یادداشت‌های مرتبط را مرور کنید تا تصمیم بگیرید چه چیزی را نگه دارید یا ادغام کنید.",
"similarityInfo": "این یادداشت‌ها با {similarity}٪ شباهت به هم مرتبط‌اند",
"highSimilarityInsight": "این یادداشت‌ها دربارهٔ یک موضوع با شباهت بالا هستند. می‌توان آن‌ها را ادغام یا یکپارچه کرد.",
"stayOnCurrentNote": "در یادداشت فعلی می‌مانید. این پنجره را ببندید تا به نوشتن ادامه دهید.",
"untitled": "بدون عنوان",
"clickToView": "برای مشاهده یادداشت کلیک کنید",
"helpfulQuestion": "این مقایسه مفید است؟",
"helpfulQuestion": "آیا این مقایسه مفید بود؟",
"helpful": "مفید",
"notHelpful": "غیرمفید"
},
"preview": {
"subtitle": "پیش‌نمایش یادداشت مرتبط — از یادداشتی که ویرایش می‌کنید خارج نمی‌شوید.",
"loadError": "بارگذاری محتوای این یادداشت ممکن نشد."
},
"editorSection": {
"title": "یادداشت‌های مرتبط ({count})",
"loading": "در حال بارگذاری...",
"title": "یادداشت‌های مرتبط ({count})",
"loading": "در حال بارگذاری",
"view": "مشاهده",
"viewLinkedNote": "مشاهده یادداشت مرتبط",
"compare": "مقایسه",
"merge": "ادغام",
"compareAll": "مقایسه همه",
"mergeAll": "ادغام همه",
"close": "بستن"
"close": "بستن",
"backToNote": "بازگشت به یادداشت من",
"openInEditor": "باز کردن در ویرایشگر",
"badgeLabel": "Memory Echo",
"affinityBadge": "{percentage}٪ شباهت معنایی",
"intro": "مومنتو یادداشت دیگری دربارهٔ همین موضوع پیدا کرده است. آن را ببینید، نقل‌قولی درج کنید یا ادغام کنید — بدون ترک این یادداشت.",
"detectedIn": "بخش یافت‌شده در: {title}",
"helpToggle": "چطور کار می‌کند؟",
"helpTitle": "با این ارتباط چه کار می‌توانید بکنید؟",
"helpView": "یادداشت دیگر را در یک پنجره نشان می‌دهد. در یادداشت فعلی می‌مانید.",
"helpCite": "بخشی از یادداشت دیگر را اینجا با لینک به منبع درج می‌کند.",
"helpCompare": "هر دو یادداشت را کنار هم در یک پنجره نشان می‌دهد.",
"helpMerge": "محتوای هر دو یادداشت را در یک یادداشت ترکیب می‌کند.",
"embedPassage": "نقل‌قول",
"embedding": "در حال درج…",
"embedSuccess": "نقل‌قول در یادداشت درج شد",
"citationSuccess": "نقل‌قول با لینک به منبع درج شد",
"embedFallback": "یادداشت منبع را باز کنید، کمی ویرایش کنید و دوباره امتحان کنید.",
"embedFailed": "در حال حاضر درج نقل‌قول ممکن نیست",
"showAll": "مشاهده همه ارتباطات ({count})",
"hideAll": "پنهان کردن ارتباطات اضافی ({count})",
"retroTitle": "یادداشت‌هایی که این محتوا را نقل می‌کنند",
"retroDescription": "این بخش در {count} یادداشت دیگر نقل شده است:",
"consentRequired": "برای دیدن ارتباطات معنایی این یادداشت، پردازش هوش مصنوعی را در تنظیمات ← هوش مصنوعی فعال کنید."
},
"fusion": {
"title": "🔗 ادغام هوشمند",

View File

@@ -85,7 +85,8 @@
"richtext": "Texte enrichi",
"markdown": "Markdown",
"text": "Texte brut",
"checklist": "Liste de tâches"
"checklist": "Liste de tâches",
"clip": "Clip web"
},
"listItem": "Élément de liste",
"addListItem": "+ Élément de liste",
@@ -867,9 +868,47 @@
"brainstormInvite": "Brainstorm",
"brainstormJoined": "Brainstorm",
"systemNotification": "Système",
"clipSaved": "Clip web enregistré",
"downloadFailed": "Échec du téléchargement",
"brainstormShared": "Brainstorm partagé"
},
"clipper": {
"webClipper": "Web Clipper",
"connected": "Connecté",
"destinationNotebook": "Carnet de destination",
"selectNotebook": "Sélectionner un carnet",
"activePage": "Page active",
"selectionDetected": "Sélection détectée",
"ignore": "ignorer",
"selectionHint": "Astuce : surlignez du texte à l'écran pour clipper une sélection précise de la page en tant que note.",
"clipSelection": "Clipper la sélection",
"clipPage": "Clipper cette page",
"analyzingSource": "Analyse de la source",
"processing": "Traitement en cours…",
"processingDetail": "Génération automatique des tags, résumé sémantique et calcul des embeddings en cours.",
"successBadge": "Traitement réussi",
"sentToNotebook": "Note envoyée dans le carnet",
"viewInMomento": "Voir dans Momento",
"clipAnother": "Clipper une autre page",
"captureFailed": "Échec de la capture",
"genericError": "Une erreur s'est produite lors de la transmission à votre instance.",
"retry": "Réessayer",
"footer": "Momento Companion v2.1.2 · Sécurisé HTTPS TLS 1.3",
"quitSimulator": "Quitter le simulateur",
"simulatorBadge": "Simulateur de capture",
"extensionActive": "Extension active sur cette page",
"publishedOn": "Publié sur {domain}",
"realtimeCapture": "Date : capture temps réel",
"selectTextHint": "Sélectionnez du texte ci-dessous pour le clipper",
"evalTipTitle": "Piste d'évaluation :",
"evalTipBody": "Survolez et surlignez n'importe quel texte dans l'article ci-dessous pour activer l'état Sélection active dans l'extension. Vous pouvez aussi cliquer sur un paragraphe pour le simuler.",
"clickParagraph": "Cliquer pour sélectionner ce paragraphe",
"selectionSaved": "Sélection enregistrée ({count} mots)",
"clearSelection": "Effacer la sélection",
"toastTitle": "Note clippée —",
"view": "Voir",
"simulatedClipper": "Clipper simulé"
},
"nav": {
"home": "Accueil",
"notes": "Notes",
@@ -886,6 +925,9 @@
"trash": "Corbeille",
"support": "Soutenir Memento ☕",
"reminders": "Rappels",
"graphView": "Carte des liens",
"insights": "Thèmes sémantiques",
"revision": "Révisions",
"userManagement": "Gestion des utilisateurs",
"accountSettings": "Paramètres du compte",
"manageAISettings": "Gérer les paramètres IA",
@@ -1751,6 +1793,8 @@
"imagesLabel": "Images",
"notebookLabel": "Carnet",
"typeLabel": "Type",
"sourceWebLabel": "Source web",
"openSource": "Ouvrir la page d'origine",
"createdLabel": "Créée le",
"modifiedLabel": "Modifiée",
"labelsSection": "Étiquettes",
@@ -2851,11 +2895,23 @@
"title": "Vue en graphe",
"notesCount": "{count} notes",
"connectionsCount": "{count} liens",
"visibleConnections": "{count} visibles",
"globalView": "Vue globale",
"searchPlaceholder": "Filtrer...",
"noNotesFound": "Aucune note trouvée",
"notebooks": "Carnets",
"resetFilter": "Réinitialiser",
"resetFocus": "Graphe complet",
"exploreFromNode": "Explorer depuis cette note",
"linkFilters": "Filtres de liens",
"semanticThreshold": "Seuil sémantique",
"edgeTypes": {
"explicitLink": "Liens vers une note (manuel)",
"semanticEcho": "Memory Echo (IA)",
"titleMention": "Mention de titre",
"sharedLabel": "Tags partagés",
"jaccard": "Similarité par mots-clés"
},
"relationshipTypes": "Types de liaisons",
"connections": "{count} liaison",
"connectionsPlural": "{count} liaisons",
@@ -2870,6 +2926,82 @@
"updated": "Mise à jour le"
}
},
"insightsView": {
"title": "Insights sémantiques",
"subtitle": "Découvrez l'architecture cachée de votre savoir",
"resync": "Resynchroniser le réseau",
"mapping": "Cartographie…",
"loading": "Chargement de vos notes…",
"mappingTitle": "Cartographie de votre savoir…",
"mappingHint": "Cela peut prendre une à trois minutes. Vous pouvez continuer à naviguer ; la page se mettra à jour à la fin.",
"analyzeNow": "Lancer l'analyse sémantique",
"emptyNeedMoreNotes": "Ajoutez encore {count} notes pour débloquer le regroupement sémantique (minimum 10).",
"embeddingsHint": "Seulement {indexed} notes sur {total} sont indexées pour lIA. Lanalyse va dabord les préparer (cela peut prendre plusieurs minutes).",
"vsGraphHint": "Ce nest pas la même chose que la « Carte des liens » (icône réseau dans la barre latérale) : ici, lIA regroupe vos notes par thèmes.",
"openGraphMap": "Ouvrir la carte des liens",
"analysisFailed": "Lanalyse a échoué. Vérifiez vos paramètres IA ou réessayez.",
"analysisSuccess": "Analyse terminée : {count} thèmes détectés.",
"analysisNoClusters": "Aucun thème détecté pour l'instant.",
"staleResults": "Résultats affichés depuis la dernière analyse. Beaucoup de notes ont changé depuis — cliquez « Resynchroniser le réseau » pour mettre à jour.",
"semanticGraphLegend": "Aperçu des thèmes détectés (pas la carte des liens)",
"fitGraphView": "Ajuster la vue",
"graphPreviewHint": "Aperçu par thème : le chiffre = nombre de notes. Survolez un point pour le titre, cliquez pour ouvrir. Liste complète à droite.",
"graphMoreNotes": "+{count} autres dans ce thème",
"graphNotesLabel": "notes",
"clusterFallback": "Thème {index}",
"unclusteredNotes": "{count} notes non rattachées à un thème (hors graphe).",
"emptyTitle": "Découvrez vos clusters de connaissance",
"emptyDescription": "Cliquez sur « Resynchroniser le réseau » pour analyser vos notes et révéler des connexions cachées",
"stats": {
"clusters": "Clusters",
"bridgeNotes": "Notes pont"
},
"clusters": {
"title": "Clusters sémantiques",
"notesCount": "{count} notes",
"centralNotes": "Notes centrales",
"emptyCluster": "Aucune note dans ce cluster"
},
"bridgeNotes": {
"title": "Notes pont stratégiques",
"score": "Score : {score} %",
"empty": "Aucune note pont significative pour l'instant. Approfondissez vos recherches pour découvrir de nouvelles connexions."
},
"suggestions": {
"title": "Liens manquants (générés par l'IA)",
"bridging": "Relier {clusterA} et {clusterB}",
"emptyTitle": "Aucune suggestion de connexion",
"emptyDescription": "Vos clusters sont peut-être déjà bien reliés entre eux !",
"createNote": "Créer la note pont"
},
"unknownNote": "Note sans titre",
"viewSplit": "Combiné",
"viewGraph": "Graphe",
"viewDashboard": "Tableau",
"isolatedClusters": {
"title": "Clusters isolés ({count})",
"badge": "Non connecté",
"empty": "Tous les thèmes sémantiques sont liés par au moins un point de passage sémantique !"
},
"focusCluster": {
"title": "Focus Cluster Activé",
"description": "Cet ensemble thématique réunit {count} notes complémentaires. Cliquez sur une note pour y accéder directement :",
"close": "Fermer"
},
"badgeDominant": "Dominant",
"bridgeCount": "pont(s)",
"echoTitle": "Tu reviens sur cette idée",
"tipClusters": "L'IA a regroupé tes notes par affinité sémantique — indépendamment de tes carnets. Chaque thème représente un sujet sur lequel ton esprit revient régulièrement.",
"tipClustersAction": "Clique sur un thème pour voir ses notes. Clique sur une note pour l'ouvrir.",
"tipBridgeNotes": "Ces notes parlent de deux thèmes différents à la fois. Elles montrent où ta pensée traverse des frontières — souvent là où se cachent les idées les plus originales.",
"tipBridgeNotesAction": "Clique sur une note pour l'ouvrir et comprendre le lien.",
"tipEcho": "Le Memory Echo détecte deux notes écrites à des moments très différents mais qui parlent de la même chose. Ton esprit a revisité une idée sans que tu t'en rendes compte.",
"tipEchoAction": "Deux notes, même idée, moments différents. Clique pour explorer.",
"tipSuggestions": "Ces thèmes n'ont pas encore de note qui les relie. L'IA te propose une idée de départ. Clique sur « Créer la note pont » pour la rédiger et l'ouvrir dans l'éditeur.",
"tipSuggestionsAction": "Clique sur « Créer la note pont » pour créer la note et l'ouvrir immédiatement.",
"tipIsolated": "Ces thèmes sont isolés : aucune note ne les relie aux autres. Peut-être explores-tu une idée encore fragile ? Une note de synthèse suffirait à créer le lien.",
"tipIsolatedAction": "Ces thèmes n'ont aucune note qui les relie au reste de ta réflexion."
},
"consent": {
"banner": {
"title": "Préférences de Cookies",