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

Przepływy pracy MCP

Kolejność narzędzi dla terminali, edycji plików, stron, Androida, Git, Chat i ustawień.

Każdy przepływ zaczyna się od lomi_status → zatwierdzonego parowania → lomi_workspace_list → lomi_connect. Używaj jawnych ID, świeżych odczytów i reguł operacji/ponawiania. Poniższe nazwy znajdziesz w pełnej referencji narzędzi; zakresy opisują uprawnienia.

  1. lomi_terminal_create tworzy terminal z zatwierdzonym profilem Bash/Zsh. Obserwuj operację do gotowości i uzyskania terminalSessionId oraz leaseId.
  2. lomi_terminal_run wysyła jednowierszową komendę przy potwierdzonym bezczynnym prompcie. Zachowaj ID operacji komendy.
  3. lomi_operation_get obserwuje zakończenie. lomi_terminal_read z mode: "command" i ID operacji odczytuje ograniczony wynik.
  4. Użyj lomi_terminal_interrupt dla nadal działającej obserwowanej komendy; dalej sprawdzaj oryginalną operację, aby potwierdzić wyjście.

Dla istniejącego terminala lomi_panel_control może poprosić o claim lub release. Przy wyłączonym YOLO przejęcie wymaga natywnej zgody i zachowuje proces powłoki. Wejście użytkownika unieważnia lease. Chroniony terminal pochodzenia nie może być przejęty jako zwykły cel agenta.

lomi_terminal_input wysyła dokładny tekst lub obsługiwane klawisze z uporządkowanym inputSequence; tekst nie dopisuje Enter. Umożliwia pracę z REPL/TUI, ale nie czyni nieznanego promptu bezpiecznym dla automatycznego run. Odczyt terminala oferuje output, command, zachowany ekran xterm screen i jawnie wybrane bajty base64 raw; kursory output/raw mają osobne przestrzenie bajtów. Odczyt ekranu pokazuje opóźnienie parsera.

Zakończenie komendy wynika ze znaczników integracji powłoki, które są niezaufanymi obserwacjami. Cisza, ponowne narysowanie promptu czy sam EOF nie potwierdzają sukcesu. Bash 3.2 na macOS z istniejącym DEBUG trap może odmówić gotowości automatycznej komendy zamiast nadpisać trap.

  1. lomi_files_list pokazuje jeden katalog względem projektu. lomi_files_search wyszukuje tekst na dysku jako literal/regex, z wielkością liter/całymi słowami i globami include/exclude.
  2. lomi_files_read odczytuje bajty dysku zdekodowane jako tekst. Kolejne strony wymagają oryginalnego expectedDiskRevision; offsety używają UTF-16 i zachowują końce linii dysku.
  3. lomi_editor_open otwiera lub wykorzystuje wspólny bufor. lomi_editor_read czyta załadowany bufor, także niezapisane zmiany, zwracając documentId, rewizje bufora/dysku, stan dirty/conflict i kodowanie.
  4. lomi_editor_apply_edits stosuje uporządkowane niepokrywające się zmiany do dokładnej rewizji bufora w jednej transakcji undo. Offsety to UTF-16 od zera; wstawiany tekst używa znormalizowanego LF. Nie zapisuje dysku.
  5. lomi_editor_save atomowo zapisuje dokładną załadowaną rewizję. Ponownie sprawdza bajty dysku, zachowuje obsługiwane kodowanie, końce linii i zwykłe uprawnienia oraz pozostawia późniejsze zmiany jako niezapisane.

Traktuj dysk i bufor jako osobne źródła. Odczyt pliku nie otwiera edytora, a odczyt edytora nie ładuje brakującego bufora. Obsługiwane pliki tekstowe to UTF-8, UTF-8 BOM i UTF-16 z BOM; zwykłe odczyty/edycje/zapisy mają limit 4 MiB. Strona odczytu przyjmuje 2-8192 jednostek UTF-16. Żądanie edycji zawiera 1-64 zmiany i do 64 KiB wstawionego tekstu UTF-8; rozcięte pary surogatów, nakładanie zmian i stare rewizje są odrzucane.

