Przejdź do głównej zawartości

Praca na wielu projektach

Speedwave prowadzi kilka projektów obok siebie i niejeden z nich może działać jednocześnie. Każdy projekt to osobny świat: własna sieć kontenerów, własny katalog tokenów i własny katalog domowy Claude. Zajrzyj do sekcji projekty i sesje, żeby poznać, czym jest projekt i jak go zarejestrować.

Worker jednego projektu nie sięgnie do sieci ani danych uwierzytelniających innego. Każdy projekt otrzymuje domyślnie własną sieć o nazwie speedwave_<project>_network, a kontenery pracujące w sieci jednego projektu nie porozumieją się z kontenerami z sieci innego. Dane uwierzytelniające usług leżą w osobnym katalogu tokenów dla każdego projektu, ~/.speedwave/tokens/<project>/<service>/, a worker montuje tam wyłącznie podkatalog swojej własnej usługi. Każdy projekt ma też własny katalog domowy Claude, więc zalogowanie do Claude w jednym projekcie nie zaloguje cię automatycznie w drugim. Pełny opis tych granic znajdziesz w części o izolacji.

Na każdą instancję Speedwave przypada jedna maszyna wirtualna, którą dzielą między siebie wszystkie projekty: Lima na macOS, WSL2 na Windows. Wszystkie twoje projekty działają wewnątrz tej maszyny, choć na poziomie sieci i katalogu tokenów pozostają od siebie odseparowane. Osobna instancja z własną maszyną wirtualną powstaje tylko wtedy, gdy wskażesz SPEEDWAVE_DATA_DIR w inne miejsce.

Speedwave wykonuje po kolei operacje, które zmieniają kontenery projektu, czyli uruchomienie, aktualizację i ponowne utworzenie, dzięki czemu dwie z nich na tym samym projekcie nigdy się nie przeplotą, niezależnie od tego, czy to akcja z Desktop, czy uruchomienie speedwave update z CLI. Blokada obowiązuje osobno dla każdego projektu, więc aktualizacja jednego nigdy nie wstrzyma startu kontenerów drugiego, a odczyt listy kontenerów czy logów pozostaje responsywny nawet w trakcie aktualizacji.

W aplikacji Desktop to przełącznik projektów decyduje, który projekt jest aktywny. Przełączenie zapisuje nowy aktywny projekt w twojej konfiguracji, uruchamia kontenery projektu docelowego i dopiero potem, w tle, zatrzymuje kontenery poprzedniego. Naraz odbywa się tylko jedno przełączenie.

Przełączenie działa jak transakcja: powodzenie zgłaszane jest dopiero wtedy, gdy projekt docelowy w pełni wstanie, i dopiero wtedy poprzedni projekt trafia do wątku w tle, który go zatrzymuje. Jeśli projekt docelowy nie wstanie poprawnie, Speedwave zatrzymuje tylko to, co zdążyło się w nim częściowo uruchomić, a poprzedni projekt zostawia nietknięty, więc nieudane przełączenie nigdy nie pozbawia cię działającego projektu. Ponieważ zatrzymanie poprzedniego projektu następuje już po udanym przełączeniu, Speedwave najpierw zapisuje je na dysku jako oczekujące zatrzymanie. Gdyby aplikacja została zamknięta, zanim to zatrzymanie dobiegnie końca, kolejne uruchomienie odczyta ten zapis i dokończy zatrzymywanie pozostałego projektu.

Z poziomu CLI katalog roboczy nie decyduje o wyborze projektu. Samo speedwave sięga po aktywny projekt z twojej konfiguracji. Żeby z dowolnego katalogu wskazać konkretny projekt, dodaj --project <name>; działa to dla poleceń speedwave, login, logout i update.