Praca z wieloma repozytoriami
Twój zespół ma bramkę API, trzy serwisy backendowe, bibliotekę współdzieloną i dwie aplikacje frontendowe — każde w osobnym repozytorium. Musisz dodać nowe pole do profilu użytkownika. Oznacza to aktualizację biblioteki typów współdzielonych, API serwisu użytkowników, schematu bramki i obu aplikacji frontendowych. Otwierasz Cursora w repozytorium serwisu użytkowników, a agent nie ma wglądu w bibliotekę współdzieloną ani bramkę. Każdy prompt wymaga ręcznego wyjaśniania, co istnieje w innych repozytoriach.
Praca z wieloma repozytoriami przy użyciu narzędzi AI wymaga konkretnych strategii, aby wypełnić lukę między repozytoriami, których agent nie może widzieć jednocześnie.
Czego się nauczysz
Dział zatytułowany „Czego się nauczysz”- Techniki przekazywania Cursorowi kontekstu o kodzie znajdującym się w innych repozytoriach
- Podejście oparte na regułach do kodyfikowania zależności i kontraktów między repozytoriami
- Wzorce workflow do koordynowania zmian w wielu serwisach
- Strategie dla monorepo versus polyrepo w programowaniu wspomaganym AI
Problem kontekstu między repozytoriami
Dział zatytułowany „Problem kontekstu między repozytoriami”Cursor indeksuje i przeszukuje repozytorium, które jest aktualnie otwarte. Nie ma natywnej świadomości siostrzanych repozytoriów. Gdy kontrakt API jest zdefiniowany w jednym repozytorium i konsumowany w innym, agent pracujący w repozytorium konsumenta nie widzi definicji kontraktu.
Istnieje kilka praktycznych podejść do rozwiązania tego problemu.
Strategia 1: Workspace z wieloma folderami głównymi
Dział zatytułowany „Strategia 1: Workspace z wieloma folderami głównymi”VS Code (i Cursor) wspiera workspace z wieloma folderami głównymi, gdzie otwierasz kilka folderów jako jeden workspace. Daje to agentowi wgląd we wszystkie uwzględnione repozytoria:
{ "folders": [ { "path": "./api-gateway" }, { "path": "./user-service" }, { "path": "./shared-types" }, { "path": "./frontend-app" } ], "settings": { "search.exclude": { "**/node_modules": true, "**/dist": true } }}Zapisz to jako project.code-workspace w katalogu głównym projektu. Otwórz za pomocą File > Open Workspace from File.
Strategia 2: Reguły dokumentujące kontrakty między repozytoriami
Dział zatytułowany „Strategia 2: Reguły dokumentujące kontrakty między repozytoriami”Gdy workspace z wieloma folderami nie są praktyczne (zbyt wiele repozytoriów, zbyt dużo szumu), zakoduj informacje o kontraktach w regułach:
---description: Cross-repo API contractsalwaysApply: true---
This service consumes the User API from the user-service repo.
User API contract (source of truth: user-service/src/routes/users.ts):- GET /api/users/:id returns { id, email, firstName, lastName, role, createdAt }- PATCH /api/users/:id accepts { firstName?, lastName?, email? }- POST /api/users accepts { email, firstName, lastName, password }
Shared types (source of truth: shared-types/src/user.ts):- UserResponse: { id: string, email: string, firstName: string, lastName: string, role: 'admin' | 'user', createdAt: string }- CreateUserRequest: { email: string, firstName: string, lastName: string, password: string }- UpdateUserRequest: Partial<Omit<CreateUserRequest, 'password'>>
When making changes that affect these contracts, flag it -- the corresponding services will need updates too.Strategia 3: Kopiowanie plików kontraktów
Dział zatytułowany „Strategia 3: Kopiowanie plików kontraktów”Dla kluczowych typów współdzielonych utrzymuj lokalną kopię lub dowiązanie symboliczne w każdym repozytorium konsumenckim:
# In your consuming repomkdir -p .cursor/contractscp ../shared-types/src/user.ts .cursor/contracts/user-types.tscp ../api-gateway/schema.graphql .cursor/contracts/gateway-schema.graphqlOdwołuj się do nich w promptach za pomocą @.cursor/contracts/user-types.ts, aby dać agentowi dokładne informacje o typach z repozytorium źródłowego.
Koordynowanie zmian między repozytoriami
Dział zatytułowany „Koordynowanie zmian między repozytoriami”Workflow “kontrakt przede wszystkim”
Dział zatytułowany „Workflow “kontrakt przede wszystkim””Gdy zmiana obejmuje wiele repozytoriów, zacznij od wspólnego kontraktu:
- Zaktualizuj definicję typów współdzielonych / kontraktu API w repozytorium źródłowym
- Zatwierdź zmianę i (jeśli dotyczy) opublikuj zaktualizowany pakiet typów
- W każdym repozytorium konsumenckim zaktualizuj zależność i dostosuj kod do nowego kontraktu
- Uruchom testy w każdym repozytorium, aby zweryfikować kompatybilność
Wzorzec równoległego rozwoju
Dział zatytułowany „Wzorzec równoległego rozwoju”Dla dużych funkcji obejmujących wiele repozytoriów używaj osobnych okien Cursora dla każdego repozytorium. Zaplanuj zmianę w jednym oknie, a następnie wykonuj w każdym:
- Okno planowania (dowolne repozytorium): Użyj trybu Ask do zaprojektowania zmiany przekrojowej
- Okno serwisu A: Zaimplementuj zmiany po stronie serwisu
- Okno serwisu B: Zaimplementuj zmiany po stronie konsumenta
- Testy integracyjne: Uruchom testy end-to-end między serwisami
Kwestie monorepo
Dział zatytułowany „Kwestie monorepo”Jeśli używasz monorepo (Turborepo, Nx, pnpm workspaces), Cursor ma natywny wgląd we wszystkie pakiety. Upraszcza to pracę wieloserwisową, ale wprowadza szum. Używaj reguł o zakresie folderowym, aby utrzymać skupienie agenta:
---globs: "packages/api/**/*.ts"---
This is the API package. It depends on:- packages/shared-types for TypeScript interfaces- packages/db for database queries via Drizzle ORM
API routes are in packages/api/src/routes/. Follow the pattern in users.ts for new routes.Do not modify packages outside of packages/api/ unless explicitly asked.Kiedy coś nie działa
Dział zatytułowany „Kiedy coś nie działa”Agent sugeruje zmiany w złym repozytorium w workspace z wieloma folderami. Dodaj reguły ograniczające granice każdego serwisu. Powiedz agentowi wyraźnie, które katalogi powinien modyfikować.
Dokumentacja kontraktów w regułach staje się przestarzała. Zautomatyzuj kopiowanie plików kontraktów jako część CI lub hooka pre-commit. Lub użyj schematów OpenAPI/GraphQL jako źródła prawdy i odwołuj się do nich bezpośrednio.
Agent nie rozumie granic serwisów. Twoje reguły muszą wyjaśniać architekturę. Krótki opis tego, który serwis jest właścicielem której domeny i jak komunikują się między sobą, robi ogromną różnicę.
Co dalej
Dział zatytułowany „Co dalej”- Strategie dla dużych baz kodu — Indeksowanie i wydajność specyficzne dla monorepo
- Współpraca zespołowa — Udostępnianie reguł między repozytoriami w zespole
- Niestandardowe reguły i szablony — Budowanie reguł dokumentacji kontraktów