1. Wprowadzenie do modernizacji
To obszerne ćwiczenie z programowania jest praktycznym uzupełnieniem artykułu o architekturze Jak zautomatyzować modernizację za pomocą Antigravity i orkiestracji wieloagentowej. Jako konkretny przykład używamy klasycznej zamiany platformy Node.js, ale podstawowe wzorce projektowe, struktury katalogów i procesy orkiestracji agentów, które tu poznasz, są całkowicie niezależne od języka i mają uniwersalne zastosowanie w przypadku każdego projektu modernizacji starszego systemu na dużą skalę.
W przeciwieństwie do standardowych asystentów kodowania, którzy jedynie uzupełniają wiersze w jednym pliku, dowiesz się, jak wykorzystać możliwości Google Antigravity oparte na agentach do orkiestracji autonomicznych zespołów wyspecjalizowanych podagentów AI. Agenci ci mogą niezależnie przeprowadzać inżynierię wsteczną starszych baz kodu, pisać rygorystyczne zestawy testów, tworzyć nowoczesne architektury i samodzielnie poprawiać błędy kompilatora za pomocą pętli refleksji. Ty natomiast zachowasz pełną kontrolę jako architekt na wysokim poziomie.
Czego się nauczysz
- Mapowanie przepływu pracy: jak prawidłowo klasyfikować i oddzielać deterministyczne zadania konfiguracyjne od złożonych heurystycznych wyzwań związanych z refaktoryzacją.
- Architektura umiejętności: jak strukturyzować rozszerzalny pakiet umiejętności agenta przy użyciu stopniowego odkrywania i metadanych routingu YAML.
- Orkiestracja wzorców projektowych: jak przeprowadzać refaktoryzację na dużą skalę, łącząc wzorce projektowe Router, Planowanie i wykonywanie oraz Refleksja.
- Sztywne umowy dotyczące danych wejściowych i wyjściowych: jak egzekwować jasne granice danych wejściowych, umiejętności i danych wyjściowych w wieloetapowych potokach inżynierii wstecznej i tworzenia szkieletu docelowego.
- Weryfikacja parzystości: jak wykorzystać podagenta przeglądarki Antigravity do przeprowadzania testów parzystości obok siebie w przeglądarce Chrome.
Co stworzysz
Będziesz orkiestrować w pełni zautomatyzowany potok refaktoryzacji Greenfield, który przyjmuje kultowy, przestarzały monolit CRUD Express i Mongoose (tzw. „madhums demo”) i autonomicznie przebudowuje go od podstaw w ściśle typowaną aplikację Next.js App Router opartą na MongoDB, ścisłej weryfikacji Zod i dostępnych komponentach ShadCN UI.
Czego potrzebujesz
- Zainstalowane lokalnie IDE Google Antigravity (dostępne na stronie antigravity.google).
- Zainstalowane lokalnie Node.js (wersja 18 lub nowsza).
- Przeglądarka Chrome do automatycznej weryfikacji interfejsu.
- Kopia monorepo demonstracyjnego modernizującego Express.js o otwartym kodzie źródłowym.
2. Konfigurowanie środowiska modernizacji
Zanim pozwolisz autonomicznym agentom działać na starzejącej się bazie kodu, musisz utworzyć czyste i stabilne środowisko monorepo. Dzięki temu asystent AI będzie mógł skupić się wyłącznie na generowaniu wysokiej jakości nowoczesnego kodu, zamiast marnować tokeny na walkę z lukami w zabezpieczeniach pakietów sprzed dekady lub niezgodnościami kompilatora.
Mapowanie starszej architektury Express na nowoczesną architekturę Next.js
Komponent | Starszy stos | Nowoczesny zamiennik | Uzasadnienie |
Architektura | Monolit Express | Next.js App Router | Oddzielenie logiki do komponentów serwera w celu zoptymalizowania renderowania i wydajności komponentów serwera React (RSC). |
Logika danych | Mongoose (ODM) | MongoDB + Zod | Zastąpienie niejawnych haków ORM jawnymi, bezpiecznymi typowo schematami Zod i wydajnością sterownika. |
Język | CommonJS / JavaScript | TypeScript (ESM) | Wymuszanie bezpieczeństwa w czasie kompilacji i przejście na nowoczesne standardy modułów. |
Frontend | Pug/EJS (widok serwera) | ShadCN UI + Tailwind | Przejście od sztywnych szablonów do systemu projektowania opartego na komponentach, dostępnego i opartego na narzędziach. |
Uwierzytelnianie | Passport.js | NextAuth | Modernizacja zarządzania sesjami dzięki wbudowanej obsłudze Edge i współczesnych dostawców. |
Bezpieczeństwo | Oprogramowanie pośredniczące konfigurowane ręcznie | Zod (ścisła weryfikacja) | Wdrożenie „jednego źródła prawdy” do weryfikacji danych w całym stosie. |
Inicjowanie centrum modernizacji
Naszym pierwszym deterministycznym działaniem jest sklonowanie izolowanej struktury monorepo. Dzięki temu starszy kod tylko do odczytu jest oddzielony od nowego repozytorium docelowego, co zapewnia, że nie dojdzie do przypadkowych zmian w oryginalnej aplikacji.
Otwórz terminal Antigravity i uruchom te polecenia konfiguracyjne:
git clone https://github.com/GoogleCloudPlatform/devrel-demos.git cd devrel-demos/other/modernizing-expressjs
Po sklonowaniu otwórz folder modernizing-expressjs bezpośrednio w eksploratorze IDE Antigravity. Zobaczysz ten izolowany układ:
/modernizing-expressjs/ ├── .agents/ # Skills metadata and checklists │ └── skills/ ├── docs/ # Target directory for reverse-engineered markdown artifacts ├── legacy-app/ # Read-only root of the legacy Express monolith ├── modern-app/ # Greenfield target repository for the Next.js rewrite ├── GEMINI.md # Project-wide agent constitution └── README.md # Companion documentation
Obejrzyj ten krótki film, aby dowiedzieć się, jak deterministycznie przygotować i odizolować środowisko monorepo:
3. Projektowanie pakietów umiejętności i wzorców agentów AI
Tworzenie solidnej umiejętności agenta zasadniczo różni się od pisania standardowego prompta czatu. Gdy tworzysz pakiet umiejętności, projektujesz modułowy fragment oprogramowania, który będzie autonomicznie wykonywany przez bazowy LLM. Aby zapobiec halucynacjom agenta lub "podatkowi na okno kontekstu", wprowadzamy pakiet umiejętności orkiestracji Greenfield o otwartym kodzie źródłowym jako rozszerzalny szablon tworzenia oparty na 2 zasadach, które nie podlegają negocjacjom: zwięzłości i stopniowym odkrywaniu.
Stopniowe odkrywanie za pomocą routingu metadanych YAML
Zamiast umieszczać wszystkie reguły docelowe w jednym monolitycznym prompcie systemowym, rozdzielamy instrukcje na katalogi. Każdy katalog umiejętności zawiera punkt wejścia SKILL.md opakowany w blok frontmatter routingu YAML.
Otwórz plik .agents/skills/orchestrating-greenfield-migration/SKILL.md i sprawdź metadane routera:
---
name: orchestrating-greenfield-migration
description: >
Manages the end-to-end modernization of legacy Express
monoliths into Next.js architectures. Orchestrates subagents
for auditing, scaffolding, and verification. Use when starting
or managing a greenfield rewrite project.
---
Wkodowanie wzorca planowania i wykonywania
Aby zapobiec dryfowaniu autonomicznego agenta, rozpraszaniu się przez ciekawe starsze oprogramowanie pośredniczące lub próbom nieautoryzowanych zamian bazy danych, zastępujemy standardowe planowanie otwarte przez wkodowanie wzorca Planowanie i wykonywanie bezpośrednio w instrukcjach.
Sprawdź dosłowną listę kontrolną Markdown osadzoną w głównym orkiestratorze:
### Phase 1: The AI audit (reverse engineering)
Dispatch subagents to produce specifications while identifying project-specific test scenarios.
* [ ] Init `docs/verification/Verification_Plan.md` to create baseline template.
* [ ] Run `auditing-data-models` -> Append Data Integrity Stress-Tests.
* [ ] Run `auditing-api-contracts` -> Append API Parity & Edge Case Probes.
* [ ] Run `auditing-business-logic` -> Append Logic & Authorization Stress-Tests.
* [ ] Run `auditing-ui-archeology` -> Append Interaction & Layout Targets.
Formatując przepływ pracy jako jawną listę kontrolną z odwołaniami do umiejętności w tekście, agent kopiuje tę dokładną mapę drogową do swojego planu zadań, blokując ją w trybie „tylko wykonywanie”, który systematycznie odznacza pola i wywołuje wysoce wyspecjalizowane podagenty dokładnie wtedy, gdy jest to potrzebne.
4. Faza 1. Inżynieria wsteczna starszego monolitu (audyt)
Możemy już uruchomić główną sekwencję orkiestracji. W pierwszej fazie wyodrębniamy reguły biznesowe, schematy danych i ładunki API ze starszego monolitu, przechowując je jako czyste artefakty Markdown, a jednocześnie pozbywając się dekady imperatywnego długu technicznego.
Uruchamianie autonomicznej sekwencji refaktoryzacji
W panelu czatu Menedżera agentów Antigravity wpisz to niestandardowe polecenie po ukośniku i naciśnij Enter:
/orchestrating-greenfield-migration
Teraz obserwuj konsolę terminala. Zobaczysz, jak główny agent odczytuje swój prompt systemowy, dopasowuje Twoje żądanie do metadanych orkiestratora, wyświetla listę kontrolną 5 faz i natychmiast zaczyna równolegle wysyłać wyspecjalizowane podagenty „Auditor”.
Umowa instruktażowa dotycząca danych wejściowych, umiejętności i danych wyjściowych
W fazie 1 agent wykonuje ścisły potok inżynierii wstecznej związany tą umową instruktażową:
Dane wejściowe: pliki kodu źródłowego tylko do odczytu znajdujące się w katalogu legacy-app/.
Wywoływane umiejętności:
Umiejętność | Opis |
| Śledzi starsze trasy, aby udokumentować dokładne koperty odpowiedzi JSON. |
| Dekonstruuje schematy Mongoose, aby wyodrębnić relacje, wymagane pola i wartości domyślne. |
| Dokumentuje niejawne efekty uboczne, przepływy uwierzytelniania Passport i reguły oprogramowania pośredniczącego. |
| Skanuje starsze szablony Pug, aby mapować elementy strukturalne „intencji interfejsu” (paski nawigacyjne, formularze). |
Wygenerowane artefakty: wysoce ustrukturyzowane specyfikacje Markdown wygenerowane bezpośrednio w folderze docs/.
Artefakt | Opis |
| Ten dokument zawiera szczegółowe informacje o powierzchni API starszej aplikacji Express. Użyj tego katalogu, aby zapewnić ścisłą parzystość podczas przebudowywania tras w zmodernizowanej aplikacji Next.js. |
| Ten dokument rejestruje zweryfikowane zachowania, konfiguracje i ścisłe reguły starszej aplikacji Express dotyczące uwierzytelniania (AuthN), autoryzacji (AuthZ), globalnego oprogramowania pośredniczącego, zarządzania sesjami i efektów ubocznych. |
| Ten dokument zawiera kompleksową analizę starszych schematów Mongoose z katalogu |
| Ten dokument zawiera szczegółową analizę starszego interfejsu użytkownika opartego na Pug w katalogu |
Obejrzyj ten film z terminala na żywo, aby zobaczyć, jak działa autonomiczny audyt inżynierii wstecznej:
5. Faza 2 i 3. Wykorzystanie TDD i tworzenie szkieletu backendu Greenfield
Po pełnym audycie i udokumentowaniu starszej aplikacji główny orkiestrator przechodzi do tworzenia szkieletu nowoczesnego backendu docelowego. W tej fazie wprowadzamy najpotężniejszy wzorzec projektowy oparty na agentach w naszym zestawie narzędzi: pętlę zamkniętą Refleksja (samoocena) opartą na ścisłym rozwoju sterowanym testami (TDD).
Tworzenie kodu samonaprawiającego się za pomocą pętli refleksji
Pisanie nowoczesnego kodu jest proste, ale zapewnienie, że będzie się on kompilować bezbłędnie i przejdzie ścisłe ograniczenia weryfikacji, wymaga oceny w pętli zamkniętej. Orkiestrator zajmuje się tym autonomicznie, przekazując dane wyjściowe testu bezpośrednio do okna kontekstu podagenta:
- Faza 2 (konfiguracja TDD): orkiestrator wywołuje podagenta
generating-api-tests, który odczytuje plikdocs/API_Contracts.mdi zapisuje wyczerpujące zestawy testów integracyjnych Vitest, które sprawdzają dokładne wymagane kody stanu HTTP i ładunki JSON. Zgodnie z oczekiwaniami w TDD te testy początkowo się nie powiodą. - Faza 3 (tworzenie szkieletu backendu): podagenty tworzące szkielet zaczynają pisać nowoczesne moduły obsługi tras Next.js i ścisłe schematy weryfikacji Zod.
- Pętla samokorekty: gdy deterministyczne narzędzie Vitest oceni nowy kod i zwróci błąd (np. oczekiwany błąd weryfikacji
422zwrócił500), agent nie ulegnie awarii. Zastanawia się nad obiektywnymi danymi wyjściowymi błędu, ponownie otwiera moduł obsługi trasy docelowej, poprawia strukturę ładunku schematu Zod i ponownie uruchamia testy. Iteruje autonomicznie, aż osiągnie kod zakończenia0.
Umowa instruktażowa dotycząca danych wejściowych, umiejętności i danych wyjściowych
Dane wejściowe: artefakty specyfikacji inżynierii wstecznej (docs/API_Contracts.md, docs/Data_Models.md).
Wywoływane umiejętności:
Umiejętność | Opis |
| Generuje nieudane zestawy integracyjne Vitest. |
| Inicjuje podstawowy układ Next.js App Router. |
| Konfiguruje lokalne środowisko narzędzia do uruchamiania testów Vitest. |
| Tłumaczy stare modele Mongoose na schematy MongoDB + Zod. |
| Przebudowuje trasy Express na moduły obsługi tras Next.js i modułowe strażniki tras. |
Wygenerowane dane wyjściowe: początkowe nieudane zestawy Vitest, w pełni typowane schematy Zod, funkcjonalne moduły obsługi tras Next.js oraz czyste, pomyślne wykonania zestawu testów.
Obserwuj automatyczne generowanie narzędzia do uruchamiania testów TDD:
Obserwuj wykonywanie w czasie rzeczywistym pętli refleksji samokorekty, która tworzy szkielet backendu docelowego:
6. Faza 4. Tworzenie szkieletu nowoczesnego frontendu (komponenty interfejsu)
Gdy warstwa weryfikacji backendu jest w pełni zabezpieczona i przechodzi testy integracyjne, główny orkiestrator zmienia kontekst, aby zmodernizować prezentację wizualną. Imperatywne szablony renderowane przez serwer są odrzucane na rzecz wysoce dostępnego systemu projektowania komponentów opartego na narzędziach.
Tłumaczenie intencji interfejsu na widoki oparte na komponentach
Zamiast próbować tłumaczyć CSS wiersz po wierszu, podagent frontendu odczytuje wyodrębniony spis „intencji interfejsu” i mapuje elementy strukturalne bezpośrednio na nowoczesne odpowiedniki o wysokiej wierności.
Umowa instruktażowa dotycząca danych wejściowych, umiejętności i danych wyjściowych
Dane wejściowe: artefakt spisu frontendu inżynierii wstecznej (docs/UI_Inventory.md).
Wywoływane umiejętności:
Umiejętność | Opis |
| Tłumaczy artefakt |
Wygenerowane dane wyjściowe: strony frontendu Next.js gotowe do wdrożenia, utworzone przy użyciu wysoce dostępnych komponentów ShadCN UI i układów narzędzi Tailwind CSS.
Obserwuj autonomiczne generowanie zmodernizowanej warstwy widoku frontendu:
7. Faza 5. Weryfikacja i audyt przeciwnika
Nasz potok refaktoryzacji kończy się rygorystycznym sprawdzeniem jakości. Główny orkiestrator przechodzi od statycznej analizy kodu do aktywnego testowania środowiska wykonawczego, aktywnie próbując zepsuć nową aplikację docelową, aby udowodnić absolutną parzystość funkcjonalną ze starszą wersją.
Wykonywanie testu na 2 kartach i aktywacja przeglądarki
W fazie weryfikacji wykorzystujemy zintegrowane możliwości wizualne i DOM Antigravity, aby autonomicznie udowodnić sukces bez konieczności ręcznego klikania formularzy:
- Parzystość obok siebie: podagent
auditing-parityinstruuje lokalne narzędzie do uruchamiania, aby jednocześnie uruchomić starszy monolit Express i zmodernizowaną aplikację Next.js, weryfikując identyczną prezentację wizualną i renderowanie danych. - Sondowanie zabezpieczeń przeciwnika: orkiestrator wywołuje podagenta
adversarial-verification, który uruchamia podagenta przeglądarki Antigravity. Ten wyspecjalizowany agent aktywuje przeglądarkę bezpośrednio – wpisuje dane, przesyła formularze i sondy pod kątem regresji zabezpieczeń, uszkodzonych plików cookie sesji lub nieobsługiwanych przypadków brzegowych. - Generowanie ścieżki audytu: podagent przeglądarki automatycznie rejestruje sesje wideo WebP swoich aktywacji sesji, dołączając je bezpośrednio do końcowego raportu migracji jako weryfikowalny "dowód pracy".
Umowa instruktażowa dotycząca danych wejściowych, umiejętności i danych wyjściowych
Dane wejściowe: starsza i nowoczesna aplikacja działająca obok siebie w lokalnych środowiskach wykonawczych.
Wywoływane umiejętności:
Umiejętność | Opis |
| Wykonuje kontrole weryfikacji obok siebie w czasie wykonywania. |
| Sondy pod kątem błędów logicznych i regresji funkcjonalnych za pomocą automatycznej aktywacji przeglądarki. |
Wygenerowane dane wyjściowe: kompleksowa ścieżka audytu parzystości funkcjonalnej połączona z nagranymi filmami z sesji przeglądarki potwierdzającymi pełny sukces.
Obserwuj, jak automatyczny podagent przeglądarki aktywnie weryfikuje zmodernizowaną aplikację:
8. Gotowość do wdrożenia produkcyjnego po migracji i dalsze kroki
Gratulacje! Udało Ci się orkiestrować wysoce zaawansowany, autonomiczny potok refaktoryzacji oparty na agentach, aby zmodernizować starszy monolit od podstaw, zdobywając uniwersalne, wysoce przenośne umiejętności, takie jak stopniowe odkrywanie, listy kontrolne planowania i wykonywania oraz pętle refleksji samonaprawiającej się.
Przygotowanie do wdrożenia produkcyjnego
Gdy aplikacja Next.js jest w pełni zweryfikowana i sprawdzona, możesz przejść do integracji produkcyjnej. Rozważ wdrożenie tych standardowych w branży dalszych kroków:
- Przyrostowy routing: wdróż serwer proxy odwrotny (np. wzorzec Strangler Fig), aby przyrostowo kierować ruch ze starszej aplikacji Express do nowoczesnego celu.
- Zachowanie SEO: mapuj starsze trasy Express na stałe przekierowania Next.js (
_redirects.yaml), aby zachować dotychczasową autorytet domeny. - Przesyłanie strumieniowe danych: przejdź od statycznego wypełniania bazy danych do przesyłania strumieniowego danych produkcyjnych na żywo, które jest bezpiecznie weryfikowane w czasie wykonywania za pomocą ścisłych schematów Zod.
- Dostrzegalność: zastąp imperatywne narzędzia do logowania ustrukturyzowanymi platformami OpenTelemetry.
Pogłębianie wiedzy na temat modernizacji
Aby poznać pełne bazowe bazy kodu, niestandardowe instrukcje dotyczące umiejętności i wyczerpujące uzasadnienie teoretyczne tego potoku, przeczytaj cały artykuł nadrzędny oraz inne treści dotyczące orkiestracji wieloagentowej.
- Artykuł: Jak zautomatyzować modernizację za pomocą Antigravity i orkiestracji wieloagentowej
- Ćwiczenie z programowania: Tworzenie audytora kodu w wielu językach za pomocą równoległych agentów Antigravity
Dołącz do społeczności Agentic Builder
Mam nadzieję, że te uniwersalne wzorce refaktoryzacji i potoki oparte na agentach okazały się przydatne. Aby być na bieżąco z przyszłymi pakietami umiejętności o otwartym kodzie źródłowym, szczegółowymi treściami technicznymi i nadchodzącymi wystąpieniami na konferencjach, obserwuj mnie w kanałach profesjonalnych:
- Obserwuj na LinkedIn: linkedin.com/in/jamesor
- Obserwuj na X (Twitterze): x.com/JamesOR
Podziel się z nami swoją opinią
Co najbardziej Cię ekscytuje w orkiestracji opartej na agentach?
Dziękujemy za tworzenie z użyciem Google Antigravity.