From b3fb46fc521eca6520241c51968c3eb27aadc125 Mon Sep 17 00:00:00 2001 From: Antigravity Date: Sun, 28 Jun 2026 08:06:05 +0000 Subject: [PATCH] =?UTF-8?q?feat(insights):=20UX=20gap=20closure=20?= =?UTF-8?q?=E2=80=94=20i18n,=20network=20graph,=20recalc=20panel,=20toasts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bugs fixes: - network-graph.tsx: 2 strings hardcoded FR → props i18n (untitledLabel, resetFocusLabel) - Panneau recalcul: clés i18n réutilisées avec mauvais sens → nouvelles clés recalcSystem.* - 13 locales: section insightsView.* complète (67 clés × 13 = 871 traductions) UX features: - Hint /insights ≠ /graph (semanticGraphLegend + lien vers /graph) - Toasts succès/échec/zéro-clusters après analyse (analysisSuccess/Failed/NoClusters) - État vide différencié: emptyNeedMoreNotes si < 10 notes - Tips contextuels sections Bridge Notes et Suggestions Sprint: - 4 epics marqués done (3,4,5,6 — toutes stories terminées) - sprint-status.yaml last_updated corrigé --- .agents/skills/find-skills/SKILL.md | 142 ++++++++++++++++++ .../hooks/state/continual-learning-index.json | 6 +- .cursor/hooks/state/continual-learning.json | 8 +- AGENTS.md | 4 +- docs/sprint-status.yaml | 11 +- memento-note/app/(main)/insights/page.tsx | 33 +++- memento-note/components/network-graph.tsx | 12 +- memento-note/locales/ar.json | 83 ++++++++++ memento-note/locales/de.json | 83 ++++++++++ memento-note/locales/en.json | 9 +- memento-note/locales/es.json | 83 ++++++++++ memento-note/locales/fa.json | 83 ++++++++++ memento-note/locales/fr.json | 9 +- memento-note/locales/hi.json | 83 ++++++++++ memento-note/locales/it.json | 83 ++++++++++ memento-note/locales/ja.json | 83 ++++++++++ memento-note/locales/ko.json | 83 ++++++++++ memento-note/locales/nl.json | 83 ++++++++++ memento-note/locales/pl.json | 83 ++++++++++ memento-note/locales/pt.json | 83 ++++++++++ memento-note/locales/ru.json | 83 ++++++++++ memento-note/locales/zh.json | 83 ++++++++++ skills-lock.json | 11 ++ 23 files changed, 1301 insertions(+), 23 deletions(-) create mode 100644 .agents/skills/find-skills/SKILL.md create mode 100644 skills-lock.json diff --git a/.agents/skills/find-skills/SKILL.md b/.agents/skills/find-skills/SKILL.md new file mode 100644 index 0000000..7369d66 --- /dev/null +++ b/.agents/skills/find-skills/SKILL.md @@ -0,0 +1,142 @@ +--- +name: find-skills +description: Helps users discover and install agent skills when they ask questions like "how do I do X", "find a skill for X", "is there a skill that can...", or express interest in extending capabilities. This skill should be used when the user is looking for functionality that might exist as an installable skill. +--- + +# Find Skills + +This skill helps you discover and install skills from the open agent skills ecosystem. + +## When to Use This Skill + +Use this skill when the user: + +- Asks "how do I do X" where X might be a common task with an existing skill +- Says "find a skill for X" or "is there a skill for X" +- Asks "can you do X" where X is a specialized capability +- Expresses interest in extending agent capabilities +- Wants to search for tools, templates, or workflows +- Mentions they wish they had help with a specific domain (design, testing, deployment, etc.) + +## What is the Skills CLI? + +The Skills CLI (`npx skills`) is the package manager for the open agent skills ecosystem. Skills are modular packages that extend agent capabilities with specialized knowledge, workflows, and tools. + +**Key commands:** + +- `npx skills find [query] [--owner ]` - Search for skills interactively or by keyword, optionally scoped to a GitHub owner +- `npx skills add ` - Install a skill from GitHub or other sources +- `npx skills check` - Check for skill updates +- `npx skills update` - Update all installed skills + +**Browse skills at:** https://skills.sh/ + +## How to Help Users Find Skills + +### Step 1: Understand What They Need + +When a user asks for help with something, identify: + +1. The domain (e.g., React, testing, design, deployment) +2. The specific task (e.g., writing tests, creating animations, reviewing PRs) +3. Whether this is a common enough task that a skill likely exists + +### Step 2: Check the Leaderboard First + +Before running a CLI search, check the [skills.sh leaderboard](https://skills.sh/) to see if a well-known skill already exists for the domain. The leaderboard ranks skills by total installs, surfacing the most popular and battle-tested options. + +For example, top skills for web development include: +- `vercel-labs/agent-skills` — React, Next.js, web design (100K+ installs each) +- `anthropics/skills` — Frontend design, document processing (100K+ installs) + +### Step 3: Search for Skills + +If the leaderboard doesn't cover the user's need, run the find command: + +```bash +npx skills find [query] [--owner ] +``` + +For example: + +- User asks "how do I make my React app faster?" → `npx skills find react performance` +- User asks "can you help me with PR reviews?" → `npx skills find pr review` +- User asks "I need to create a changelog" → `npx skills find changelog` + +### Step 4: Verify Quality Before Recommending + +**Do not recommend a skill based solely on search results.** Always verify: + +1. **Install count** — Prefer skills with 1K+ installs. Be cautious with anything under 100. +2. **Source reputation** — Official sources (`vercel-labs`, `anthropics`, `microsoft`) are more trustworthy than unknown authors. +3. **GitHub stars** — Check the source repository. A skill from a repo with <100 stars should be treated with skepticism. + +### Step 5: Present Options to the User + +When you find relevant skills, present them to the user with: + +1. The skill name and what it does +2. The install count and source +3. The install command they can run +4. A link to learn more at skills.sh + +Example response: + +``` +I found a skill that might help! The "react-best-practices" skill provides +React and Next.js performance optimization guidelines from Vercel Engineering. +(185K installs) + +To install it: +npx skills add vercel-labs/agent-skills@react-best-practices + +Learn more: https://skills.sh/vercel-labs/agent-skills/react-best-practices +``` + +### Step 6: Offer to Install + +If the user wants to proceed, you can install the skill for them: + +```bash +npx skills add -g -y +``` + +The `-g` flag installs globally (user-level) and `-y` skips confirmation prompts. + +## Common Skill Categories + +When searching, consider these common categories: + +| Category | Example Queries | +| --------------- | ---------------------------------------- | +| Web Development | react, nextjs, typescript, css, tailwind | +| Testing | testing, jest, playwright, e2e | +| DevOps | deploy, docker, kubernetes, ci-cd | +| Documentation | docs, readme, changelog, api-docs | +| Code Quality | review, lint, refactor, best-practices | +| Design | ui, ux, design-system, accessibility | +| Productivity | workflow, automation, git | + +## Tips for Effective Searches + +1. **Use specific keywords**: "react testing" is better than just "testing" +2. **Try alternative terms**: If "deploy" doesn't work, try "deployment" or "ci-cd" +3. **Check popular sources**: Many skills come from `vercel-labs/agent-skills` or `ComposioHQ/awesome-claude-skills` + +## When No Skills Are Found + +If no relevant skills exist: + +1. Acknowledge that no existing skill was found +2. Offer to help with the task directly using your general capabilities +3. Suggest the user could create their own skill with `npx skills init` + +Example: + +``` +I searched for skills related to "xyz" but didn't find any matches. +I can still help you with this task directly! Would you like me to proceed? + +If this is something you do often, you could create your own skill: +npx skills init my-xyz-skill +``` diff --git a/.cursor/hooks/state/continual-learning-index.json b/.cursor/hooks/state/continual-learning-index.json index 11735f1..6c9b71b 100644 --- a/.cursor/hooks/state/continual-learning-index.json +++ b/.cursor/hooks/state/continual-learning-index.json @@ -59,11 +59,13 @@ "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ea18d177-228d-4e44-8e79-8957e6f2da39/subagents/375b2e07-202f-4e8e-9e80-718bbdf88005.jsonl": 1781973640324, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ea18d177-228d-4e44-8e79-8957e6f2da39/subagents/6cba0291-51b3-42d9-939c-2e95d01128f8.jsonl": 1781975383642, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ea18d177-228d-4e44-8e79-8957e6f2da39/subagents/d6546245-4e3f-47dd-bc3e-39e1af726138.jsonl": 1781973598054, - "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/ec2b194c-c67e-4089-a434-6daff69ca69d.jsonl": 1782057901186, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/ec2b194c-c67e-4089-a434-6daff69ca69d.jsonl": 1782633068860, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/99e20a50-1e7b-4ed8-931a-5c4c7a65ea4d.jsonl": 1782037965469, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/f0ad176d-04d7-4d9a-82b8-65273acd313a/subagents/96507ccc-6150-4260-a55c-94abd2b57441.jsonl": 1778946698447, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/fb7fd15f-b9ef-490b-a1de-8238ea026e53/fb7fd15f-b9ef-490b-a1de-8238ea026e53.jsonl": 1780001507987, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/fb7fd15f-b9ef-490b-a1de-8238ea026e53/subagents/a5601ff1-7934-4872-acd8-266e416c3680.jsonl": 1779998536313, "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/993325c9-a748-4183-9b2d-866cc0d73338.jsonl": 1782056882673, - "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/e483aeb3-3b38-4f7f-9ad8-d79f362c102d.jsonl": 1782057932702 + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/e483aeb3-3b38-4f7f-9ad8-d79f362c102d.jsonl": 1782058095940, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/372b1e4e-cc60-4117-b3c1-48af0dbc38d9.jsonl": 1782059598659, + "/home/devparsa/.cursor/projects/home-devparsa-dev-Momento/agent-transcripts/ec2b194c-c67e-4089-a434-6daff69ca69d/subagents/8ad24313-529f-41f7-96b3-dc6314e94c72.jsonl": 1782633077601 } \ No newline at end of file diff --git a/.cursor/hooks/state/continual-learning.json b/.cursor/hooks/state/continual-learning.json index 222f53f..b511d4c 100644 --- a/.cursor/hooks/state/continual-learning.json +++ b/.cursor/hooks/state/continual-learning.json @@ -1,8 +1,8 @@ { "version": 1, - "lastRunAtMs": 1782057894900, - "turnsSinceLastRun": 15, - "lastTranscriptMtimeMs": 1782057894796.2778, - "lastProcessedGenerationId": "3c5517c8-a954-41c8-ba2d-9a8578c05e67", + "lastRunAtMs": 1782633053032, + "turnsSinceLastRun": 1, + "lastTranscriptMtimeMs": 1782633052959.9294, + "lastProcessedGenerationId": "17310ec7-5a0e-406b-a1a4-75a7c0439ee3", "trialStartedAtMs": null } diff --git a/AGENTS.md b/AGENTS.md index 92b1ed8..5910727 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -27,5 +27,5 @@ - CI/CD Gitea : `.gitea/workflows/ci.yaml` — CI sur `ubuntu-24.04`, deploy sur runner **`docker-host`** (sur le serveur) ; deploy manuel via `.gitea/workflows/deploy.yaml` ou `bash scripts/deploy-prod.sh`. - Migrations prebuilt + vérif deploy : `docker compose exec memento-note node ./node_modules/prisma/build/index.js migrate deploy` (pas `npx prisma`) ; helper `scripts/migrate-docker.sh` ; `GET /api/build-info` (SHA Git) ; comparer `127.0.0.1:3000` et domaine Cloudflare — purger cache si versions divergent ; 403 `/api/manifest` côté domaine = souvent Cloudflare. - Éditeur riche : `rich-text-editor.tsx` — `immediatelyRender: false` ; activer **`shouldRerenderOnTransaction: false`** (quick win perf TipTap 2.5) ; **drag handle / menu bloc** via **`@tiptap/extension-drag-handle-react`** (spec officielle — pas de double plugin `DragHandleExtension` + composant React, pas de repositionnement maison) ; poignée dans **colonne gutter fixe** du wrapper (padding + `getReferencedVirtualElement`), pas sur le bord des listes/numéros ; CSS : **pas `opacity:0` sur `.drag-handle`** (visibilité gérée par le plugin) ; config/callbacks **stables hors composant** ; fondation blocs : `tiptap-unique-id-extension.ts` / **`data-id` persisté à la sauvegarde** (références « Copier la référence ») ; **Smart Paste** : `lib/editor/smart-paste-extension.ts` ; **peek split** note source : `lib/note-peek-sync.ts` + `note-editor-split-peek.tsx` ; **US-4 `structuredViewBlock`** (`tiptap-structured-view-block-extension.tsx`, `structured-view-block-embed.tsx`) : **dual-mode** — base locale autonome par défaut (`/database`, `/vue`, `isLocal: true`) + option « Lier à un carnet » (Structured Views) ; i18n `structuredViewBlock.*` ; **rejeté** : ancien `databaseBlock` « Auteurs & Œuvres » et spec embed-only `docs/story-nextgen-editor-us4-redesign.md` ; epic active `docs/story-nextgen-editor.md` — priorité **PERF > NEXTGEN > UX > MOBILE > MARKDOWN**. -- Sync mutations notes entre composants : `memento-note/lib/note-change-sync.ts` (`emitNoteChange`, événement `NOTE_CHANGE_EVENT`). -- Roadmap / écart prototype vs prod : Web Clipper — **`ClipperSimulator.tsx` = référence design uniquement** (pas de simulateur en prod) ; extension **`memento-note/extension/`** v0.3 **Side Panel** (clip page/sélection/lien ; popup Chrome se ferme au clic page — Side Panel pour la sélection) ; i18n extension **15 langues** (`_locales/`, détection locale navigateur ; script `extension/i18n/generate-translations.cjs`) ; **`host_permissions`** incl. LAN ; **URL serveur configurable en dev**, adresse prod figée en release ; cookies/session alignés avec l'instance cible ; **Flashcards IA SM-2 livrées** : `/revision`, `/api/flashcards/*`, génération depuis l'éditeur (GraduationCap) — réf. prototype `RevisionView.tsx` ; **Structured Views partiellement livrées** : schéma par carnet, Table/Kanban, champs partagés et valeurs par note (`/home` + toolbar carnet) — **suivi de tâches par carnet via Kanban structuré** (pas de vue agrégée Notes/Tâches sur la home ; cases à cocher inline dans les notes) ; **Living Blocks partiellement livrées** : `data-id`, Smart Paste, nœud `liveBlock`, détacher/supprimer, peek split — **US-NEXTGEN-EDITOR** en cours (`docs/story-nextgen-editor.md`, **US-TEMPORAL reporté**) ; encore en gap : transclusion bidirectionnelle complète, graphe knowledge enrichi (`GraphKnowledgeMap.tsx`), **insights sémantiques** (`InsightsView.tsx`, **`/insights` ≠ `/graph`**) ; publication **Chrome Web Store** : icônes 16/48/128, privacy policy, `host_permissions` prod restreints vs build dev ; **Wizards** : `NotebookOrganizerDialog` (tags/doublons) branché via bouton "Tags IA" dans `home-client.tsx` — `StructuredViewsWizard` encore **orphelin** (pas de point d'entrée UI) ; **Publication web** (`note-editor-toolbar.tsx`) : deux modes — simple (copie directe) + IA (2-3 templates, reformulation adaptée au contenu, KaTeX pour équations, images incluses) — quota IA consommé uniquement sur publication IA. +- Sync mutations notes entre composants : `memento-note/lib/note-change-sync.ts` (`emitNoteChange`, événement `NOTE_CHANGE_EVENT`) ; tracking quotas IA : événement `ai-usage-changed` (window) — doit être dispatché depuis **tous** les points d'appel IA (recherche sémantique, auto-tag, auto-title, chat, reformulation, analyse carnet, etc.) ; UI quotas : `usage-meter.tsx` (polling 5s + écoute événement). +- Roadmap / écart prototype vs prod : Web Clipper — **`ClipperSimulator.tsx` = référence design uniquement** (pas de simulateur en prod) ; extension **`memento-note/extension/`** v0.3 **Side Panel** (clip page/sélection/lien ; popup Chrome se ferme au clic page — Side Panel pour la sélection) ; i18n extension **15 langues** (`_locales/`, détection locale navigateur ; script `extension/i18n/generate-translations.cjs`) ; **`host_permissions`** incl. LAN ; **URL serveur configurable en dev**, adresse prod figée en release ; cookies/session alignés avec l'instance cible ; **Flashcards IA SM-2 livrées** : `/revision`, `/api/flashcards/*`, génération depuis l'éditeur (GraduationCap) — réf. prototype `RevisionView.tsx` ; **Structured Views partiellement livrées** : schéma par carnet, Table/Kanban, champs partagés et valeurs par note (`/home` + toolbar carnet) — **suivi de tâches par carnet via Kanban structuré** (pas de vue agrégée Notes/Tâches sur la home ; cases à cocher inline dans les notes) ; **Living Blocks partiellement livrées** : `data-id`, Smart Paste, nœud `liveBlock`, détacher/supprimer, peek split — **US-NEXTGEN-EDITOR** en cours (`docs/story-nextgen-editor.md`, **US-TEMPORAL reporté**) ; encore en gap : transclusion bidirectionnelle complète, graphe knowledge enrichi (`GraphKnowledgeMap.tsx`), **insights sémantiques** (`InsightsView.tsx`, **`/insights` ≠ `/graph`**) ; publication **Chrome Web Store** : icônes 16/48/128, privacy policy, `host_permissions` prod restreints vs build dev ; **Wizards** : `NotebookOrganizerDialog` (tags/doublons) branché via bouton "Tags IA" dans `home-client.tsx` — `StructuredViewsWizard` encore **orphelin** (pas de point d'entrée UI) ; **Publication web** (`note-editor-toolbar.tsx`) : deux modes — simple (copie directe) + IA (2-3 templates, reformulation adaptée au contenu, KaTeX pour équations, images incluses) — quota IA consommé uniquement sur publication IA ; **champs DB publication** sur modèle `Note` : `publicSlug` (pas `publishedSlug`), `publishedContent` (pas `publishedHtml`) — `publishMode` est paramètre API uniquement (`mode: 'simple' | 'ai'`), **pas** un champ en base. diff --git a/docs/sprint-status.yaml b/docs/sprint-status.yaml index cdfa911..385dc6d 100644 --- a/docs/sprint-status.yaml +++ b/docs/sprint-status.yaml @@ -35,14 +35,14 @@ # - Dev moves story to 'review', then runs code-review (fresh context, different LLM recommended) generated: 2026-05-14T16:06:50Z -last_updated: 2026-05-23T20:03:48Z +last_updated: 2026-06-28T16:45:00Z project: Memento project_key: NOKEY tracking_system: file-system story_location: docs development_status: - epic-3: in-progress + epic-3: done 3-1-freemium-quota-tracking: done 3-2-custom-llm-router: done 3-3-smart-routing-fallback: done @@ -50,7 +50,7 @@ development_status: 3-5-secure-byok-management: done 3-6-stripe-subscription-tiers: done epic-3-retrospective: optional - epic-4: in-progress + epic-4: done 4-1-gdpr-cookie-consent: done 4-2-gdpr-right-to-be-forgotten: done 4-3-data-portability: done @@ -58,11 +58,12 @@ development_status: 4-5-eu-data-residency: done 4-6-sso-saml-audit-logging: done epic-4-retrospective: optional - epic-5: in-progress + epic-5: done 5-1-nextgen-editor: done + epic-5-retrospective: optional # Epic 6 — Croissance & Activation (PLG) — ajouté 2026-05-29 - epic-6: in-progress + epic-6: done 6-1-onboarding-activation: done # story-onboarding-activation.md 6-2-markdown-roundtrip: done # brief-markdown-roundtrip.md 6-3-brainstorm-canvas-finalize: done # story: 6-3-brainstorm-canvas-finalize.md diff --git a/memento-note/app/(main)/insights/page.tsx b/memento-note/app/(main)/insights/page.tsx index 7722afd..85f3690 100644 --- a/memento-note/app/(main)/insights/page.tsx +++ b/memento-note/app/(main)/insights/page.tsx @@ -18,7 +18,10 @@ import { AlertCircle, ChevronRight, Database, + ArrowRight, } from 'lucide-react' +import { toast } from 'sonner' +import Link from 'next/link' interface Note { id: string @@ -199,6 +202,12 @@ export default function InsightsPage() { if (res.ok) { const data = await res.json() + const clusterCount = data.clusters?.length || 0 + if (clusterCount === 0) { + toast.info(t('insightsView.analysisNoClusters')) + } else { + toast.success(t('insightsView.analysisSuccess', { count: clusterCount })) + } const clustersWithColors = (data.clusters || []).map((c: Cluster, i: number) => ({ ...c, id: c.clusterId.toString(), @@ -225,6 +234,7 @@ export default function InsightsPage() { } } catch (error) { console.error('Error running analysis:', error) + toast.error(t('insightsView.analysisFailed')) } finally { setIsCalculating(false) } @@ -253,6 +263,12 @@ export default function InsightsPage() {

