Jak pobrać gigabajty historii wiadomości z chmury i zbudować lokalną wyszukiwarkę z DuckDB i SQLite
Pomyśl, ile razy próbowałeś znaleźć starą wiadomość z załącznikiem, dyskusję o błędzie w Slacku sprzed dwóch lat lub ważny pomysł z DM na Discordzie. Zazwyczaj wszystko kończy się otwarciem dziesięciu różnych kart w przeglądarce, przekopywaniem się przez niewygodne wyszukiwarki korporacyjnych komunikatorów i frustracją, że darmowa archiwa Slacka znów obcięły historię wiadomości.
Niedawno odkryłem msgvault. To aplikacja wiersza poleceń napisana w Go, która pobiera wszystkie konwersacje z kilkunastu źródeł na lokalny dysk, pakuje je do SQLite i Parquet, a na tym wszystkim udostępnia wygodny interfejs webowy, terminal TUI i serwer MCP dla sieci neuronowych.
Po co pobierać historie wiadomości na własny dysk
Idea pobierania danych z usług zewnętrznych nie jest nowa. Jednak najczęściej kopie zapasowe zamieniają się w ogromne foldery z zrzutami JSON lub .eml, które zalegają na dysku twardym. Przeszukiwanie ich bez dedykowanej bazy danych to osobna udręka.
msgvault zastępuje tradycyjne podejście do pobierania archiwów. Narzędzie pobiera maile, czaty, kalendarze i transkrypcje spotkań, a następnie nakłada na nie pełnowymiarową warstwę analityki wyszukiwania. Dane pozostają u ciebie. Brak płatnych subskrypcji za przechowywanie starych wątków ani zewnętrznych procesorów chmurowych.
Oto co narzędzie może zgromadzić w jednolitej bazie danych:
- Skrzynki Gmail (przez OAuth lub Konto Usługi) oraz dowolny standardowy serwer IMAP.
- Kalendarz Google (wydarzenia, uczestnicy i organizatorzy są indeksowani obok maili).
- Korporacyjne czaty Microsoft Teams i Slack, w tym reakcje, pliki i zagnieżdżone wątki.
- Serwery Discord przez wbudowanego agenta-bota.
- Komunikatory z Beeper Desktop (daje dostęp do iMessage, WhatsApp, Telegram, Signal i SMS).
- Nagrania spotkań i transkrypcje z Granola i Circleback.
- Lokalne zrzuty MBOX, archiwa Apple Mail (
.emlx), pliki PST i kopie zapasowe SMS z Androida.
Jak działa archiwizacja pod maską
Architektura projektu została zaprojektowana z myślą o dużych wolumenach danych. Jeśli przez dziesięć lat nagromadziłeś pół miliona maili z obrazami i dokumentami, zwykły dysk twardy zacznie się zacinać już od samej liczby plików w jednym katalogu.
Autorzy rozwiązali to dzięki połączeniu SQLite, DuckDB i dopasowywaniu treści przez hashe.
Podstawowe wyszukiwanie tekstowe działa przez FTS5 w SQLite. Złożona analityka i filtrowanie przez ogromnym archiwum wiadomości działa na DuckDB na wierzchu kolumnowego formatu Parquet. Pozwala to na wykonywanie ciężkich zapytań agregujących w TUI w milisekundach.
Załączniki nie są przechowywane porozrzucane. msgvault deduplikuje je przez SHA-256 i pakuje do izolowanych binarnych paczek. To podejście oszczędza inode'y na Linuksie i nie spowalnia systemu plików na Windowsie ani NAS. W razie potrzeby te paczki zawsze można rozpakować z powrotem za pomocą poleceń konserwacyjnych.
Interfejs webowy, terminal i wyszukiwanie wektorowe
Po pobraniu danych możesz z nimi pracować na trzy sposoby.
Pierwsza opcja: wbudowany interfejs webowy. Demon uruchamia serwer HTTP z aplikacją, która nie potrzebuje zewnętrznych środowisk uruchomieniowych jak Node.js. Interfejs jest zoptymalizowany pod szybką nawigację klawiaturą. Jest wygodny do grupowania maili według domeny, śledzenia kontaktów i przeglądania plików.
Druga ścieżka: TUI prosto w konsoli. Wyświetla szczegółową analitykę całej historii wiadomości. Możesz filtrować konwersacje z konkretnego roku przez konkretnego odbiorcę zaledwie kilkoma naciśnięciami klawiszy.
Trzecia opcja jest dla tych, którzy chcą wyszukiwać wiadomości nie tylko po dokładnych słowach, ale po znaczeniu. msgvault może połączyć się z lokalnym serwerem embeddingów jak Ollama, LM Studio lub llama.cpp.
Po wygenerowaniu wektorów uruchamia się hybrydowe wyszukiwanie. Łączy klasyczne wyszukiwanie pełnotekstowe BM25 z wyszukiwaniem wektorowym przez Reciprocal Rank Fusion. Wpisujesz zapytanie jak „gdzie omawialiśmy zmianę architektury bazy danych
Powiązane projekty