lomi_editor_open obsługuje też preview/split dla Markdown i SVG; obrazy rastrowe wymagają podglądu. Podgląd używa pierwszej klatki, zachowuje orientację/alpha i ograniczony PNG (1280 pikseli na krawędź, 3 MiB). AVIF nie jest obsługiwany. Zewnętrzne obrazy Markdown pozostają linkami.

lomi_files_mutate tworzy pusty plik/folder, zmienia nazwę/przenosi wpisy lub prosi o Kosz. Najpierw odczytaj wymagane rewizje katalogu/wpisu. Nie nadpisuje celu ani nie podąża za linkami; przenoszenie między woluminami nie ma awaryjnego kopiowania/usuwania. Rewizja katalogu obejmuje bezpośrednie wpisy, a nie rekurencyjny snapshot treści. Otwarte bufory zachowują niezapisany tekst i undo po zmianie ścieżki.

Kosz używa natywnego etapu odzyskiwania. Save niezapisanego pliku anuluje usunięcie, aby agent mógł przeczytać zapisaną wersję i poprosić ponownie. Discard/Cancel stosują istniejącą ochronę. Zobacz odzyskiwanie.

  1. Udostępnij właściwe originy HTTP(S), wraz z portem. lomi_browser_open tworzy izolowany natywny profil i zwraca operację; zachowaj generację przeglądarki i lease.
  2. lomi_browser_snapshot zwraca ograniczone semantyczne elementy i ramki. Używaj jego snapshotId, navigationId, odwołań elementu/ramki i viewportRef.
  3. lomi_browser_fill, click, scroll lub key działa na aktualnym celu z lease. Obserwuj operacje modyfikujące.
  4. Odśwież snapshot po zmianie strony. lomi_browser_wait czeka do dziesięciu sekund na załadowanie, URL, tekst DOM lub rolę/nazwę i zastępuje wcześniejsze odwołania.
  5. lomi_browser_logs odczytuje błędy JavaScript, konsolę lub odrzucenia promise. lomi_browser_screenshot zwraca PNG obszaru strony po osobnej zgodzie na composite capture.

Snapshot obejmuje do 16 ramek HTTP(S) same-origin na głębokości czterech. Treść ramek cross-origin/opaque/ukrytych/przekraczających limit i wszystkie wartości formularzy są pomijane. Odwołania wygasają po 60 sekundach lub nawigacji, nowym snapshocie, zastąpieniu dokumentu/ramki lub przejęciu. Nie jest to pełne drzewo dostępności.

Kliknięcia, fill i klawisze używają syntetycznych zdarzeń DOM. Nie zapewniają zaufanych gestów użytkownika. key działa na już aktywnym elemencie dokumentu głównego i zwraca defaultAction: false; nie jest natywną edycją ani przechodzeniem klawiaturą. Click nie aktywuje pól plikowych ani zwykłych pobrań.

visible: false pozwala przygotować ukrytą przeglądarkę bez zmiany wyboru. Odczyt DOM może działać w ukryciu, ale wejście/zrzuty wymagają odpowiednio widocznego panelu; najpierw wybierz jego dokładną generację. Koniec nawigacji oznacza zatwierdzenie dokumentu lub załadowanie strony, a nie network idle. Zrzuty mogą zawierać zewnętrzne ramki, mimo ich pomijania w DOM.

Każdy rodzaj logu przechowuje 64 wpisy głównego dokumentu do 256 jednostek UTF-16. Kursor należy do tego rodzaju/dokumentu. Obiekty, stosy, ramki podrzędne/dane sieci i nagłówki/cookies są pomijane. Raporty mogą być syntetyczne; samo eventTrusted nie dowodzi autentyczności w WKWebView. Strona może zastąpić metody konsoli i ominąć późniejsze zbieranie.

