fix: brainstorm infinite loop, ghost cursor, embedding ::vector cast, semantic search, billing stats, usage meter accordion
All checks were successful
Deploy to Production / Build and Deploy (push) Successful in 5s

- Fix useBrainstormSocket: stable guestId via useRef, remove setState in cleanup
- Fix GhostCursor: direct DOM manipulation via refs, no useState re-renders
- Fix all SQL embedding queries: add ::vector cast on text columns
- Fix embedding truncation to 15000 chars (under 8192 token limit)
- Fix NoteEmbedding INSERT: remove non-existent updatedAt column
- Fix billing page: show all quota stats in grid instead of single metric
- Fix usage meter: accordion expand/collapse, per-feature detail
- Fix semantic search: rebuild 103 note embeddings, ::vector cast on vectorSearch
- Fix brainstorm expand/manual-idea/create: ::vector cast on embedding SQL
This commit is contained in:
Antigravity
2026-05-16 18:50:34 +00:00
parent ee8e2bda59
commit 8c7ca69640
117 changed files with 11732 additions and 834 deletions

View File

@@ -0,0 +1,345 @@
{
"sidebar.recent": "Recent",
"sidebar.labels": "Etiketten",
"sidebar.clearFilter": "Filter verwijderen",
"sidebar.sortAlpha": "Sortering A → Z",
"sidebar.sharedNotebookBadge": "· delen",
"notes.deleted": "Opmerking verwijderd",
"notes.deleteFailed": "Kan notitie niet verwijderen",
"notes.recent": "Recent",
"notes.metadataPanel": "Metagegevens",
"notes.historyDisabledTitle": "Versiegeschiedenis",
"notes.historyEnabledTitle": "Geschiedenis geactiveerd!",
"notes.historyEnabledDesc": "Versies van deze notitie worden nu opgeslagen.",
"notes.suggestTitle": "AI-titel",
"notes.generateTitleFromImage": "Genereer titel uit afbeelding",
"notes.titleGenerated": "Gegenereerde titel",
"notes.content": "Inhoud",
"notes.restore": "Herstellen",
"notes.createFailed": "Kan notitie niet maken",
"notes.updateFailed": "Update mislukt",
"notes.archived": "Gearchiveerde notitie",
"notes.archiveFailed": "Archiveren is mislukt",
"notes.sort": "Soort",
"notes.confirmDeleteTitle": "Beoordeling verwijderen",
"notes.leftShare": "Deel verwijderd",
"notes.ideaOrigin": "Oorsprong van het idee",
"notes.noNoteLink": "Puur generatief idee",
"notes.dismiss": "Niet relevant",
"notes.dismissed": "Opmerking verwijderd uit recent",
"notes.generalNotes": "Algemene opmerkingen",
"notes.typeRichText": "Rijke tekst",
"notes.typeChecklist": "To-do-lijst",
"notes.convertedToRichText": "Geconverteerd naar rijke tekst",
"notes.conversionFailed": "Conversie mislukt, blijft in Markdown",
"labels.title": "Etiketten",
"labels.filter": "Filter op tag",
"labels.manage": "Beheer etiketten",
"labels.manageTooltip": "Beheer etiketten",
"labels.delete": "VERWIJDEREN",
"labels.deleteTooltip": "Etiket verwijderen",
"labels.newLabelPlaceholder": "Maak een nieuw etiket",
"labels.namePlaceholder": "Voer de labelnaam in",
"labels.createLabel": "Maak een etiket",
"labels.labelName": "Labelnaam",
"labels.labelColor": "Etiketkleur",
"labels.manageLabels": "Beheer etiketten",
"labels.manageLabelsDescription": "Tags voor deze notitie toevoegen of verwijderen. Klik op een label om de kleur ervan te wijzigen.",
"labels.selectedLabels": "Geselecteerde etiketten",
"labels.filterByLabel": "Filter op tag",
"labels.tagAdded": "'{tag}'-tag toegevoegd",
"labels.showLess": "Zie minder",
"labels.showMore": "Zie meer",
"labels.editLabels": "Etiketten bewerken",
"labels.editLabelsDescription": "Creëer, wijzig kleuren of verwijder labels.",
"labels.noLabelsFound": "Geen tags gevonden.",
"labels.loading": "Laden...",
"labels.notebookRequired": "⚠️ Etiketten zijn alleen verkrijgbaar in notitieboekjes. Verplaats deze notitie eerst naar een notitieboekje.",
"labels.count": "{count} labels",
"ai.chatTab": "Discussie",
"ai.chatPanelContext": "Context",
"ai.contextLabel": "Context",
"ai.contextSourceHeading": "Contextbron",
"ai.tones.professional": "Professioneel",
"ai.tones.creative": "Creatief",
"ai.tones.academic": "Academisch",
"ai.tones.casual": "Ontspannen",
"ai.noImagesError": "Geen afbeeldingen in deze notitie",
"ai.overview": "Samenvatting",
"ai.action.describeImages": "Beschrijf de afbeeldingen",
"ai.generateTitleFromImage": "Genereer titel uit afbeelding",
"ai.titleGenerated": "Titel gegenereerd op basis van afbeelding",
"ai.pptxDownloadButton": "Download .pptx",
"memoryEcho.overlay.sortRecent": "Recent",
"notification.accept": "Accepteren",
"notification.accepted": "Delen geaccepteerd",
"notification.decline": "Weigeren",
"notification.noNotifications": "Geen meldingen",
"notification.downloadPptx": "Download .pptx",
"nav.home": "Welkom",
"nav.recent": "Recent",
"nav.proPlan": "Pro-plan",
"nav.chat": "AI Kat",
"settings.account": "Rekening",
"settings.themeBaseGroup": "Weergave",
"settings.themePalettesGroup": "Kleurenpaletten",
"settings.themeSepia": "Sepia",
"settings.themeMidnight": "Middernacht",
"settings.themeGreen": "Groente",
"settings.themeLavender": "Lavendel",
"settings.themeSand": "Zand",
"settings.themeOcean": "Oceaan",
"settings.themeSunset": "Zonsondergang",
"settings.themeBlue": "Blauw",
"settings.cardSizeMode": "Let op maat",
"settings.cardSizeModeDescription": "Kies tussen bankbiljetten van verschillende of uniforme formaten",
"settings.selectCardSizeMode": "Selecteer weergavemodus",
"settings.cardSizeVariable": "Variabele maten (klein/middelgroot/groot)",
"settings.cardSizeUniform": "Uniforme maat",
"aiSettings.title": "AI",
"aiSettings.providerOpenAI": "OpenAI (wolk)",
"notebook.labels": "Tags:",
"notebook.generatingDescription": "Even geduld a.u.b....",
"admin.chat": "AI Kat",
"admin.ai.chatProvider": "Chatprovider",
"admin.ai.provider": "Leverancier",
"admin.ai.baseUrl": "Basis-URL",
"admin.ai.model": "Model",
"admin.ai.apiKey": "API-sleutel",
"admin.ai.providerOllamaOption": "🦙 Ollama (lokaal en gratis)",
"admin.ai.providerCustomOption": "🔧 Aangepaste OpenAI-compatibel",
"admin.email.status": "Servicestatus",
"admin.email.keySet": "geconfigureerde sleutel",
"admin.email.activeAuto": "Automatische modus: Opnieuw verzenden wordt als prioriteit gebruikt, SMTP als back-up.",
"admin.email.activeSmtp": "Automatische modus: SMTP wordt gebruikt (opnieuw verzenden niet geconfigureerd).",
"admin.email.noneConfigured": "Geen e-mailservice geconfigureerd. Configureer Opnieuw verzenden of SMTP.",
"admin.email.activeProvider": "Actieve leverancier",
"admin.email.testOk": "test geslaagd",
"admin.email.testFail": "mislukte proef",
"admin.smtp.host": "Gastheer",
"admin.users.tierUpdateSuccess": "Abonnement bijgewerkt naar {tier}",
"admin.users.tierUpdateFailed": "Update van abonnement mislukt",
"admin.users.table.subscription": "Abonnement",
"admin.aiTest.provider": "Leverancier :",
"admin.aiTest.model": "Model:",
"admin.aiTest.tipTitle": "Truc:",
"admin.sidebar.dashboard": "Dashboard",
"admin.sidebar.chat": "AI Kat",
"admin.tools.title": "Hulpmiddelen voor agenten",
"admin.tools.brave": "Brave Search-API",
"admin.tools.searxngUrl": "SearXNG-URL",
"admin.dashboard.title": "Dashboard",
"about.platform": "Platform",
"about.technology.frontend": "Front-end",
"about.technology.backend": "Achterkant",
"about.technology.database": "Database",
"about.technology.ai": "AI",
"about.technology.ui": "Interface",
"about.support.feedback": "Opmerkingen",
"support.hostingServers": "Hosting en servers:",
"dataManagement.title": "Gegevens",
"appearance.selectTheme": "Selecteer thema",
"appearance.fontInterDefault": "Inter (standaard)",
"usageMeter.packName": "AI-ontdekkingspakket",
"usageMeter.featureSearch": "Onderzoek",
"usageMeter.featureTags": "Etiketten",
"usageMeter.featureTitles": "Effecten",
"usageMeter.unlimited": "Onbeperkt",
"usageMeter.remaining": "{count} resterend",
"usageMeter.upgradeTitle": "Ga Pro",
"usageMeter.upgradeDescription": "Je hebt alle credits uit het AI-ontdekkingspakket gebruikt. Upgrade naar Pro voor hogere limieten en extra functies.",
"usageMeter.proIncludes": "Pro omvat:",
"usageMeter.proSearch": "100 semantische zoekopdrachten / maand",
"usageMeter.proTags": "200 automatische labels / maand",
"usageMeter.proTitles": "200 autotitels / maand",
"usageMeter.proReformulate": "50 herformuleringen / maand",
"usageMeter.proChat": "100 chatberichten / maand",
"usageMeter.later": "Later",
"usageMeter.upgradePricing": "Ga Pro",
"usageMeter.addApiKey": "Gebruik uw eigen API-sleutel (BYOK)",
"generalSettings.title": "Generaals",
"testPages.titleSuggestions.status": "Status:",
"footer.privacy": "Vertrouwelijkheid",
"documentInfo.tabInfo": "Info",
"languages.targets.chinese": "Chinese",
"agents.searchPlaceholder": "Zoek een makelaar...",
"agents.filterAll": "Alle",
"agents.newBadge": "Nieuw",
"agents.noResults": "Geen enkele agent komt overeen met uw zoekopdracht.",
"agents.types.scraper": "Wachter",
"agents.types.excalidrawGenerator": "Diagram",
"agents.form.slideThemes.bohemian": "Bohemen",
"agents.form.inbox": "Postvak IN",
"agents.form.includeImages": "Voeg afbeeldingen toe",
"agents.form.includeImagesHint": "Extraheer afbeeldingen van geschraapte pagina's en voeg ze toe aan de gegenereerde notitie",
"agents.form.back": "Rug",
"agents.schedule.nextRun": "Volgende uitvoering",
"agents.schedule.pending": "Wachten om te activeren",
"agents.schedule.time": "Uur",
"agents.schedule.dayOfWeek": "Dag van de week",
"agents.schedule.dayOfMonth": "Dag van de maand",
"agents.schedule.days.mon": "Maandag",
"agents.schedule.days.tue": "Dinsdag",
"agents.schedule.days.wed": "Woensdag",
"agents.schedule.days.thu": "DONDERDAG",
"agents.schedule.days.fri": "Vrijdag",
"agents.schedule.days.sat": "ZATERDAG",
"agents.schedule.days.sun": "Zondag",
"agents.toasts.autoRunSuccess": "Agent \"{name}\" is automatisch succesvol uitgevoerd",
"agents.toasts.autoRunError": "Agent '{name}' is mislukt tijdens autorun",
"agents.templates.veilleAI.name": "AI-monitoring",
"agents.templates.veilleTech.name": "Tech-horloge",
"agents.templates.veilleDev.name": "Ontwikkelaar kijken",
"agents.tools.title": "Hulpmiddelen voor agenten",
"agents.tools.configNeeded": "Systeemvereisten",
"agents.help.howToUseContent": "1. Klik op **\"Nieuwe agent\"** (of begin met een **Sjabloon** onderaan de pagina)\n2. Kies een **agenttype** (Onderzoeker, Watcher, Overseer, Custom)\n3. Geef het een **naam** en vul de typespecifieke velden in\n4. Kies eventueel een **doelnotitieboekje** of sla de resultaten op\n5. Selecteer een **frequentie** (Handmatig = u voert het zelf uit)\n6. Klik op **Aanmaken** en druk vervolgens op de knop **Uitvoeren** op de agentkaart\n7. Eenmaal voltooid, verschijnt er een nieuwe notitie in uw doelnotitieboekje",
"agents.help.advancedContent": "Klik op **\"Geavanceerde modus\"** onderaan het formulier om toegang te krijgen tot aanvullende instellingen.\n\n### AI-instructies\n\nMet dit veld kunt u **de standaardsysteemprompt** van de agent overschrijven. Als u dit leeg laat, gebruikt de agent een automatische prompt die is aangepast aan zijn type.\n\n**Waarom het gebruiken?** U wilt het gedrag van de agent precies controleren. Bijvoorbeeld:\n- “Schrijf de samenvatting in het Engels, ook al zijn de bronnen in het Frans”\n- “Structuur de notitie met de secties: Context, Kernpunten, Persoonlijke mening”\n- “Negeer artikelen ouder dan 30 dagen en focus op recent nieuws”\n- \"Biedt voor elk gedetecteerd thema 3 mogelijkheden voor diepgaande studie met links\"\n\n> **Opmerking:** Uw instructies vervangen de standaardinstructies, niet dat ze er iets aan toevoegen.\n\n### Maximale iteraties\n\nDit is het **maximale aantal cycli** dat de agent kan uitvoeren. Eén cyclus = de agent denkt na, roept een tool aan, leest het resultaat en besluit vervolgens over de volgende actie.\n\n- **3-5 iteraties:** voor eenvoudige taken (scrapen van één pagina)\n- **10 iteraties (standaard):** goede balans voor de meeste gevallen\n- **15-25 iteraties:** voor diepgaande zoekopdrachten waarbij de agent verschillende wegen moet verkennen\n\n> **Let op:** Meer iteraties = meer tijd en mogelijk meer API-kosten.",
"agents.help.frequencyContent": "| Frequentie | Gedrag\n|---------------|------------\n| **Handmatig** | U klikt op \"Uitvoeren\" - geen automatische planning\n| **Elk uur** | Rijdt elk uur\n| **Dagelijks** | Wordt één keer per dag uitgevoerd\n| **Wekelijks** | Wordt één keer per week uitgevoerd\n| **Maandelijks** | Wordt één keer per maand uitgevoerd\n\n> **Tip:** Begin met \"Handmatig\" om uw agent te testen en schakel vervolgens over naar de automatische frequentie zodra u tevreden bent.",
"agents.help.targetNotebookContent": "Wanneer een agent zijn taak voltooit, **maakt hij een notitie**. Het **doelnotitieboekje** bepaalt waar ze heen gaat:\n\n- **Inbox** (standaard) — de notitie wordt in uw algemene notities geplaatst\n- **Specifiek notitieboekje** — kies een notitieboekje om de resultaten georganiseerd te houden\n\n> **Tip:** Maak een speciaal notitieboekje zoals “Agent Reports” om alle geautomatiseerde inhoud te centraliseren.",
"chat.timeoutWarning": "De reactie duurt langer dan verwacht...",
"labHeader.live": "Direct",
"labHeader.rename": "Hernoemen",
"richTextEditor.slashCatMedia": "Media",
"richTextEditor.imageUrlPlaceholder": "https://example.com/image.png",
"richTextEditor.slashDiagram": "Diagram",
"richTextEditor.slashSuperscript": "Exposant",
"richTextEditor.superscript": "Exposant",
"brainstorm.title": "Gedachte golven",
"brainstorm.subtitle": "Vergroot de dimensies van potentieel",
"brainstorm.placeholder": "Voer een concept in om te verkennen...",
"brainstorm.generating": "AI oogst zaden van gedachten...",
"brainstorm.newBrainstorm": "Nieuwe brainstorm",
"brainstorm.noSessions": "Nog geen brainstormsessies",
"brainstorm.startOne": "Om te beginnen",
"brainstorm.sessions": "Brainstormsessies",
"brainstorm.seedLabel": "Bron idee",
"brainstorm.brainstormThisIdea": "Brainstorm over dit idee",
"brainstorm.startBrainstorm": "Start de brainstorm",
"brainstorm.spatialMode": "Ruimteverkenningsmodus",
"brainstorm.wave1": "Golf 1",
"brainstorm.wave2": "Golf 2",
"brainstorm.wave3": "Golf 3",
"brainstorm.export": "Exporteren",
"brainstorm.exporting": "Exporteren...",
"brainstorm.wave": "Golf",
"brainstorm.novelty": "Originaliteit",
"brainstorm.originConnection": "Link met herkomst",
"brainstorm.linkedNotes": "Gerelateerde opmerkingen",
"brainstorm.deepen": "Graven",
"brainstorm.deepening": "Generatie...",
"brainstorm.extract": "Maak een notitie",
"brainstorm.converting": "Conversie...",
"brainstorm.dismiss": "Niet relevant",
"brainstorm.noteCreated": "Notitie gemaakt",
"brainstorm.ideas": "ideeën",
"brainstorm.cancel": "Annuleren",
"brainstorm.delete": "VERWIJDEREN",
"brainstorm.ideaOrigin": "Oorsprong van het idee",
"brainstorm.noNoteLink": "Puur generatief idee",
"brainstorm.derived_from": "Afgeleid van",
"brainstorm.opposes": "In tegenstelling tot",
"brainstorm.extends": "Verlengt",
"brainstorm.synthesizes": "Synthetiseer",
"brainstorm.transposes": "Transponeren",
"brainstorm.none_found": "Geen koppeling",
"brainstorm.viewNote": "Zie opmerking",
"brainstorm.addIdea": "Voeg een idee toe",
"brainstorm.manualIdeaPrompt": "Titel van uw idee:",
"brainstorm.invite": "Uitnodiging",
"brainstorm.linkCopied": "Uitnodigingslink gekopieerd!",
"brainstorm.aiIdea": "AI",
"brainstorm.shareDialogTitle": "Deel de brainstorm",
"brainstorm.shareSearchLabel": "Zoek een persoon",
"brainstorm.shareNameOrEmailPlaceholder": "Naam of e-mailadres…",
"brainstorm.shareSubmit": "Deel",
"brainstorm.shareSubmitting": "Verzenden…",
"brainstorm.shareFooterHint": "De persoon ontvangt een melding om te accepteren of te weigeren.",
"brainstorm.sharePublicLink": "Openbare link",
"brainstorm.shareGuestsCanEdit": "Laat gasten bewerken",
"brainstorm.feedbackInviteSent": "Uitnodiging verzonden!",
"brainstorm.feedbackInviteResent": "Uitnodiging terug!",
"brainstorm.feedbackAlreadyShared": "Deze persoon heeft al toegang tot deze brainstorm.",
"brainstorm.feedbackAlreadyPending": "Er is al een uitnodiging in behandeling voor deze persoon.",
"brainstorm.feedbackGenericError": "Fout",
"brainstorm.unnamedPerson": "Naamloos",
"brainstorm.canvasEditTitleReply": "Antwoord",
"brainstorm.canvasEditTitleNewIdea": "Nieuw idee",
"brainstorm.canvasPlaceholderReply": "Jouw antwoord…",
"brainstorm.canvasPlaceholderIdea": "Jouw idee…",
"brainstorm.canvasShortcutSave": "redden",
"brainstorm.canvasShortcutCancel": "Annuleren",
"brainstorm.canvasChildBranch": "kind",
"brainstorm.canvasDoubleClickHint": "Dubbelklik om een idee toe te voegen",
"brainstorm.ideaDetailConnection": "Verbinding",
"brainstorm.ideaDetailNovelty": "Originaliteit",
"brainstorm.ideaDetailWave": "Golf",
"brainstorm.waveFlavorAnalogy": "Analogie",
"brainstorm.liveCollaborationTitle": "Live samenwerking",
"brainstorm.liveStatus": "Live",
"brainstorm.liveYouMarker": "(JIJ)",
"brainstorm.liveOtherParticipants": "{count} andere deelnemers",
"brainstorm.guestReadOnlyNotice": "Je bekijkt deze brainstorm als gast. Log in om te bewerken.",
"brainstorm.impactNotesEnriched": "{count} verrijkte notitie(s)",
"brainstorm.impactNotesMarkedDry": "{count} notitie(s) gemarkeerd als droog",
"brainstorm.exportNotebookPrefix": "Notitieboekje :",
"brainstorm.playbackStep": "Stap {current}/{total}",
"brainstorm.playbackStepsCount": "{count} stappen",
"brainstorm.playbackReturnToLive": "Keer terug om te leven",
"brainstorm.canvasWaitingHint": "Het canvas wacht op jouw vonk...",
"brainstorm.seedNodeBadge": "ZAAD",
"brainstorm.originalSeedDescription": "Eerste bronidee",
"brainstorm.convertedToNoteStatus": "Omgerekend naar beoordeling",
"brainstorm.toastExpandSuccess": "Uitgebreide ideeën!",
"brainstorm.toastExpandFailed": "Mislukking van de uitbreiding",
"brainstorm.toastDismissSuccess": "Idee afgewezen",
"brainstorm.toastDismissFailed": "Gat-mislukking",
"brainstorm.toastConvertSuccess": "Idee omgezet in notitie!",
"brainstorm.toastConvertFailed": "Conversie mislukt",
"brainstorm.toastExportNoteSuccess": "Geëxporteerd als een notitie!",
"brainstorm.toastExportFailed": "Exporteren is mislukt",
"brainstorm.legendSeed": "Zaad",
"brainstorm.legendDisruptions": "Uiteenvallen",
"brainstorm.exportFailedMessage": "Exporteren is mislukt",
"brainstorm.exportDefaultNoteTitle": "Synthese",
"brainstorm.exportOpening": "Opening…",
"brainstorm.ownerBadge": "Eigenaar",
"brainstorm.waveBadge": "Golf {wave}",
"byokSettings.title": "Uw API-sleutels (BYOK)",
"byokSettings.description": "Verbind uw eigen leverancierssleutels om Discovery Pack-quota te omzeilen. Sleutels worden in rust gecodeerd.",
"byokSettings.badgeActive": "BYOK actief",
"byokSettings.tierRequired": "BYOK vereist een Pro-abonnement of hoger.",
"byokSettings.provider": "Leverancier",
"byokSettings.providerPlaceholder": "Kies een leverancier",
"byokSettings.alias": "Formulering (optioneel)",
"byokSettings.aliasPlaceholder": "ex. OpenAI pro",
"byokSettings.apiKey": "API-sleutel",
"byokSettings.save": "Sleutel opslaan",
"byokSettings.saved": "Geregistreerde API-sleutel",
"byokSettings.deleted": "API-sleutel verwijderd",
"byokSettings.error": "Kan sleutel niet registreren",
"byokSettings.loadError": "Kan sleutels niet laden",
"byokSettings.loading": "Laden...",
"byokSettings.empty": "Geen API-sleutel geconfigureerd.",
"byokSettings.confirmDelete": "Deze API-sleutel definitief verwijderen?",
"billing.proAnnualPrice": "€ 99",
"billing.businessAnnualPrice": "€ 299",
"billing.enterpriseTitle": "Bedrijf",
"landing.pricing.perUser": "+ 3,90€/gebruiker",
"landing.pricing.perUserAnnual": "+ 2,90€/gebruiker, jaarlijks gefactureerd",
"landing.pricing.business.feature1": "BYOK (13 leveranciers)",
"landing.pricing.enterprise.feature4": "Toegewijde ondersteuning",
"landing.pricing.enterprise.feature5": "Live onboarding",
"landing.footer.product.title": "Product",
"landing.footer.community.title": "Gemeenschap",
"ai.featureLocked": "Deze functie vereist het PRO-abonnement of hoger.",
"ai.quotaExceeded": "Maandelijkse limiet bereikt. Reset volgende maand.",
"profile.tab": "Profiel",
"about.tab": "Over",
"appearance.tab": "Weergave",
"billing.tab": "Facturering",
"usageMeter.featureChat": "AI-berichten",
"usageMeter.featureReformulate": "Herschrijvingen",
"usageMeter.featureBrainstormCreate": "Brainstorm-aanmaak",
"usageMeter.featureBrainstormExpand": "Brainstorm-uitbreidingen",
"usageMeter.featureBrainstormEnrich": "Brainstorm-verrijkingen"
}