{t('insightsView.subtitle')}

+
+ {t('insightsView.semanticGraphLegend')} + + {t('insightsView.openGraphMap')} + +
@@ -324,7 +340,9 @@ export default function InsightsPage() { {t('insightsView.emptyTitle')}

- {t('insightsView.emptyDescription')} + {embeddingStats && embeddingStats.total < 10 + ? t('insightsView.emptyNeedMoreNotes', { count: 10 - embeddingStats.total }) + : t('insightsView.emptyDescription')}

@@ -508,22 +529,22 @@ export default function InsightsPage() {

- {t('insightsView.clusters.title')} + {t('insightsView.recalcSystem.title')}

- {t('insightsView.resync')} + {t('insightsView.recalcSystem.statusSynced')}
- {t('insightsView.mapping')} + {t('insightsView.recalcSystem.scheduledCron')}

04:00

- {t('insightsView.resync')} + {t('insightsView.recalcSystem.lastSync')}

{lastSyncTime || '—'}

@@ -613,6 +634,7 @@ export default function InsightsPage() { {t('insightsView.bridgeNotes.title')}
+

{t('insightsView.tipBridgeNotes')}

{bridgeList.map(bridge => (
+

{t('insightsView.tipSuggestions')}

{suggestions.map(s => (
void selectedClusterId?: string | null onClusterSelect?: (id: string | null) => void + untitledLabel?: string + resetFocusLabel?: string + fitViewLabel?: string } export function NetworkGraph({ @@ -39,7 +42,10 @@ export function NetworkGraph({ bridgeNotes, onNoteSelect, selectedClusterId = null, - onClusterSelect + onClusterSelect, + untitledLabel = 'Untitled', + resetFocusLabel = 'Reset focus', + fitViewLabel = 'Fit view', }: NetworkGraphProps) { const svgRef = useRef(null) const containerRef = useRef(null) @@ -268,7 +274,7 @@ export function NetworkGraph({ .attr('fill', '#4b5563') .attr('class', 'dark:fill-zinc-300 font-sans pointer-events-none') .text(d => { - const title = d.title || 'Sans titre' + const title = d.title || untitledLabel return title.length > 20 ? title.substring(0, 18) + '...' : title }) @@ -368,7 +374,7 @@ export function NetworkGraph({ onClick={() => onClusterSelect?.(null)} className="px-3 py-1.5 rounded-full border border-rose-200 bg-rose-50 dark:bg-rose-950/20 dark:border-rose-900/40 text-rose-500 text-[9px] font-bold uppercase tracking-wider hover:bg-rose-100 dark:hover:bg-rose-950/30 transition-all shadow-sm" > - Réinitialiser focus + {resetFocusLabel} )}
diff --git a/memento-note/locales/ar.json b/memento-note/locales/ar.json index 36e55fa..9977c8a 100644 --- a/memento-note/locales/ar.json +++ b/memento-note/locales/ar.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "رؤى دلالية", + "subtitle": "اكتشف البنية المخفية لمعرفتك", + "resync": "إعادة مزامنة الشبكة", + "mapping": "جاري الربط…", + "loading": "جاري تحميل الملاحظات…", + "mappingTitle": "جاري رسم خريطة معرفتك…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "بدء التحليل الدلالي", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "فقط {indexed} من أصل {total} ملاحظة مفهرسة للذكاء الاصطناعي.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "فتح خريطة الروابط", + "analysisFailed": "فشل التحليل. تحقق من إعدادات الذكاء الاصطناعي.", + "analysisSuccess": "اكتمل التحليل: تم اكتشاف {count} موضوع.", + "analysisNoClusters": "لم يتم اكتشاف موضوعات بعد.", + "staleResults": "عرض نتائج آخر تحليل.", + "semanticGraphLegend": "نظرة عامة على الموضوعات (وليست خريطة الروابط)", + "fitGraphView": "ملاءمة العرض", + "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": "ملاحظات", + "clusterFallback": "موضوع {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "اكتشف مجموعات معرفتك", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "المجموعات", + "bridgeNotes": "ملاحظات جسر" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "النتيجة: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "ربط {clusterA} و {clusterB}", + "emptyTitle": "لا توجد اقتراحات", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "إنشاء ملاحظة جسر" + }, + "unknownNote": "بدون عنوان", + "viewSplit": "Split", + "viewGraph": "الرسم البياني", + "viewDashboard": "لوحة التحكم", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "غير متصل", + "empty": "جميع المجموعات مترابطة!" + }, + "focusCluster": { + "title": "تركيز على المجموعة", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "إغلاق" + }, + "badgeDominant": "Dominant", + "bridgeCount": "جسر/جسور", + "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.", + "recalcSystem": { + "title": "نظام إعادة الحساب", + "statusSynced": "متزامن", + "scheduledCron": "مجدول", + "lastSync": "آخر مزامنة" + }, + "resetFocus": "إعادة ضبط التركيز" } } diff --git a/memento-note/locales/de.json b/memento-note/locales/de.json index 97bd8d1..d6ed981 100644 --- a/memento-note/locales/de.json +++ b/memento-note/locales/de.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "Semantische Einblicke", + "subtitle": "Entdecke die verborgene Architektur deines Wissens", + "resync": "Netzwerk neu syncen", + "mapping": "Kartierung…", + "loading": "Deine Notizen werden geladen…", + "mappingTitle": "Dein Wissen wird kartiert…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "Semantische Analyse starten", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "Nur {indexed} von {total} Notizen sind für KI indiziert.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "Link-Map öffnen", + "analysisFailed": "Analyse fehlgeschlagen. Überprüfe deine KI-Einstellungen.", + "analysisSuccess": "Analyse abgeschlossen: {count} Themen erkannt.", + "analysisNoClusters": "Noch keine Themen erkannt.", + "staleResults": "Zeigt Ergebnisse der letzten Analyse.", + "semanticGraphLegend": "Themenüberblick (nicht die Link-Map)", + "fitGraphView": "Ansicht anpassen", + "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": "Notizen", + "clusterFallback": "Thema {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "Entdecke deine Wissenscluster", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "Cluster", + "bridgeNotes": "Brücken-Notizen" + }, + "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": "Verbindet {clusterA} & {clusterB}", + "emptyTitle": "Keine Verbindungsvorschläge", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "Brücken-Notiz erstellen" + }, + "unknownNote": "Ohne Titel", + "viewSplit": "Split", + "viewGraph": "Graph", + "viewDashboard": "Dashboard", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "Nicht verbunden", + "empty": "Alle Cluster sind verbunden!" + }, + "focusCluster": { + "title": "Cluster-Fokus aktiv", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "Schließen" + }, + "badgeDominant": "Dominant", + "bridgeCount": "Brücke(n)", + "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.", + "recalcSystem": { + "title": "Neuberechnungssystem", + "statusSynced": "Synchronisiert", + "scheduledCron": "Geplant", + "lastSync": "Letzte Sync" + }, + "resetFocus": "Fokus zurücksetzen" } } diff --git a/memento-note/locales/en.json b/memento-note/locales/en.json index c92f155..9e89ce5 100644 --- a/memento-note/locales/en.json +++ b/memento-note/locales/en.json @@ -3525,7 +3525,14 @@ "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." + "tipIsolatedAction": "These themes have no note connecting them to the rest of your thinking.", + "recalcSystem": { + "title": "Recalculation system", + "statusSynced": "Synced", + "scheduledCron": "Scheduled", + "lastSync": "Last sync" + }, + "resetFocus": "Reset focus" }, "consent": { "banner": { diff --git a/memento-note/locales/es.json b/memento-note/locales/es.json index 682fe89..097745c 100644 --- a/memento-note/locales/es.json +++ b/memento-note/locales/es.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "Insights semánticos", + "subtitle": "Descubre la arquitectura oculta de tu conocimiento", + "resync": "Resincronizar red", + "mapping": "Mapeando…", + "loading": "Cargando tus notas…", + "mappingTitle": "Mapeando tu conocimiento…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "Iniciar análisis semántico", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "Solo {indexed} de {total} notas están indexadas para IA.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "Abrir mapa de enlaces", + "analysisFailed": "Análisis fallido. Revisa tu configuración de IA.", + "analysisSuccess": "Análisis completo: {count} temas detectados.", + "analysisNoClusters": "Aún no se detectaron temas.", + "staleResults": "Mostrando resultados del último análisis.", + "semanticGraphLegend": "Vista general de temas (no el mapa de enlaces)", + "fitGraphView": "Ajustar vista", + "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": "notas", + "clusterFallback": "Tema {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "Descubre tus clústeres de conocimiento", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "Clústeres", + "bridgeNotes": "Notas puente" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "Puntaje: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "Conectando {clusterA} & {clusterB}", + "emptyTitle": "Sin sugerencias de conexión", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "Crear nota puente" + }, + "unknownNote": "Sin título", + "viewSplit": "Split", + "viewGraph": "Grafo", + "viewDashboard": "Panel", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "No conectado", + "empty": "¡Todos tus clústeres están interconectados!" + }, + "focusCluster": { + "title": "Foco de clúster activo", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "Cerrar" + }, + "badgeDominant": "Dominant", + "bridgeCount": "puente(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.", + "recalcSystem": { + "title": "Sistema de recálculo", + "statusSynced": "Sincronizado", + "scheduledCron": "Programado", + "lastSync": "Última sync" + }, + "resetFocus": "Restablecer enfoque" } } diff --git a/memento-note/locales/fa.json b/memento-note/locales/fa.json index 09c5cb9..8e32b5c 100644 --- a/memento-note/locales/fa.json +++ b/memento-note/locales/fa.json @@ -2959,5 +2959,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "بینش‌های معنایی", + "subtitle": "معماری پنهان دانش خود را کشف کنید", + "resync": "همگام‌سازی مجدد شبکه", + "mapping": "در حال نقشه‌برداری…", + "loading": "در حال بارگذاری یادداشت‌ها…", + "mappingTitle": "در حال نقشه‌برداری دانش شما…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "شروع تحلیل معنایی", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "فقط {indexed} از {total} یادداشت برای هوش مصنوعی نمایه‌سازی شده‌اند.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "باز کردن نقشه پیوندها", + "analysisFailed": "تحلیل ناموفق. تنظیمات هوش مصنوعی را بررسی کنید.", + "analysisSuccess": "تحلیل کامل شد: {count} موضوع شناسایی شد.", + "analysisNoClusters": "هنوز موضوعی شناسایی نشده است.", + "staleResults": "نمایش نتایج آخرین تحلیل.", + "semanticGraphLegend": "نمای کلی موضوعات (نه نقشه پیوندها)", + "fitGraphView": "تنظیم نما", + "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": "یادداشت", + "clusterFallback": "موضوع {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "کلاسترهای دانش خود را کشف کنید", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "کلاسترها", + "bridgeNotes": "یادداشت‌های پل" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "امتیاز: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "اتصال {clusterA} و {clusterB}", + "emptyTitle": "بدون پیشنهاد", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "ایجاد یادداشت پل" + }, + "unknownNote": "بدون عنوان", + "viewSplit": "Split", + "viewGraph": "گراف", + "viewDashboard": "داشبورد", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "متصل نیست", + "empty": "همه کلاسترها به هم متصل‌اند!" + }, + "focusCluster": { + "title": "تمرکز روی کلاستر فعال", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "بستن" + }, + "badgeDominant": "Dominant", + "bridgeCount": "پل", + "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.", + "recalcSystem": { + "title": "سیستم محاسبه مجدد", + "statusSynced": "همگام‌شده", + "scheduledCron": "برنامه‌ریزی‌شده", + "lastSync": "آخرین همگام‌سازی" + }, + "resetFocus": "بازنشانی تمرکز" } } diff --git a/memento-note/locales/fr.json b/memento-note/locales/fr.json index 81292e8..b2aeac8 100644 --- a/memento-note/locales/fr.json +++ b/memento-note/locales/fr.json @@ -3529,7 +3529,14 @@ "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." + "tipIsolatedAction": "Ces thèmes n'ont aucune note qui les relie au reste de ta réflexion.", + "recalcSystem": { + "title": "Système de recalcul", + "statusSynced": "Synchronisé", + "scheduledCron": "CRON planifié", + "lastSync": "Dernière synchro" + }, + "resetFocus": "Réinitialiser focus" }, "consent": { "banner": { diff --git a/memento-note/locales/hi.json b/memento-note/locales/hi.json index a7ba88d..c8fd8bd 100644 --- a/memento-note/locales/hi.json +++ b/memento-note/locales/hi.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "सिमेंटिक इनसाइट्स", + "subtitle": "अपने ज्ञान की छिपी संरचना खोजें", + "resync": "नेटवर्क पुनः सिंक करें", + "mapping": "मैपिंग…", + "loading": "नोट लोड हो रहे हैं…", + "mappingTitle": "आपका ज्ञान मैप किया जा रहा है…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "सिमेंटिक विश्लेषण शुरू करें", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "केवल {indexed}/{total} नोट्स AI के लिए अनुक्रमित हैं।", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "लिंक मानचित्र खोलें", + "analysisFailed": "विश्लेषण विफल। AI सेटिंग्स जांचें।", + "analysisSuccess": "विश्लेषण पूर्ण: {count} विषय मिले।", + "analysisNoClusters": "अभी कोई विषय नहीं मिला।", + "staleResults": "पिछले विश्लेषण के परिणाम दिख रहे हैं।", + "semanticGraphLegend": "विषय अवलोकन (लिंक मानचित्र नहीं)", + "fitGraphView": "दृश्य फिट करें", + "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": "नोट्स", + "clusterFallback": "विषय {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "अपने ज्ञान क्लस्टर खोजें", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "क्लस्टर", + "bridgeNotes": "ब्रिज नोट्स" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "स्कोर: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "{clusterA} और {clusterB} जोड़ें", + "emptyTitle": "कोई सुझाव नहीं", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "ब्रिज नोट बनाएं" + }, + "unknownNote": "बिना शीर्षक", + "viewSplit": "Split", + "viewGraph": "ग्राफ", + "viewDashboard": "डैशबोर्ड", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "कनेक्टेड नहीं", + "empty": "सभी क्लस्टर जुड़े हुए हैं!" + }, + "focusCluster": { + "title": "क्लस्टर फोकस सक्रिय", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "बंद करें" + }, + "badgeDominant": "Dominant", + "bridgeCount": "ब्रिज", + "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.", + "recalcSystem": { + "title": "पुनर्गणना प्रणाली", + "statusSynced": "सिंक्रनाइज़्ड", + "scheduledCron": "अनुसूचित", + "lastSync": "अंतिम सिंक" + }, + "resetFocus": "फोकस रीसेट करें" } } diff --git a/memento-note/locales/it.json b/memento-note/locales/it.json index f2a9236..53e95ec 100644 --- a/memento-note/locales/it.json +++ b/memento-note/locales/it.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "Insights semantici", + "subtitle": "Scopri l'architettura nascosta della tua conoscenza", + "resync": "Risincronizza rete", + "mapping": "Mappatura…", + "loading": "Caricamento delle note…", + "mappingTitle": "Mappatura della tua conoscenza…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "Avvia analisi semantica", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "Solo {indexed} di {total} note indicizzate per IA.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "Apri mappa link", + "analysisFailed": "Analisi fallita. Controlla le impostazioni IA.", + "analysisSuccess": "Analisi completata: {count} temi rilevati.", + "analysisNoClusters": "Nessun tema rilevato.", + "staleResults": "Risultati dell'ultima analisi.", + "semanticGraphLegend": "Panoramica temi (non la mappa link)", + "fitGraphView": "Adatta vista", + "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": "note", + "clusterFallback": "Tema {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "Scopri i tuoi cluster di conoscenza", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "Cluster", + "bridgeNotes": "Note ponte" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "Punteggio: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "Collega {clusterA} & {clusterB}", + "emptyTitle": "Nessun suggerimento", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "Crea nota ponte" + }, + "unknownNote": "Senza titolo", + "viewSplit": "Split", + "viewGraph": "Grafo", + "viewDashboard": "Pannello", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "Non connesso", + "empty": "Tutti i cluster sono interconnessi!" + }, + "focusCluster": { + "title": "Focus cluster attivo", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "Chiudi" + }, + "badgeDominant": "Dominant", + "bridgeCount": "ponte/i", + "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.", + "recalcSystem": { + "title": "Sistema di ricalcolo", + "statusSynced": "Sincronizzato", + "scheduledCron": "Programmato", + "lastSync": "Ultima sync" + }, + "resetFocus": "Reimposta focus" } } diff --git a/memento-note/locales/ja.json b/memento-note/locales/ja.json index 785cfff..b02ab8d 100644 --- a/memento-note/locales/ja.json +++ b/memento-note/locales/ja.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "セマンティックインサイト", + "subtitle": "知識の隠された構造を発見", + "resync": "ネットワークを再同期", + "mapping": "マッピング中…", + "loading": "ノート読み込み中…", + "mappingTitle": "知識をマッピング中…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "セマンティック分析を開始", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "AI索引付き:{indexed}/{total}ノートのみ。", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "リンクマップを開く", + "analysisFailed": "分析失敗。AI設定を確認。", + "analysisSuccess": "分析完了:{count}テーマ検出。", + "analysisNoClusters": "テーマ未検出。", + "staleResults": "前回分析の結果を表示。", + "semanticGraphLegend": "テーマ概覧(リンクマップではない)", + "fitGraphView": "全体表示", + "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": "ノート", + "clusterFallback": "テーマ {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "知識クラスターを発見", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "クラスター", + "bridgeNotes": "ブリッジノート" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "スコア:{score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "{clusterA}と{clusterB}を接続", + "emptyTitle": "提案なし", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "ブリッジノート作成" + }, + "unknownNote": "無題", + "viewSplit": "Split", + "viewGraph": "グラフ", + "viewDashboard": "ダッシュボード", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "未接続", + "empty": "全クラスター接続済み!" + }, + "focusCluster": { + "title": "クラスターフォーカス中", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "閉じる" + }, + "badgeDominant": "Dominant", + "bridgeCount": "ブリッジ", + "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.", + "recalcSystem": { + "title": "再計算システム", + "statusSynced": "同期済み", + "scheduledCron": "予定済み", + "lastSync": "前回同期" + }, + "resetFocus": "フォーカス解除" } } diff --git a/memento-note/locales/ko.json b/memento-note/locales/ko.json index fc555a9..db51b3e 100644 --- a/memento-note/locales/ko.json +++ b/memento-note/locales/ko.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "시맨틱 인사이트", + "subtitle": "지식의 숨겨진 구조 발견", + "resync": "네트워크 재동기화", + "mapping": "매핑 중…", + "loading": "노트 로딩 중…", + "mappingTitle": "지식 매핑 중…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "시맨틱 분석 시작", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "AI 인덱싱: {indexed}/{total}노트만.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "링크 맵 열기", + "analysisFailed": "분석 실패. AI 설정을 확인하세요.", + "analysisSuccess": "분석 완료: {count}개 테마 감지.", + "analysisNoClusters": "아직 테마가 없습니다.", + "staleResults": "마지막 분석 결과 표시 중.", + "semanticGraphLegend": "테마 개요 (링크 맵 아님)", + "fitGraphView": "화면에 맞춤", + "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": "노트", + "clusterFallback": "테마 {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "지식 클러스터 발견", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "클러스터", + "bridgeNotes": "브리지 노트" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "점수: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "{clusterA}와 {clusterB} 연결", + "emptyTitle": "제안 없음", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "브리지 노트 만들기" + }, + "unknownNote": "제목 없음", + "viewSplit": "Split", + "viewGraph": "그래프", + "viewDashboard": "대시보드", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "연결 안 됨", + "empty": "모든 클러스터 연결됨!" + }, + "focusCluster": { + "title": "클러스터 포커스 활성", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "닫기" + }, + "badgeDominant": "Dominant", + "bridgeCount": "브리지", + "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.", + "recalcSystem": { + "title": "재계산 시스템", + "statusSynced": "동기화됨", + "scheduledCron": "예약됨", + "lastSync": "마지막 동기화" + }, + "resetFocus": "포커스 해제" } } diff --git a/memento-note/locales/nl.json b/memento-note/locales/nl.json index 239f429..66fac37 100644 --- a/memento-note/locales/nl.json +++ b/memento-note/locales/nl.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "Semantische inzichten", + "subtitle": "Ontdek de verborgen architectuur van je kennis", + "resync": "Netwerk hersynchroniseren", + "mapping": "In kaart brengen…", + "loading": "Notizen laden…", + "mappingTitle": "Je kennis in kaart brengen…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "Semantische analyse starten", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "Slechts {indexed} van {total} notities geïndexeerd voor AI.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "Linkkaart openen", + "analysisFailed": "Analyse mislukt. Controleer je AI-instellingen.", + "analysisSuccess": "Analyse voltooid: {count} thema's gevonden.", + "analysisNoClusters": "Nog geen thema's gedetecteerd.", + "staleResults": "Resultaten van de laatste analyse.", + "semanticGraphLegend": "Themoverzicht (niet de linkkaart)", + "fitGraphView": "Weergave aanpassen", + "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": "notities", + "clusterFallback": "Thema {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "Ontdek je kennisclusters", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "Clusters", + "bridgeNotes": "Brugnotities" + }, + "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": "Verbindt {clusterA} & {clusterB}", + "emptyTitle": "Geen suggesties", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "Brugnotitie maken" + }, + "unknownNote": "Zonder titel", + "viewSplit": "Split", + "viewGraph": "Graaf", + "viewDashboard": "Dashboard", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "Niet verbonden", + "empty": "Alle clusters zijn verbonden!" + }, + "focusCluster": { + "title": "Clusterfocus actief", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "Sluiten" + }, + "badgeDominant": "Dominant", + "bridgeCount": "brug(en)", + "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.", + "recalcSystem": { + "title": "Herberekeningssysteem", + "statusSynced": "Gesynchroniseerd", + "scheduledCron": "Gepland", + "lastSync": "Laatste sync" + }, + "resetFocus": "Focus resetten" } } diff --git a/memento-note/locales/pl.json b/memento-note/locales/pl.json index c39884f..9e93935 100644 --- a/memento-note/locales/pl.json +++ b/memento-note/locales/pl.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "Insighty semantyczne", + "subtitle": "Odkryj ukrytą architekturę swojej wiedzy", + "resync": "Ponowna synchronizacja", + "mapping": "Mapowanie…", + "loading": "Ładowanie notatek…", + "mappingTitle": "Mapowanie Twojej wiedzy…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "Rozpocznij analizę semantyczną", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "Tylko {indexed} z {total} notatek zaindeksowanych dla AI.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "Otwórz mapę linków", + "analysisFailed": "Analiza nieudana. Sprawdź ustawienia AI.", + "analysisSuccess": "Analiza zakończona: wykryto {count} tematów.", + "analysisNoClusters": "Nie wykryto jeszcze tematów.", + "staleResults": "Wyniki ostatniej analizy.", + "semanticGraphLegend": "Przegląd tematów (nie mapa linków)", + "fitGraphView": "Dopasuj widok", + "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": "notatki", + "clusterFallback": "Temat {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "Odkryj swoje klastry wiedzy", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "Klastry", + "bridgeNotes": "Notatki-pomosty" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "Wynik: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "Łączy {clusterA} & {clusterB}", + "emptyTitle": "Brak sugestii", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "Utwórz notatkę-pomost" + }, + "unknownNote": "Bez tytułu", + "viewSplit": "Split", + "viewGraph": "Graf", + "viewDashboard": "Panel", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "Niepowiązany", + "empty": "Wszystkie klastry są połączone!" + }, + "focusCluster": { + "title": "Fokus klastra aktywny", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "Zamknij" + }, + "badgeDominant": "Dominant", + "bridgeCount": "most(ów)", + "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.", + "recalcSystem": { + "title": "System przeliczania", + "statusSynced": "Zsynchronizowano", + "scheduledCron": "Zaplanowano", + "lastSync": "Ostatnia sync" + }, + "resetFocus": "Resetuj fokus" } } diff --git a/memento-note/locales/pt.json b/memento-note/locales/pt.json index e2c1f38..8898510 100644 --- a/memento-note/locales/pt.json +++ b/memento-note/locales/pt.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "Insights semânticos", + "subtitle": "Descobre a arquitetura oculta do teu conhecimento", + "resync": "Ressincronizar rede", + "mapping": "Mapeando…", + "loading": "A carregar notas…", + "mappingTitle": "Mapeando o teu conhecimento…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "Iniciar análise semântica", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "Apenas {indexed} de {total} notas indexadas para IA.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "Abrir mapa de links", + "analysisFailed": "Análise falhou. Verifica as configurações de IA.", + "analysisSuccess": "Análise completa: {count} temas detectados.", + "analysisNoClusters": "Nenhum tema detectado.", + "staleResults": "Resultados da última análise.", + "semanticGraphLegend": "Visão geral de temas (não o mapa de links)", + "fitGraphView": "Ajustar vista", + "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": "notas", + "clusterFallback": "Tema {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "Descobre os teus clusters de conhecimento", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "Clusters", + "bridgeNotes": "Notas ponte" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "Pontuação: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "Ligar {clusterA} & {clusterB}", + "emptyTitle": "Sem sugestões", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "Criar nota ponte" + }, + "unknownNote": "Sem título", + "viewSplit": "Split", + "viewGraph": "Grafo", + "viewDashboard": "Painel", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "Não conectado", + "empty": "Todos os clusters estão interligados!" + }, + "focusCluster": { + "title": "Foco de cluster ativo", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "Fechar" + }, + "badgeDominant": "Dominant", + "bridgeCount": "ponte(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.", + "recalcSystem": { + "title": "Sistema de recálculo", + "statusSynced": "Sincronizado", + "scheduledCron": "Programado", + "lastSync": "Última sync" + }, + "resetFocus": "Repor foco" } } diff --git a/memento-note/locales/ru.json b/memento-note/locales/ru.json index 9a85f9c..5bb81a2 100644 --- a/memento-note/locales/ru.json +++ b/memento-note/locales/ru.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "Семантические инсайты", + "subtitle": "Откройте скрытую архитектуру вашего знания", + "resync": "Пересинхронизировать", + "mapping": "Картирование…", + "loading": "Загрузка заметок…", + "mappingTitle": "Картирование вашего знания…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "Запустить семантический анализ", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "Только {indexed} из {total} заметок индексированы для ИИ.", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "Открыть карту связей", + "analysisFailed": "Анализ не удался. Проверьте настройки ИИ.", + "analysisSuccess": "Анализ завершён: обнаружено {count} тем.", + "analysisNoClusters": "Темы пока не обнаружены.", + "staleResults": "Результаты последнего анализа.", + "semanticGraphLegend": "Обзор тем (не карта связей)", + "fitGraphView": "Уместить в экран", + "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": "заметки", + "clusterFallback": "Тема {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "Откройте свои кластеры знания", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "Кластеры", + "bridgeNotes": "Мосты-заметки" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "Оценка: {score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "Связать {clusterA} & {clusterB}", + "emptyTitle": "Нет предложений", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "Создать мост-заметку" + }, + "unknownNote": "Без названия", + "viewSplit": "Split", + "viewGraph": "Граф", + "viewDashboard": "Панель", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "Не связан", + "empty": "Все кластеры связаны!" + }, + "focusCluster": { + "title": "Фокус на кластере", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "Закрыть" + }, + "badgeDominant": "Dominant", + "bridgeCount": "мост(ов)", + "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.", + "recalcSystem": { + "title": "Система пересчёта", + "statusSynced": "Синхронизировано", + "scheduledCron": "Запланировано", + "lastSync": "Последняя sync" + }, + "resetFocus": "Сбросить фокус" } } diff --git a/memento-note/locales/zh.json b/memento-note/locales/zh.json index 0854908..656d099 100644 --- a/memento-note/locales/zh.json +++ b/memento-note/locales/zh.json @@ -2920,5 +2920,88 @@ "copyRefFailed": "Could not copy block reference", "copyRefNoNote": "Save the note before copying a block reference", "copyRefUnsupported": "This block type cannot be referenced yet" + }, + "insightsView": { + "title": "语义洞察", + "subtitle": "发现知识背后的隐藏架构", + "resync": "重新同步网络", + "mapping": "映射中…", + "loading": "加载笔记中…", + "mappingTitle": "正在映射您的知识…", + "mappingHint": "This can take one to three minutes. You can keep browsing; the page will update when it's done.", + "analyzeNow": "开始语义分析", + "emptyNeedMoreNotes": "Add {count} more notes to unlock semantic clustering (minimum 10).", + "embeddingsHint": "仅{indexed}/{total}笔记被AI索引。", + "vsGraphHint": "This is not the same as “Link map” (network icon in the sidebar): here, AI groups your notes by theme.", + "openGraphMap": "打开链接地图", + "analysisFailed": "分析失败。请检查AI设置。", + "analysisSuccess": "分析完成:检测到{count}个主题。", + "analysisNoClusters": "尚未检测到主题。", + "staleResults": "显示上次分析的结果。", + "semanticGraphLegend": "主题概览(非链接地图)", + "fitGraphView": "适应视图", + "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": "笔记", + "clusterFallback": "主题 {index}", + "unclusteredNotes": "{count} notes not assigned to a theme (hidden from graph).", + "emptyTitle": "发现您的知识集群", + "emptyDescription": "Click \"Re-sync network\" to analyze your notes and find hidden connections", + "stats": { + "clusters": "集群", + "bridgeNotes": "桥梁笔记" + }, + "clusters": { + "title": "Semantic clusters", + "notesCount": "{count} notes", + "centralNotes": "Central notes", + "emptyCluster": "No notes in this cluster" + }, + "bridgeNotes": { + "title": "Powerful bridge notes", + "score": "分数:{score}%", + "empty": "No significant bridge notes yet. Deepen your research to find new connections." + }, + "suggestions": { + "title": "Missing links (AI generated)", + "bridging": "连接 {clusterA} 和 {clusterB}", + "emptyTitle": "暂无建议", + "emptyDescription": "All your clusters may already be connected!", + "createNote": "创建桥梁笔记" + }, + "unknownNote": "无标题", + "viewSplit": "Split", + "viewGraph": "图谱", + "viewDashboard": "仪表板", + "isolatedClusters": { + "title": "Isolated clusters ({count})", + "badge": "未连接", + "empty": "所有集群已互联!" + }, + "focusCluster": { + "title": "集群焦点已激活", + "description": "This thematic cluster gathers {count} complementary notes. Click on a note to access it directly:", + "close": "关闭" + }, + "badgeDominant": "Dominant", + "bridgeCount": "桥梁", + "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.", + "recalcSystem": { + "title": "重算系统", + "statusSynced": "已同步", + "scheduledCron": "已计划", + "lastSync": "上次同步" + }, + "resetFocus": "重置焦点" } } diff --git a/skills-lock.json b/skills-lock.json new file mode 100644 index 0000000..bf01dc7 --- /dev/null +++ b/skills-lock.json @@ -0,0 +1,11 @@ +{ + "version": 1, + "skills": { + "find-skills": { + "source": "vercel-labs/skills", + "sourceType": "github", + "skillPath": "skills/find-skills/SKILL.md", + "computedHash": "781bd6d3f9b19f8c9af6b53d8d0e4876d0183841b565db34ca7092ffa412d111" + } + } +}