Przejdź do głównej zawartości
docs
GitHub

Architektura MCP

Proces pomocniczy, uwierzytelniony broker, adaptery natywne, most UI i integracja Chat.

Lomi oddziela obsługę protokołu MCP, autoryzację i trwałe operacje oraz wykonywanie działań na zasobach desktopowych. Ten sam broker obsługuje zewnętrznych klientów i wbudowany Chat AI. Konfiguracja opisuje podłączanie od strony użytkownika.

Komponent Odpowiedzialność Główne źródło
Punkt wejścia aplikacji Rozpoznaje --mcp przed startem GUI i uruchamia serwer bez okna. src-tauri/src/main.rs
lomi-mcp Serwer stdio rmcp, katalog 74 narzędzi, parsowanie schematów, kodowanie wyników/obrazów i most Chat. src-tauri/crates/lomi-mcp/src/
lomi-control-protocol Zamknięte typy żądań/wyników, kontrakty, błędy, Control API 1.0 i IPC 1. src-tauri/crates/lomi-control-protocol/src/
lomi-control-core Podpisane wykrywanie, uwierzytelniony klient/broker, upoważnienia, lease, potwierdzenia, anulowanie i autoryzacja domen. src-tauri/crates/lomi-control-core/src/
Adapter natywnej aplikacji Kontrola platformy, preferencje startu, życie brokera, zaufane decyzje i callbacki zasobów. src-tauri/src/agent_control.rs
Most głównego okna Publikacja tożsamości układu, przejęcie/potwierdzenie uprawnionych operacji UI, zachowanie zasobów/buforów i istniejąca ochrona. src/agent-control.ts, src/agent-*.ts
Interfejs Settings Rejestracja klientów, zgody na parowanie/efekty, sesje/cofanie dostępu, start i YOLO. src/AgentControlSettingsPage.tsx, src/AgentControlPairing.tsx, src/McpClientsSettings.tsx
Adaptery zasobów Istniejące PTY, podwidoki przeglądarki, pliki/edytor/Git, zarządzany Android i natywny Chat. src-tauri/src/{terminal,browser,files,android,chat}/, zachowane mechanizmy frontendu

Proces pomocniczy nie posiada terminala, przeglądarki ani emulatora aplikacji. Odczyt katalogu nie przyznaje dostępu. Przed parowaniem status/diagnostyka pokazują stan połączenia bez ujawniania obszarów roboczych.

Host MCP uruchamia aplikację z --mcp i argumentami podpisanego wykrywania albo opcjonalne lomi-mcp z argumentami bezpośredniej instancji. Standardowe komunikaty MCP to JSON-RPC rozdzielany nową linią na stdin/stdout. Diagnostyka używa stderr. Serwer udostępnia narzędzia; nie rejestruje osobnego katalogu resources/prompts MCP.

Broker działa wewnątrz aplikacji desktopowej. Na zweryfikowanym systemie tworzy Unix-domain socket w prywatnym katalogu tymczasowym (0700), z trybem gniazda 0600. Nie jest publiczną usługą TCP/HTTP. Wykrywanie i trwały stan znajdują się pod agent-control w danych aplikacji.

  1. Automatyczna rejestracja przypina publiczną część trwałego klucza Ed25519 w argumentach klienta.
  2. Lomi publikuje discovery.json z podpisanym payloadem endpointu: ścieżką gniazda, ID instancji, SHA-256 certyfikatu brokera i wersją IPC.
  3. Proces pomocniczy sprawdza podpis, właściciela, uprawnienia, typ pliku i limity przed zaufaniem endpointowi. Sam przypięty klucz nie upoważnia klienta.
  4. Rejestracja połączenia sprawdza tego samego użytkownika i nowe certyfikaty sesji. Settings pokazuje ID prośby/tożsamość certyfikatu do jawnej zgody albo zapisana polityka YOLO zatwierdza automatycznie.
  5. Zatwierdzone połączenie wymienia ramkowane żądania przez wzajemnie uwierzytelnione TLS 1.3 na lokalnym gnieździe. Zaufanie jest przypięte do zatwierdzonych tożsamości; early data i wznawianie TLS są wyłączone.

