fix(quotas): unifier le décompte IA (BYOK, rollback) et combler les fuites
Centralise la réserve via ai-quota, corrige admin unavailable (-1), brancher les routes sans quota et le host-pays brainstorm, avec usage-meter élargi, noms de clusters, MCP et ajustements dashboard/insights. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1758,7 +1758,11 @@
|
||||
"featureCharts": "AI Charts",
|
||||
"featurePublishEnhance": "AI Publishing",
|
||||
"featureBrainstormExpand": "Brainstorm expansions",
|
||||
"featureBrainstormEnrich": "Brainstorm enrichments"
|
||||
"featureBrainstormEnrich": "Brainstorm enrichments",
|
||||
"featureFlashcards": "AI flashcards",
|
||||
"featureVoice": "Voice transcription",
|
||||
"featureSlides": "Slide generation",
|
||||
"featureDiagrams": "Diagram generation"
|
||||
},
|
||||
"generalSettings": {
|
||||
"title": "General",
|
||||
@@ -2036,6 +2040,8 @@
|
||||
"mcpSettings": {
|
||||
"title": "MCP",
|
||||
"description": "Manage API keys and configure external tools",
|
||||
"tierRequired": "Pro+ only",
|
||||
"upgradeHint": "MCP access (API keys for Cursor, Claude Desktop, etc.) requires a Pro plan or higher. Upgrade in Billing to unlock this feature.",
|
||||
"whatIsMcp": {
|
||||
"title": "What is MCP?",
|
||||
"description": "The Model Context Protocol (MCP) is an open protocol that enables AI models to securely interact with external tools and data sources. With MCP, you can connect tools like Claude Code, Cursor, or N8N to your Memento instance to read, create, and organize your notes programmatically.",
|
||||
@@ -2061,7 +2067,12 @@
|
||||
"lastUsed": "Last used",
|
||||
"never": "Never",
|
||||
"confirmRevoke": "Are you sure you want to revoke this key? Tools using it will lose access.",
|
||||
"confirmDelete": "Are you sure you want to permanently delete this key?"
|
||||
"confirmDelete": "Are you sure you want to permanently delete this key?",
|
||||
"errors": {
|
||||
"generate": "Failed to generate key",
|
||||
"revoke": "Failed to revoke key",
|
||||
"delete": "Failed to delete key"
|
||||
}
|
||||
},
|
||||
"createDialog": {
|
||||
"title": "Generate API Key",
|
||||
@@ -2091,6 +2102,15 @@
|
||||
"title": "N8N",
|
||||
"description": "Use these credentials in your N8N MCP node:"
|
||||
}
|
||||
},
|
||||
"helpBox": {
|
||||
"title": "What is MCP (Model Context Protocol)?",
|
||||
"step1": "MCP is a protocol that allows Memento's AI agents to connect to external tools (databases, APIs, files, etc.).",
|
||||
"step2": "Memento exposes an MCP server with 22 tools — your agents can read/create notes, search your base, manage notebooks, etc.",
|
||||
"step3": "Create an API key here, then configure it in your MCP client (Claude Desktop, Cursor, Continue.dev…) with the server URL.",
|
||||
"step4": "Configuration format: MCP server URL + your key in the Authorization header.",
|
||||
"step4Link": "MCP Documentation",
|
||||
"step5": "Use case: ask Claude Desktop to write a note in Memento, search your notebooks, or create an agent."
|
||||
}
|
||||
},
|
||||
"agents": {
|
||||
@@ -3275,14 +3295,19 @@
|
||||
"checkoutFailed": "Failed to start checkout. Please try again.",
|
||||
"portalFailed": "Failed to open billing portal.",
|
||||
"cancelFailed": "Failed to cancel subscription.",
|
||||
"downloadPdf": "Download PDF"
|
||||
"downloadPdf": "Download PDF",
|
||||
"fetchStatusFailed": "Failed to fetch billing status",
|
||||
"fetchQuotasFailed": "Failed to fetch quotas",
|
||||
"fetchInvoicesFailed": "Failed to load billing history.",
|
||||
"savePercent": "Save ~17%"
|
||||
},
|
||||
"quotaPaywall": {
|
||||
"title": "Monthly limit reached",
|
||||
"description": "You've used all your {feature} credits for this month.",
|
||||
"upgrade": "Upgrade plan",
|
||||
"useOwnKey": "Use your own API key",
|
||||
"later": "Maybe later"
|
||||
"later": "Maybe later",
|
||||
"closingIn": "Closing in {n}s"
|
||||
},
|
||||
"landing": {
|
||||
"nav": {
|
||||
@@ -3548,6 +3573,10 @@
|
||||
"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",
|
||||
"legendFilterPlaceholder": "Filter themes…",
|
||||
"legendShowMore": "+{count} more",
|
||||
"legendShowLess": "Show less",
|
||||
"dashboardFilterPlaceholder": "Filter bridge notes, themes…",
|
||||
"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",
|
||||
@@ -3556,8 +3585,10 @@
|
||||
"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": "Themes",
|
||||
"bridgeNotes": "Bridge notes",
|
||||
"themesSubtitle": "detected themes",
|
||||
"bridgesSubtitle": "cross-theme notes"
|
||||
},
|
||||
"clusters": {
|
||||
"title": "Semantic clusters",
|
||||
@@ -3566,16 +3597,24 @@
|
||||
"emptyCluster": "No notes in this cluster"
|
||||
},
|
||||
"bridgeNotes": {
|
||||
"title": "Powerful bridge notes",
|
||||
"title": "Bridge notes",
|
||||
"score": "Score: {score}%",
|
||||
"affinity": "Affinity {score}%",
|
||||
"scoreHint": "Mean semantic affinity to the two themes this note bridges (cosine similarity).",
|
||||
"moreThemes": "+{count}",
|
||||
"needsResync": "Re-sync the network to refresh bridge pairs.",
|
||||
"empty": "No significant bridge notes yet. Deepen your research to find new connections."
|
||||
},
|
||||
"suggestions": {
|
||||
"title": "Missing links (AI generated)",
|
||||
"bridging": "Bridging {clusterA} & {clusterB}",
|
||||
"title": "Missing links",
|
||||
"bridging": "Link {clusterA} & {clusterB}",
|
||||
"emptyTitle": "No connection suggestions yet",
|
||||
"emptyDescription": "All your clusters may already be connected!",
|
||||
"createNote": "Create bridge note"
|
||||
"emptyDescription": "No strong near-miss theme pairs right now — or re-sync to refresh predictions.",
|
||||
"createNote": "Create bridge note",
|
||||
"created": "Bridge note created",
|
||||
"createError": "Could not create the bridge note",
|
||||
"dismiss": "Dismiss",
|
||||
"dismissError": "Could not dismiss this suggestion"
|
||||
},
|
||||
"unknownNote": "Untitled note",
|
||||
"viewSplit": "Split",
|
||||
@@ -3596,11 +3635,11 @@
|
||||
"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.",
|
||||
"tipBridgeNotes": "A bridge note sits at the crossing of two themes (semantic brokerage). We keep the strongest pair — not every weak theme touch.",
|
||||
"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.",
|
||||
"tipSuggestions": "Suggested only for near-miss theme pairs (link prediction): related enough to deserve a bridge, not forced metaphors. Create the note if the shared object or method is real.",
|
||||
"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.",
|
||||
@@ -3612,6 +3651,13 @@
|
||||
},
|
||||
"resetFocus": "Reset focus",
|
||||
"listView": "List",
|
||||
"listFilterPlaceholder": "Filter themes or notes…",
|
||||
"listFilterEmpty": "No theme or note matches this filter.",
|
||||
"listFilterMatch": "matches",
|
||||
"listSortLabel": "Sort",
|
||||
"listSortSize": "By size",
|
||||
"listSortBridges": "By bridges",
|
||||
"listSortAlpha": "A–Z",
|
||||
"graphAriaLabel": "Semantic network: {clusters} clusters, {notes} notes, {bridges} bridge notes. Switch to List view for accessible navigation.",
|
||||
"listAriaLabel": "Accessible cluster list with notes and bridge connections"
|
||||
},
|
||||
@@ -4018,6 +4064,9 @@
|
||||
"notes": "notes",
|
||||
"continue": "Continue",
|
||||
"noRecentNotes": "No recent notes.",
|
||||
"resumeEmptyHint": "Your recent notes will show up here. Capture an idea or open a notebook to get started.",
|
||||
"resumeEmptyCta": "Capture an idea",
|
||||
"resumeAlso": "Also recently",
|
||||
"untitled": "Untitled",
|
||||
"inbox": "Inbox",
|
||||
"sentiment": "Sentiment",
|
||||
@@ -4154,6 +4203,11 @@
|
||||
"flashRetention": "Mastered",
|
||||
"flashStreak": "Streak",
|
||||
"flashTotal": "Cards",
|
||||
"flashEmptyHint": "No flashcards yet. Generate some from a note (graduation-cap icon in the editor), then track your progress here.",
|
||||
"flashEmptyCta": "Open reviews",
|
||||
"flashDueCta": "{count} cards due today",
|
||||
"flashOpenCta": "View progress",
|
||||
"activityEmptyHint": "Edit notes to see your writing rhythm over the last 90 days.",
|
||||
"pathTypes": {
|
||||
"continue": "Continue",
|
||||
"connect": "Semantic link",
|
||||
|
||||
Reference in New Issue
Block a user