Artefakty są prywatnymi niezmiennymi kopiami z ID, rozmiarem i SHA-256. Nie są dowolnymi ścieżkami lokalnymi i wygasają po 24 godzinach. Ponowny odczyt/eksport sprawdza uprawnienie źródła, a dla zrzutów/pobrań również pierwotną generację/profil/origin urządzenia lub przeglądarki. Zamknięte lub przejęte źródło może odmówić późniejszego dostępu.

  • Import: lomi_artifact_import przyjmuje ścieżkę projektu, dokładny rozmiar/hash i kind: "file" (0-4 MiB) lub kind: "android_apk" (od 4 bajtów do 512 MiB). Obserwuj operację do otrzymania artefaktu. Zwykłe pliki pozostają nieprzetworzonymi bajtami; odczyt metadanych nie ujawnia ich zawartości ani prywatnej ścieżki.
  • Upload: zaimportuj plik, znajdź widoczny file_input i ramkę w snapshocie, potem poproś o lomi_browser_upload z artefaktem/hashem i samą nazwą pliku. Przy wyłączonym YOLO zatwierdź dokładną stronę/pole, nazwę, rozmiar i hash w Browser upload requests. Strona może od razu wysłać bajty. Sukces potwierdza załączenie i zdarzenia input/change, a nie przyjęcie przez serwer.
  • Pobranie: lomi_browser_download wykonuje ograniczony GET same-origin w profilu agenta, z maxBytes do 4 MiB i terminem pięciu sekund. Używa poświadczeń same-origin tego profilu i odrzuca przekierowania, poświadczenia/fragment URL oraz własne metody/nagłówki/body. Nieudany/anulowany GET nadal może wpłynąć na serwer.
  • Eksport: lomi_artifact_export zapisuje do 4 MiB w nowym pliku względem projektu po kontroli rewizji katalogu docelowego i zakresów źródła. Nie tworzy katalogów nadrzędnych i nigdy nie nadpisuje pliku ani linku.

Importy dzielą limit 2 GiB globalnie, 1 GiB na połączenie/projekt, 64 plików i dwóch producentów. Limit APK jest osobny od limitu uploadu/eksportu 4 MiB; duży zaimportowany APK nie staje się automatycznie eksportowalny.

  1. lomi_android_list pokazuje jawnie udostępnione urządzenia. lomi_android_open tworzy/wybiera zachowany panel bez uruchamiania urządzenia.
  2. lomi_android_start uruchamia zatrzymane urządzenie lub wykorzystuje generację tego połączenia. Obserwuj gotowość Android/RPC/ADB/IME; start może trwać do 180 sekund.
  3. lomi_android_snapshot odczytuje ograniczoną projekcję UI Automator. lomi_android_screenshot daje PNG z wymiarami, obrotem i transformacją obrazu do współrzędnych sprzętowych.
  4. lomi_panel_control uzyskuje upoważnienie wejścia. lomi_android_input wysyła uporządkowany dotyk, klawisze, nawigację, obrót lub zatwierdzony tekst Unicode. Wybrany panel musi być widoczny w aktywnym oknie Lomi.
  5. lomi_android_launch dostarcza intent zatwierdzonemu pakietowi; sprawdź rezultat odczytem/logami. lomi_android_logcat czyta ostatni snapshot logów procesu głównego zatwierdzonego pakietu.
  6. lomi_android_stop prosi o potwierdzone zatrzymanie bez usuwania aplikacji/danych. Force stop pozostaje operacją natywnego interfejsu użytkownika.

ID węzłów jest lokalne dla odczytu i nie służy jako cel wejścia. Wartości edytowalne/haseł są pomijane; Canvas, WebView i ekrany chronione mogą być niepełne. Wejście używa hardware_display, a granice snapshotu rotated_display; korzystaj z wymiarów/obrotu i transformacji zrzutu. Zrzuty są pojedynczymi PNG, a nie ciągłym filmem MCP lub zrzutem pulpitu (do 1600 pikseli na krawędź, 2 milionów pikseli i 3 MiB).