Zmiana endpointu nie wymaga edycji poprawnej podpisanej rejestracji. Zmiana programu lub tożsamości rejestracji wymaga. Restart tworzy nową instancję i unieważnia dostęp; automatyczne wykrywanie nie wznawia przezroczyście sparowanej sesji.

Główne okno publikuje projekcję z epoką UI, rewizją układu i trwałymi ID projektu/obszaru/panelu. Jest ona wejściem autoryzacji i widokiem routingu, a nie drugim niezależnie zapisanym układem.

Broker przyjmuje żądania wyłącznie dla bieżącego upoważnienia połączenia. Ponownie sprawdza zakresy, własność, generację, rewizje, limity i anulowanie przy odpowiednich granicach przyjęcia/wykonania/odczytu. Natywne pozwolenia mają termin i stan cofnięcia. Zgody wiążą dokładne niezmienne plany i nie mogą pochodzić z dowolnych argumentów MCP.

Część pracy jest całkowicie natywna, np. ograniczone odczyty przypiętych plików, rezerwacje danych i cykl urządzenia. Praca zależna od UI używa jednorazowego mostu claim/commit/ack do istniejącego głównego okna. Zachowuje undo wspólnego edytora, działające PTY, generacje przeglądarki/urządzenia i ochronę zamykania niezapisanych plików. Ponowna rejestracja głównego okna unieważnia wcześniejsze upoważnienia zamiast przyjmować stare potwierdzenia renderera.

Tylko zaufane widoki aplikacji mogą wywoływać jej komendy. Podwidoki przeglądarki raportują własne ograniczone zdarzenia i nie mają uprzywilejowanych komend main/Settings. Settings podejmuje decyzje o dostępie; główne okno odpowiada za układ i koordynację żywych zasobów UI.

control.sqlite3 przechowuje epoki ponawiania, potwierdzenia/przejścia operacji i rezerwacje artefaktów. Międzyprocesowa blokada właściciela zapobiega konkurencyjnemu posiadaniu tej samej bazy. SQLite używa WAL z FULL i natywnymi ustawieniami full-fsync. Start sprawdza integralność WAL; uszkodzone/nieobsługiwane dane są zachowane zamiast zastąpienia pustą historią.

Rezerwacja poprzedza efekt. Duplikat tożsamości i dokładnego fingerprintu zwraca istniejące potwierdzenie; błąd trwałego zapisu blokuje wykonanie. Po ponownym otwarciu niezakończone operacje stają się niepewne, nie są kolejkowane do odtworzenia. Trwały zapis dokumentuje wiedzę Lomi; nie jest transakcją cofającą zewnętrzne efekty.

Lease, historia numerów wejścia i natywna własność procesu są stanem sesji. Artefakty zachowują niezmienne bajty i pierwotną klasyfikację źródła; odczyt/eksport ponownie sprawdza źródło. Operacje opisują stany, terminy i limity przyjęcia.

Wbudowany Chat używa tego samego natywnego katalogu/parsera/kodera lomi-mcp i uwierzytelnionego Client, bez osobnego procesu stdio dla każdej rozmowy.

  1. Natywny backend Chat zachowuje ChatSession dla rozmowy i endpointu brokera. Nieważna/cofnięta sesja jest zastępowana; poprawna może przetrwać kolejne tury i montowanie widoków.
  2. Backend przekazuje katalog i wskazówki pochodzenia do dołączonego środowiska AI. ID projektu/obszaru są wskazówkami; nie przyznają dostępu.
  3. Środowisko AI zamienia schematy na narzędzia AI SDK, przekazuje ID/argumenty przez natywny protokół procesu i konwertuje tekst/wyniki/obrazy na kontekst modelu dostawcy.
  4. Backend sprawdza wywołanie względem zaufanego katalogu, nakłada limity i wykonuje je przez zachowaną uwierzytelnioną sesję MCP rozmowy.
  5. Przy wyłączonym YOLO Lomi Chat AI … pojawia się jako osobna prośba o parowanie. Wymaga tych samych zakresów i obszarów co klient zewnętrzny.

