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,289 @@
{
"sidebar.clearFilter": "Usuń filtr",
"sidebar.sortAlpha": "Sortowanie A → Z",
"sidebar.sharedNotebookBadge": "· dzielenie się",
"notes.deleted": "Uwaga usunięta",
"notes.deleteFailed": "Nie udało się usunąć notatki",
"notes.historyDisabledTitle": "Historia wersji",
"notes.historyEnabledTitle": "Historia aktywowana!",
"notes.historyEnabledDesc": "Wersje tej notatki zostaną teraz zapisane.",
"notes.suggestTitle": "Tytuł AI",
"notes.generateTitleFromImage": "Wygeneruj tytuł z obrazu",
"notes.titleGenerated": "Wygenerowany tytuł",
"notes.content": "Treść",
"notes.restore": "Przywrócić",
"notes.createFailed": "Nie można utworzyć notatki",
"notes.updateFailed": "Aktualizacja nie powiodła się",
"notes.archived": "Zarchiwizowana notatka",
"notes.archiveFailed": "Archiwizacja nie powiodła się",
"notes.sort": "Sortować",
"notes.confirmDeleteTitle": "Usuń ocenę",
"notes.leftShare": "Udostępnienie zostało usunięte",
"notes.ideaOrigin": "Pochodzenie pomysłu",
"notes.noNoteLink": "Pomysł czysto twórczy",
"notes.dismiss": "Nie dotyczy",
"notes.dismissed": "Uwaga usunięta z ostatnich",
"notes.generalNotes": "Uwagi ogólne",
"notes.convertedToRichText": "Przekonwertowano na tekst sformatowany",
"notes.conversionFailed": "Konwersja nie powiodła się, pozostaje w Markdown",
"labels.title": "Etykiety",
"labels.filter": "Filtruj według tagu",
"labels.manage": "Zarządzaj etykietami",
"labels.manageTooltip": "Zarządzaj etykietami",
"labels.delete": "USUWAĆ",
"labels.deleteTooltip": "Usuń etykietę",
"labels.newLabelPlaceholder": "Utwórz nową etykietę",
"labels.namePlaceholder": "Wprowadź nazwę etykiety",
"labels.createLabel": "Utwórz etykietę",
"labels.labelName": "Nazwa etykiety",
"labels.labelColor": "Kolor etykiety",
"labels.manageLabels": "Zarządzaj etykietami",
"labels.manageLabelsDescription": "Dodaj lub usuń tagi dla tej notatki. Kliknij etykietę, aby zmienić jej kolor.",
"labels.selectedLabels": "Wybrane etykiety",
"labels.filterByLabel": "Filtruj według tagu",
"labels.tagAdded": "Dodano tag „{tag}”.",
"labels.showLess": "Zobacz mniej",
"labels.showMore": "Zobacz więcej",
"labels.editLabels": "Edytuj etykiety",
"labels.editLabelsDescription": "Twórz, zmieniaj kolory lub usuwaj etykiety.",
"labels.noLabelsFound": "Nie znaleziono tagów.",
"labels.loading": "Załadunek...",
"labels.notebookRequired": "⚠️ Etykiety dostępne są wyłącznie w notesach. Najpierw przenieś tę notatkę do notatnika.",
"ai.chatTab": "Dyskusja",
"ai.contextSourceHeading": "Źródło kontekstu",
"ai.tones.professional": "Profesjonalny",
"ai.tones.creative": "Twórczy",
"ai.tones.academic": "Akademicki",
"ai.tones.casual": "Zrelaksowany",
"ai.noImagesError": "Brak obrazów w tej notatce",
"ai.overview": "Streszczenie",
"ai.action.describeImages": "Opisz obrazy",
"ai.aiCopilot": "Drugi pilot AI",
"ai.generateTitleFromImage": "Wygeneruj tytuł z obrazu",
"ai.titleGenerated": "Tytuł wygenerowany na podstawie obrazu",
"notification.accept": "Przyjąć",
"notification.accepted": "Udostępnienie zaakceptowane",
"notification.decline": "Odmawiać",
"notification.noNotifications": "Brak powiadomień",
"notification.systemNotification": "System",
"settings.themeBaseGroup": "Wyświetlacz",
"settings.themePalettesGroup": "Palety kolorów",
"settings.themeSepia": "Sepia",
"settings.themeMidnight": "Północ",
"settings.themeGreen": "Zielony",
"settings.themeLavender": "Lawenda",
"settings.themeSand": "Piasek",
"settings.themeOcean": "Ocean",
"settings.themeSunset": "Zachód słońca",
"settings.themeBlue": "Niebieski",
"settings.cardSizeMode": "Rozmiar notatki",
"settings.cardSizeModeDescription": "Wybieraj pomiędzy nutami o różnych lub jednakowych rozmiarach",
"settings.selectCardSizeMode": "Wybierz tryb wyświetlania",
"settings.cardSizeVariable": "Różne rozmiary (mały/średni/duży)",
"settings.cardSizeUniform": "Jednolity rozmiar",
"aiSettings.title": "AI",
"notebook.generatingDescription": "Proszę czekać...",
"admin.ai.model": "Model",
"admin.email.status": "Stan usługi",
"admin.email.keySet": "skonfigurowany klucz",
"admin.email.activeAuto": "Tryb automatyczny: Ponowne wysłanie będzie traktowane jako priorytet, SMTP jako kopia zapasowa.",
"admin.email.activeSmtp": "Tryb automatyczny: używany będzie SMTP (ponowne wysyłanie nie jest skonfigurowane).",
"admin.email.noneConfigured": "Nie skonfigurowano żadnej usługi e-mail. Skonfiguruj wysyłanie ponownie lub SMTP.",
"admin.email.activeProvider": "Aktywny dostawca",
"admin.email.testOk": "test zaliczony",
"admin.email.testFail": "nieudany test",
"admin.smtp.host": "Gospodarz",
"admin.users.tierUpdateSuccess": "Subskrypcja zaktualizowana do {tier}",
"admin.users.tierUpdateFailed": "Aktualizacja subskrypcji nie powiodła się",
"admin.users.table.subscription": "Prenumerata",
"admin.aiTest.model": "Modelka:",
"admin.tools.searxng": "SearXNG (własny hosting)",
"admin.tools.brave": "Odważne wyszukiwanie API",
"about.technology.frontend": "Front-end",
"about.technology.backend": "Zaplecze",
"about.technology.ai": "sztuczna inteligencja",
"about.technology.ui": "Interfejs",
"dataManagement.title": "Dane",
"appearance.selectTheme": "Wybierz motyw",
"appearance.fontInterDefault": "Inter (domyślny)",
"usageMeter.packName": "Pakiet odkrywania sztucznej inteligencji",
"usageMeter.featureSearch": "Badania",
"usageMeter.featureTags": "Etykiety",
"usageMeter.featureTitles": "Papiery wartościowe",
"usageMeter.unlimited": "Nieograniczony",
"usageMeter.remaining": "Pozostało: {count}",
"usageMeter.upgradeTitle": "Przejdź na zawodowstwo",
"usageMeter.upgradeDescription": "Wykorzystałeś wszystkie kredyty z pakietu odkrywczego AI. Przejdź na wersję Pro, aby uzyskać wyższe limity i dodatkowe funkcje.",
"usageMeter.proIncludes": "Profesjonalne obejmuje:",
"usageMeter.proSearch": "100 wyszukiwań semantycznych / miesiąc",
"usageMeter.proTags": "200 etykiet samochodowych / miesiąc",
"usageMeter.proTitles": "200 tytułów samochodów / miesiąc",
"usageMeter.proReformulate": "50 przeformułowań/miesiąc",
"usageMeter.proChat": "100 wiadomości na czacie / miesiąc",
"usageMeter.later": "Później",
"usageMeter.upgradePricing": "Przejdź na zawodowstwo",
"usageMeter.addApiKey": "Użyj własnego klucza API (BYOK)",
"generalSettings.title": "Generalicja",
"testPages.titleSuggestions.status": "Stan:",
"agents.searchPlaceholder": "Znajdź agenta...",
"agents.filterAll": "Wszystko",
"agents.newBadge": "Nowy",
"agents.noResults": "Żaden agent nie pasuje do Twojego wyszukiwania.",
"agents.types.scraper": "Stróż",
"agents.types.excalidrawGenerator": "Diagram",
"agents.form.includeImages": "Dołącz obrazy",
"agents.form.includeImagesHint": "Wyodrębnij obrazy ze zeskrobanych stron i dołącz je do wygenerowanej notatki",
"agents.form.back": "Z powrotem",
"agents.schedule.nextRun": "Następna egzekucja",
"agents.schedule.pending": "Oczekiwanie na uruchomienie",
"agents.schedule.time": "Godzina",
"agents.schedule.dayOfWeek": "Dzień tygodnia",
"agents.schedule.dayOfMonth": "Dzień miesiąca",
"agents.schedule.days.mon": "Poniedziałek",
"agents.schedule.days.tue": "Wtorek",
"agents.schedule.days.wed": "Środa",
"agents.schedule.days.thu": "CZWARTEK",
"agents.schedule.days.fri": "Piątek",
"agents.schedule.days.sat": "SOBOTA",
"agents.schedule.days.sun": "Niedziela",
"agents.toasts.autoRunSuccess": "Agent „{name}” został automatycznie uruchomiony pomyślnie",
"agents.toasts.autoRunError": "Agent „{name}” nie powiódł się podczas automatycznego uruchamiania",
"agents.help.howToUseContent": "1. Kliknij **„Nowy agent”** (lub zacznij od **Szablon** na dole strony)\n2. Wybierz **typ agenta** (Badacz, Obserwator, Nadzorca, Niestandardowy)\n3. Nadaj mu **nazwę** i wypełnij pola specyficzne dla typu\n4. Opcjonalnie wybierz **notatnik docelowy** lub zapisz wyniki\n5. Wybierz **częstotliwość** (ręcznie = uruchamiasz samodzielnie)\n6. Kliknij **Utwórz**, a następnie naciśnij przycisk **Wykonaj** na karcie agenta\n7. Po zakończeniu w docelowym notatniku pojawi się nowa notatka",
"agents.help.advancedContent": "Kliknij **„Tryb zaawansowany”** na dole formularza, aby uzyskać dostęp do dodatkowych ustawień.\n\n### Instrukcje AI\n\nTo pole umożliwia **zastąpienie domyślnego monitu systemowego** agenta. Jeżeli pozostawisz to pole puste, agent użyje automatycznego podpowiedzi dostosowanego do jego typu.\n\n**Po co go używać?** Chcesz dokładnie kontrolować zachowanie agenta. Na przykład:\n- „Napisz streszczenie w języku angielskim, nawet jeśli źródła są w języku francuskim”\n- „Ułóż notatkę w oparciu o sekcje: Kontekst, Kluczowe punkty, Osobista opinia”\n- „Ignoruj artykuły starsze niż 30 dni i skup się na najnowszych wiadomościach”\n- „Dla każdego wykrytego tematu oferuje 3 ścieżki dogłębnej analizy z linkami”\n\n> **Uwaga:** Twoje instrukcje zastępują instrukcje domyślne, a nie tylko je uzupełniają.\n\n### Maksymalna liczba iteracji\n\nJest to **maksymalna liczba cykli**, jaką agent może wykonać. Jeden cykl = agent myśli, wywołuje narzędzie, odczytuje wynik, po czym decyduje o kolejnym działaniu.\n\n- **3-5 iteracji:** dla prostych zadań (skrobanie pojedynczej strony)\n- **10 iteracji (domyślnie):** dobra równowaga w większości przypadków\n- **1525 iteracji:** w przypadku głębokich wyszukiwań, w których agent musi zbadać kilka możliwości\n\n> **Uwaga:** Więcej iteracji = więcej czasu i potencjalnie więcej kosztów API.",
"agents.help.frequencyContent": "| Częstotliwość | Zachowanie\n|--------------|------------\n| **Podręcznik** | Klikasz „Uruchom” — brak automatycznego planowania\n| **Co godzinę** | Kursuje co godzinę\n| **Codziennie** | Kursuje raz dziennie\n| **Cotygodniowo** | Kursuje raz w tygodniu\n| **Miesięcznie** | Kursuje raz w miesiącu\n\n> **Wskazówka:** Zacznij od „Ręcznego”, aby przetestować agenta, a następnie przełącz się na częstotliwość automatyczną, gdy będziesz zadowolony.",
"agents.help.targetNotebookContent": "Kiedy agent wykona swoje zadanie, **tworzy notatkę**. **Notatnik docelowy** określa, dokąd zmierza:\n\n- **Skrzynka odbiorcza** (domyślnie) — notatka trafia do notatek ogólnych\n- **Konkretny notatnik** — wybierz notatnik, aby uporządkować wyniki\n\n> **Wskazówka:** Utwórz dedykowany notatnik, taki jak „Raporty agenta”, aby scentralizować całą zautomatyzowaną zawartość.",
"chat.timeoutWarning": "Odpowiedź trwa dłużej, niż oczekiwano…",
"labHeader.rename": "Przemianować",
"richTextEditor.imageUrlPlaceholder": "https://example.com/image.png",
"richTextEditor.slashDiagram": "Diagram",
"brainstorm.title": "Fale myślowe",
"brainstorm.subtitle": "Rozszerz wymiary potencjału",
"brainstorm.placeholder": "Wprowadź koncepcję do odkrycia...",
"brainstorm.generating": "AI zbiera nasiona myśli...",
"brainstorm.newBrainstorm": "Nowa burza mózgów",
"brainstorm.noSessions": "Nie ma jeszcze burzy mózgów",
"brainstorm.startOne": "Aby rozpocząć",
"brainstorm.sessions": "Sesje burzy mózgów",
"brainstorm.seedLabel": "Pomysł źródłowy",
"brainstorm.brainstormThisIdea": "Przemyśl ten pomysł",
"brainstorm.startBrainstorm": "Rozpocznij burzę mózgów",
"brainstorm.spatialMode": "Tryb eksploracji kosmosu",
"brainstorm.wave1": "Fala 1",
"brainstorm.wave2": "Fala 2",
"brainstorm.wave3": "Fala 3",
"brainstorm.export": "Eksport",
"brainstorm.exporting": "Eksport...",
"brainstorm.wave": "Fala",
"brainstorm.novelty": "Oryginalność",
"brainstorm.originConnection": "Link do pochodzenia",
"brainstorm.linkedNotes": "Powiązane uwagi",
"brainstorm.deepen": "Kopać",
"brainstorm.deepening": "Generacja...",
"brainstorm.extract": "Utwórz notatkę",
"brainstorm.converting": "Konwersja...",
"brainstorm.dismiss": "Nie dotyczy",
"brainstorm.noteCreated": "Notatka utworzona",
"brainstorm.ideas": "pomysły",
"brainstorm.cancel": "Anulować",
"brainstorm.delete": "USUWAĆ",
"brainstorm.ideaOrigin": "Pochodzenie pomysłu",
"brainstorm.noNoteLink": "Pomysł czysto twórczy",
"brainstorm.derived_from": "Pochodzi z",
"brainstorm.opposes": "W opozycji do",
"brainstorm.extends": "Rozciąga się",
"brainstorm.synthesizes": "Syntetyzować",
"brainstorm.transposes": "Transponować",
"brainstorm.none_found": "Brak linku",
"brainstorm.viewNote": "Zobacz notatkę",
"brainstorm.addIdea": "Dodaj pomysł",
"brainstorm.manualIdeaPrompt": "Tytuł Twojego pomysłu:",
"brainstorm.invite": "Zapraszać",
"brainstorm.linkCopied": "Link do zaproszenia skopiowany!",
"brainstorm.shareDialogTitle": "Podziel się burzą mózgów",
"brainstorm.shareSearchLabel": "Wyszukaj osobę",
"brainstorm.shareNameOrEmailPlaceholder": "Imię i nazwisko lub e-mail…",
"brainstorm.shareSubmit": "Udział",
"brainstorm.shareSubmitting": "Przesyłka…",
"brainstorm.shareFooterHint": "Osoba otrzyma powiadomienie o konieczności zaakceptowania lub odrzucenia.",
"brainstorm.sharePublicLink": "Link publiczny",
"brainstorm.shareGuestsCanEdit": "Zezwalaj gościom na edycję",
"brainstorm.feedbackInviteSent": "Zaproszenie wysłane!",
"brainstorm.feedbackInviteResent": "Zaproszenie wróciło!",
"brainstorm.feedbackAlreadyShared": "Ta osoba ma już dostęp do tej burzy mózgów.",
"brainstorm.feedbackAlreadyPending": "Zaproszenie dla tej osoby jest już oczekujące.",
"brainstorm.feedbackGenericError": "Błąd",
"brainstorm.unnamedPerson": "Anonimowy",
"brainstorm.canvasEditTitleReply": "Odpowiedź",
"brainstorm.canvasEditTitleNewIdea": "Nowy pomysł",
"brainstorm.canvasPlaceholderReply": "Twoja odpowiedź…",
"brainstorm.canvasPlaceholderIdea": "Twój pomysł…",
"brainstorm.canvasShortcutSave": "ratować",
"brainstorm.canvasShortcutCancel": "Anulować",
"brainstorm.canvasChildBranch": "dziecko",
"brainstorm.canvasDoubleClickHint": "Kliknij dwukrotnie, aby dodać pomysł",
"brainstorm.ideaDetailConnection": "Połączenie",
"brainstorm.ideaDetailNovelty": "Oryginalność",
"brainstorm.ideaDetailWave": "Fala",
"brainstorm.waveFlavorAnalogy": "Analogia",
"brainstorm.liveCollaborationTitle": "Współpraca na żywo",
"brainstorm.liveStatus": "Na żywo",
"brainstorm.liveYouMarker": "(TY)",
"brainstorm.liveOtherParticipants": "{count} innych uczestników",
"brainstorm.guestReadOnlyNotice": "Oglądasz tę burzę mózgów jako gość. Zaloguj się, aby edytować.",
"brainstorm.impactNotesEnriched": "wzbogacone notatki ({count})",
"brainstorm.impactNotesMarkedDry": "{count} notatki oznaczone jako suche",
"brainstorm.exportNotebookPrefix": "Zeszyt :",
"brainstorm.playbackStep": "Krok {current}/{total}",
"brainstorm.playbackStepsCount": "{count} kroków",
"brainstorm.playbackReturnToLive": "Wróć do życia",
"brainstorm.canvasWaitingHint": "Płótno czeka na Twoją iskrę…",
"brainstorm.seedNodeBadge": "NASIONO",
"brainstorm.originalSeedDescription": "Wstępny pomysł na źródło",
"brainstorm.convertedToNoteStatus": "Przekształcone w ocenę",
"brainstorm.toastExpandSuccess": "Rozbudowane pomysły!",
"brainstorm.toastExpandFailed": "Niepowodzenie rozszerzenia",
"brainstorm.toastDismissSuccess": "Pomysł odrzucony",
"brainstorm.toastDismissFailed": "Błąd luki",
"brainstorm.toastConvertSuccess": "Pomysł zamieniony w notatkę!",
"brainstorm.toastConvertFailed": "Konwersja nie powiodła się",
"brainstorm.toastExportNoteSuccess": "Wyeksportowano jako notatkę!",
"brainstorm.toastExportFailed": "Eksport nie powiódł się",
"brainstorm.legendSeed": "Nasienie",
"brainstorm.legendDisruptions": "Rozstania",
"brainstorm.exportFailedMessage": "Eksport nie powiódł się",
"brainstorm.exportDefaultNoteTitle": "Synteza",
"brainstorm.exportOpening": "Otwór…",
"brainstorm.ownerBadge": "Właściciel",
"brainstorm.waveBadge": "Fala {wave}",
"byokSettings.title": "Twoje klucze API (BYOK)",
"byokSettings.description": "Połącz własne klucze dostawców, aby ominąć limity Discovery Pack. Klucze są szyfrowane w stanie spoczynku.",
"byokSettings.badgeActive": "BYOK aktywny",
"byokSettings.tierRequired": "BYOK wymaga subskrypcji Pro lub wyższej.",
"byokSettings.provider": "Dostawca",
"byokSettings.providerPlaceholder": "Wybierz dostawcę",
"byokSettings.alias": "Sformułowanie (opcjonalnie)",
"byokSettings.aliasPlaceholder": "były. OpenAI profesjonalista",
"byokSettings.apiKey": "Klucz API",
"byokSettings.save": "Zapisz klucz",
"byokSettings.saved": "Zarejestrowany klucz API",
"byokSettings.deleted": "Usunięto klucz API",
"byokSettings.error": "Nie można zarejestrować klucza",
"byokSettings.loadError": "Nie można załadować kluczy",
"byokSettings.loading": "Załadunek...",
"byokSettings.empty": "Nie skonfigurowano klucza API.",
"byokSettings.confirmDelete": "Trwale usunąć ten klucz API?",
"billing.enterpriseTitle": "Biznes",
"landing.pricing.perUser": "+ 3,90€/użytkownika",
"landing.pricing.perUserAnnual": "+ 2,90€/użytkownika, rozliczenie roczne",
"ai.featureLocked": "Ta funkcja wymaga planu PRO lub wyższego.",
"ai.quotaExceeded": "Osiągnięto limit miesięczny. Reset w przyszłym miesiącu.",
"profile.tab": "Profil",
"about.tab": "O aplikacji",
"appearance.tab": "Wygląd",
"billing.tab": "Rozliczenia",
"usageMeter.featureChat": "Wiadomości AI",
"usageMeter.featureReformulate": "Przeformułowania",
"usageMeter.featureBrainstormCreate": "Tworzenia brainstorm",
"usageMeter.featureBrainstormExpand": "Rozszerzenia brainstorm",
"usageMeter.featureBrainstormEnrich": "Wzbogacenia brainstorm"
}