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.
Komponenty
Dział zatytułowany „Komponenty”| 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.
Transport zewnętrznego klienta
Dział zatytułowany „Transport zewnętrznego klienta”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.
Wykrywanie i parowanie
Dział zatytułowany „Wykrywanie i parowanie”- Automatyczna rejestracja przypina publiczną część trwałego klucza Ed25519 w argumentach klienta.
- Lomi publikuje
discovery.jsonz podpisanym payloadem endpointu: ścieżką gniazda, ID instancji, SHA-256 certyfikatu brokera i wersją IPC. - Proces pomocniczy sprawdza podpis, właściciela, uprawnienia, typ pliku i limity przed zaufaniem endpointowi. Sam przypięty klucz nie upoważnia klienta.
- 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.
- 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.
Autoryzacja i wykonanie
Dział zatytułowany „Autoryzacja i wykonanie”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.
Trwały stan
Dział zatytułowany „Trwały stan”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 AI
Dział zatytułowany „Wbudowany Chat AI”Wbudowany Chat używa tego samego natywnego katalogu/parsera/kodera lomi-mcp i uwierzytelnionego Client, bez osobnego procesu stdio dla każdej rozmowy.
- Natywny backend Chat zachowuje
ChatSessiondla rozmowy i endpointu brokera. Nieważna/cofnięta sesja jest zastępowana; poprawna może przetrwać kolejne tury i montowanie widoków. - Backend przekazuje katalog i wskazówki pochodzenia do dołączonego środowiska AI. ID projektu/obszaru są wskazówkami; nie przyznają dostępu.
- Ś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.
- Backend sprawdza wywołanie względem zaufanego katalogu, nakłada limity i wykonuje je przez zachowaną uwierzytelnioną sesję MCP rozmowy.
- 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.
Limity i znaczenie danych
Dział zatytułowany „Limity i znaczenie danych”| 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.
Implementacja i weryfikacja
Dział zatytułowany „Implementacja i weryfikacja”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.