Proces AI nie może bezpośrednio wykonywać komend powłoki i nie przyjmuje katalogów MCP, endpointów ani poświadczeń podanych przez webview. Anulowanie/cofnięcie dostępu działa natywnie. Limity żądania obejmują 128 wywołań, 64 KiB argumentów, 8 MiB na wynik i 16 MiB wszystkich wyników; rejestr wywołań chroni przed drugim efektem przez duplikaty ID lub niepoprawne równoległe wysłanie.

To osobny mechanizm od narzędzi lomi_chat_*, które pozwalają uprawnionemu agentowi zarządzać udostępnionymi rozmowami. Chat jako klient MCP nie otrzymuje automatycznie uprawnień odczytu historii/wysyłania Chat. Nie ma ogólnego interfejsu dodawania dowolnych zewnętrznych serwerów MCP do tej ścieżki.

Granica Bieżący limit/zachowanie
Control API / prywatne IPC 1.0 / 1
Ramka wewnętrzna Do 8 MiB; metadane i handshake do 64 KiB.
Argumenty narzędzi Do 64 KiB przed parsowaniem; nieznane pola odrzucane.
Wyniki narzędzi Typowane schematy; standardowy PNG tam, gdzie dotyczy.
Pozycje tekstu Granice skalarów UTF-16; plik i edytor mają różne źródła końców linii.
Dostęp do plików Katalogi przypięte deskryptorem, NOFOLLOW, wykluczenia sekretów/linków/plików specjalnych.
Tożsamość zasobów Jawne ID/generacje; tymczasowe lease wejścia i odrzucanie starych odwołań.
Odczyty Ograniczone strony/snapshoty z metadanymi pominięć/luk/wygaśnięcia; nie są pełnym atomowym stanem aplikacji.

Przepływy pracy opisują limity domen. Adnotacje read-only/idempotent/destructive są wskazówkami dla klienta, a nie zgodą ani gwarancją bezpiecznego powtórzenia niepewnej operacji.

Przegląd z 30 września 2026 r. obejmuje HEAD lomi-dev/lomi 93f47d818fe66ffada123cf49853e6bc00804433, wersję źródłową 0.5.0. Snapshot źródeł zapisuje SHA-256 183 plików kontraktów, brokera, adapterów natywnych/UI i materiałów weryfikacji; tools.json zapisuje rzeczywisty katalog i schematy z zbudowanego procesu pomocniczego.

Drzewo robocze zawierało też niezacommitowane zmiany src-tauri/src/cli_integrations.rs, src-tauri/src/cli_launch.rs i src-tauri/src/cli_mcp.rs, w tym obsługę pustego/hybrydowego wpisu Antigravity i wykrywanie powłoki bez zatrzymania przez terminal. Linki GitHub wskazują commit bazowy; hashe snapshotu wskazują dokładne przejrzane bajty. Audyt nie deklaruje opublikowania tych zmian.

Na potrzeby tej dokumentacji zbudowano osobny proces pomocniczy, przeszły zestawy testów trzech pakietów MCP/control Cargo oraz niezależny test JSON-RPC dla wersji MCP 2025-11-25 i 2026-07-28. Sprawdzono katalog/schematy, kodowanie wyników, upoważnienia, uwierzytelniony transport, deduplikację, cofanie dostępu i powiązane działanie rdzenia. Opcjonalne próby pełnego dysku, długiej bezczynności i GUI/modeli nie były wykonywane w tym przeglądzie; próby wykrywania z plikiem wykonywalnym aplikacji nie skonfigurowano.

Repozytorium aplikacji przechowuje osobny natywny protokół odbioru i raport weryfikacji. Historyczne rekordy obejmują 20 zadań modelu na macOS ARM64, 60 pełnych sukcesów na 67 prób; zachowane porażki i ograniczenia systemu są częścią dowodów. Nie są to nowe testy wykonane przez to zadanie, potwierdzenie innych platform ani certyfikacja instalatora/wydania.

Kod źródłowy: uwierzytelnianie, most głównego okna, natywny most Chat, backend Chat, adapter AI.