Projekcja UI ma do 500 węzłów, 48 KiB wyniku i termin 12 sekund. Logcat obejmuje ostatnie linie main buffer działającego procesu głównego, a nie wszystkie procesy/crashe czy bufory. Odrzuca pakiety współdzielące UID i zgłasza nieznane luki; kursory trwają 60 sekund. Nie ma dowolnego ADB shell, narzędzia schowka ani automatycznego Enter.

lomi_android_setup_plan obsługuje inventory, strony katalogu i dokładny plan SDK/prywatnej Javy. Planowanie nie pobiera archiwów SDK ani nie akceptuje licencji. Zastosuj plan/rewizję w ciągu 30 minut przez lomi_android_setup_apply; przy wyłączonym YOLO Settings pokazuje źródła, wersje, rozmiary i warunki dostawcy do zatwierdzenia.

lomi_android_device_manage obsługuje tworzenie/modyfikację/wipe/usuwanie, odzyskiwanie, ograniczone czyszczenie własnego cache, odtwarzanie metadanych i usuwanie/rollback pakietów. Istniejące urządzenia muszą być udostępnione i zatrzymane; destrukcyjne cele wymagają dokładnej nazwy. Modyfikacja zachowuje obraz/rozmiar partycji danych i stosuje sprzęt przy kolejnym starcie. Używane obrazy pozostają niezmienne.

Dla APK najpierw importuj dokładne bajty, potem wywołaj lomi_android_install_apk dla kontrolowanej działającej generacji. Przy wyłączonym YOLO zatwierdź tę kopię/urządzenie w Settings w ciągu 120 sekund. Instalacja może trwać 180 sekund; zachowuje dane aplikacji i nie odinstalowuje jej po błędzie. INSTALL_FAILED_INSUFFICIENT_STORAGE jest konkretną odmową, a przerwane/nieznane rezultaty mogą być niepewne. Sprawdź urządzenie przed kolejnym żądaniem. YOLO automatycznie obsługuje zatwierdzenia opisane w uprawnieniach.

lomi_git_status, diff, history, commit i remotes korzystają z chronionego systemowego Git tylko do odczytu. Podaj repositoryRelative dla repozytorium wewnątrz projektu; mechanizm nie szuka dowolnych katalogów nadrzędnych. Powiązane worktrees/zewnętrzne metadane nie są obsługiwane. Odczyty blokują helpery, zapisy i sieć. Dane remote ukrywają poświadczenia, ścieżkę repozytorium, query/fragment i nieznane transporty.

Kursory statusu stronicują niezmienny snapshot komendy przez 60 sekund; późniejsze zmiany dysku nie zmieniają tej strony. Kontynuacja diffu wymaga dokładnej rewizji odczytu. Historia zachowuje zwrócony commit początkowy zamiast podążać za przesuwającym się HEAD. API commit wymaga pełnego SHA o długości 40/64 znaków; porównanie plików merge używa pierwszego rodzica. lomi_git_open otwiera widok diff/commit tylko do odczytu.

lomi_git_mutate obsługuje stage, unstage, commit, fetch, push, discard i pull. Przy wyłączonym YOLO każde żądanie ma dokładny plan zatwierdzany w głównym oknie, powiązany z plikami, indeksem, HEAD, refs, konfiguracją i środowiskiem. Wykonywanie Git może uruchamiać skonfigurowane hooki/helpery z Twoim kontem; odczyt tego nie upoważnia.

  • Commit przyjmuje kompletny zestaw staged paths i dokładną wiadomość; nie robi automatycznie stage. Dodanie końcowego LF przez Git jest opisane w podglądzie.
  • Fetch aktualizuje jedną zatwierdzoną gałąź remote-tracking; nie robi merge, prune, pobierania tagów ani submodułów.
  • Push wymaga network/push, bieżącego HEAD i dokładnego oczekiwanego commita remote (jawne null oznacza utworzenie tylko przy braku). Kontrola fast-forward i lease oczekiwanej wartości chronią przed przepisaniem historii/nadpisaniem równoległych zmian.
  • Discard odtwarza śledzone pliki worktree z indeksu, zachowując staged changes. Odrzucone bajty nie trafiają do Git ani Kosza. Niezapisane bufory blokują działanie; dla untracked użyj Kosza plików.
  • Pull wymaga network/pull, czystego śledzonego worktree, bieżącego HEAD i lokalnie zaobserwowanego commita remote (najpierw fetch). Tryby to ff_only i ograniczony liniowy rebase. Konflikty pozostają widoczne; Lomi nie robi automatycznie abort, reset, stash ani ponowienia.

lomi_chat_list pokazuje metadane indywidualnie udostępnionych rozmów (do 64). lomi_chat_read czyta zapisane szkice/checkpointy wiadomości; pomija reasoning, załączniki, instrukcje systemowe i metadane dostawcy. Null ID wiadomości wybiera aktywny liść; ID rodziców pozwalają przejść po gałęzi.

lomi_chat_open wykorzystuje istniejącą rozmowę albo tworzy nową przez target.type: "new". Nie wysyła żądania do dostawcy. lomi_chat_draft zastępuje do 32 KiB zapisanego tekstu szkicu, zachowując załączniki i chroniąc równoległe pisanie użytkownika. Nie wysyła wiadomości.

Dla lomi_chat_send odczytaj includeSendTarget: true, aby uzyskać skonfigurowane połączenie/model i aktualne rewizje rozmowy/szkicu. Przy wyłączonym YOLO Lomi pokazuje rzeczywisty kontekst, załączniki, instrukcje systemowe, model, limit odpowiedzi i możliwe opłaty do zatwierdzenia. Narzędzie nie zmienia dostawcy/modelu. Obserwuj operację; draftRevision: null oznacza rezerwację, a nie przyjęte wysłanie. Nie wysyłaj ponownie z nowym kluczem po niepewnym efekcie u dostawcy.

lomi_chat_stop wskazuje dokładny natywny requestId, więc ponowienie nie zatrzyma nowszej odpowiedzi. lomi_chat_export zwraca tekst Markdown/JSON zapisanych wariantów wiadomości i szkicu, do 512 wiadomości/4 MiB; nie zapisuje pliku i nie wywołuje dostawcy. Kolejne strony wymagają rewizji dokumentu.

lomi_settings_read czyta zachowane efektywne domyślne ustawienia edytora, preferencje terminala, skróty lub wybór motywów/safe mode. lomi_settings_update prosi o jedną zmianę powiązaną z rewizją: wcięcia, pole terminala z zamkniętej listy, przypisanie/reset skrótu, focus-follows-pointer, wbudowany Lomi/DeepMono lub system/light/dark. Przy wyłączonym YOLO Settings pokazuje stan przed/po do zatwierdzenia. Wybór/import własnego motywu i zapis odzyskiwania nie są obsługiwane. lomi_settings_open tylko prosi o wskazaną sekcję Settings.

lomi_workspace_create zaczyna od pliku scratch, nie powłoki. lomi_workspace_update zmienia nazwę/wybór lub prosi o zamknięcie. lomi_project_open prosi o nowy katalog z jednym obszarem; lomi_project_close wymaga wszystkich bieżących obszarów. lomi_panel_move obsługuje kolejność kart, docking, przesuwanie panelu i transfer między zatwierdzonymi obszarami tego samego projektu. Zachowuje zweryfikowane działające zasoby i odrzuca nieobsługiwane widoki pluginów, modal UI lub brak miejsca.

Zamykanie respektuje dialogi niezapisanych buforów, chronione/zajęte/posiadane przez użytkownika zasoby i współdzielone widoki. Ostatni widok Androida wymaga potwierdzonego Stop; ostatni Chat wymaga zapisanych szkiców/checkpointów i prawa stop. Zapis podczas zamykania pozostawia obszar/projekt otwarty z częściowymi efektami; odczytaj nowy stan przed ponowieniem. Zamknięcie projektu nigdy nie usuwa jego folderu.

Kod źródłowy: zachowanie i limity narzędzi, adaptery brokera, natywne użycie i granice weryfikacji.