Dostosowywanie modernizacji GitHub Copilot

GitHub Copilot modernizacja jest rozszerzalna. Agent udostępnia wiele punktów dostosowywania, które umożliwiają kodowanie wzorców uaktualniania zespołu, wymuszanie standardów kodowania podczas uaktualniania i definiowanie nowych przepływów pracy uaktualniania.

Omówienie punktów dostosowywania

Punkt dostosowywania Scope Wytrwałość Effort
Instrukcje dotyczące czatu Na sesję lub aktualizację Sesja lub zapisana w scenario-instructions.md Minimalny
Artefakty scenariusza Za uaktualnienie Czas trwania uaktualnienia Low
Umiejętności niestandardowe Zespół lub osobisty Trwałe (zaewidencjonowane w repozytorium lub profilu użytkownika) Średni
Scenariusze niestandardowe Zespół lub osobisty Permanent High

Napiwek

Rozpocznij od instrukcji czatu i edycji artefaktu scenariusza. Przejdź do umiejętności niestandardowych, gdy znajdziesz się powtarzając te same instrukcje w ramach uaktualnień.

Dostosowywanie za pośrednictwem czatu

Dostosuj zachowanie agenta w czasie rzeczywistym za pomocą naturalnej konwersacji. Agent stosuje instrukcję natychmiast lub zapisuje ją w scenario-instructions.md do przyszłego wykorzystania.

Mówisz Co się stanie
"Od teraz zawsze zatwierdzaj po każdym zadaniu" Zapisano do scenario-instructions.md jako preferencja wykonywania
"Pomiń walidację testu dla tego zadania" Zastosowane natychmiast tylko do bieżącego zadania
"Użyj strategii oddolnej na potrzeby tego uaktualnienia" Wpływa na strategię fazy planowania
"Nie dotykaj projektu rejestrowania" Dodano do preferencji; agent wyklucza ten projekt
"Zawsze używaj przestrzeni nazw z zakresem ograniczonym do pliku" Zapisano jako standardową preferencję kodowania
"Wstrzymaj po każdym zadaniu do przeglądu" Zapisane jako preferencja trybu wykonania

Napiwek

Aby instrukcja była utrwalana w całym uaktualnieniu, należy wypowiedzieć ją jako trwałą preferencję: "Od teraz zawsze..." lub "Dla wszystkich zadań w tym uaktualnieniu...". Agent zapisuje instrukcję w pliku scenario-instructions.md.

Edytowanie artefaktów scenariusza

Po uruchomieniu uaktualnienia agent tworzy obszar roboczy w programie .github/upgrades/{scenarioId}/. Folder uaktualniania zawiera edytowalne artefakty, które bezpośrednio kontrolują zachowanie agenta.

instrukcje-scenariusza.md

Plik scenario-instructions.md jest pamięcią trwałą agenta na potrzeby uaktualnienia. Agent zawsze ładuje ten plik do kontekstu, więc wszystko, co piszesz tutaj bezpośrednio wpływa na każdą decyzję, którą podejmuje agent.

Dodaj sekcje podobne do poniższych, aby kierować agentem:

## User Preferences

### Technical Preferences
- Always prefer explicit type declarations over `var`
- Use `ILogger<T>` instead of `ILoggerFactory` for dependency injection
- Target .NET 10 for all projects
- Keep Newtonsoft.Json in the shared library (don't migrate to System.Text.Json)

### Execution Style
- **Pace**: Methodical
- **Pause Points**: After assessment, after each task group

### Custom Instructions

#### 02-common-lib
- Skip the database migration for now — it has external dependencies
- Use the connection string from `appsettings.Production.json` for testing

#### 03-data-layer
- Keep existing repository interfaces during migration
- Preserve all Entity Framework conventions

## Key Decisions Log
- 2025-01-15: Keep Newtonsoft.Json in SharedLib — third-party SDK requires it
- 2025-01-16: Skip database project — DBA team will handle separately

plan.md

Plik plan.md definiuje zadania i ich zakres. Edytuj plan.md na:

  • Zmień kolejność zadań w celu zmiany sekwencji wykonywania.
  • Dodaj zadania, których agent nie zaplanował.
  • Usuń zadania, które nie mają zastosowania.
  • Dodaj notatki, aby zapewnić kontekst dla określonych zadań.

Pojedyncze pliki zadań

Każde zadanie w programie tasks/{taskId}/task.md zawiera specyfikację zadania i notatki robocze. Edytuj następujące pliki:

  • Uściślij zakres zadania.
  • Dodaj pominięty przez agenta kontekst specyficzny dla domeny.
  • Podaj przykłady kodu dla żądanego wyniku.

Ważna

Narzędzia agenta zarządzają tasks.md w formie panelu tylko do odczytu. Nie edytuj tasks.md bezpośrednio. Agent zastępuje wszelkie zmiany wprowadzone ręcznie. Zamiast tego edytuj scenario-instructions.md lub pojedyncze task.md pliki.

Tworzenie umiejętności niestandardowych

Umiejętności to podstawowy punkt rozszerzenia agenta. Umiejętność to plik Markdown z nagłówkiem metadanych, który instruuje agenta, jak zarządzać specyficzną aktualizacją, wzorcem lub zadaniem.

Gdzie umieścić umiejętności niestandardowe

Lokalizacja Scope Użyj, gdy
.github/skills/my-skill.md Repozytorium (udostępnione zespołowi) Wzorce uaktualniania całego zespołu
.github/upgrades/skills/my-skill.md Repozytorium (dedykowane aktualizacji) Umiejętności specyficzne dla scenariuszy uaktualniania
%UserProfile%/.copilot/skills/my-skill.md Profil użytkownika (osobiste, wszystkie repozytoria) Preferencje i wzorce osobiste

Napiwek

Umiejętności na poziomie repozytorium (.github/skills/) są najczęściej wybierane. Podróżują z kodem, a cały zespół może ich używać.

Struktura pliku umiejętności

Każdy plik umiejętności zawiera dwie części: nagłówek metadanych (używany przez agenta do określenia, kiedy dana funkcjonalność jest stosowana) i część Markdown (instrukcje, które agent wykonuje).

---
name: migrating-foobar-v2-to-v3
description: >
  Migrate our internal FooBar library from v2 to v3. Activates when
  FooBar.v2 NuGet package is detected, or when asked to "upgrade FooBar",
  "migrate FooBar", or "update FooBar library".
metadata:
  discovery: lazy
  traits: .NET | CSharp
---

# Migrating FooBar Library v2 to v3

## Overview

FooBar v3 introduces a new async-first API surface. This skill guides the
agent through replacing synchronous FooBar.v2 calls with their v3 async
equivalents, updating configuration, and verifying behavior.

## Workflow

1. **Identify FooBar.v2 references**
   - Search for `PackageReference` elements referencing `FooBar.v2`
   - Locate all `using FooBar.V2;` directives

2. **Update package references**
   - Replace `FooBar.v2` with `FooBar.v3` in all `.csproj` files
   - Run `dotnet restore` to verify resolution

3. **Migrate API calls**
   - Replace `FooBarClient.Send(...)` with `await FooBarClient.SendAsync(...)`
   - Replace `FooBarConfig.LoadFromFile(...)` with `FooBarConfig.LoadFromJsonAsync(...)`
   - Update method signatures to `async Task` where needed

4. **Update configuration**
   - Rename `foobar.config` to `foobar.json`
   - Migrate XML config entries to JSON format

5. **Verify**
   - Build the project: `dotnet build`
   - Run existing tests: `dotnet test`
   - Verify no remaining references to `FooBar.V2` namespace

## Success Criteria

- [ ] No references to `FooBar.v2` NuGet package remain
- [ ] All `FooBar.V2` namespace usages replaced with `FooBar.V3`
- [ ] Project builds without errors
- [ ] All existing tests pass

## Error Handling

- If `FooBar.v3` is not available in the configured NuGet feeds, instruct
  the user to add the internal feed
- If async migration causes deadlocks in legacy synchronous code paths,
  wrap calls with `.GetAwaiter().GetResult()` and add a TODO comment

Pola metadanych

Pole Wymagane Opis
name Yes Unikatowy identyfikator w kebab-case. Zacznij od czasownika gerund (na przykład upgrading-, converting-). Maksymalnie 64 znaki.
description Yes Określa, kiedy agent ładuje umiejętność. Uwzględnij frazy wyzwalacza, takie jak wyrazy i wzorce, które powinny aktywować umiejętności.
metadata.discovery Nie. Określa, kiedy umiejętność jest ładowana: preload (zawsze dostępna), lazy (na żądanie, gdy opis pasuje; jest to ustawienie domyślne i zalecane) lub scenario (definiuje koordynatora przepływu pracy).
metadata.traits Nie. Słowa kluczowe opisujące technologie w projekcie, takie jak .NET, CSharp, VisualBasic lub DotNetCore.

Najlepsze rozwiązania dotyczące tworzenia umiejętności

  • W opisie należy podawać szczegółowe informacje: Uwzględnij dokładne nazwy pakietów, nazwy bibliotek i frazy wyzwalacza języka naturalnego, które użytkownicy mogą wpisać.
  • Uwzględnij przejrzyste przepływy pracy krok po kroku: Numeruj kroki. Należy jawnie określić, jakie pliki mają zostać zmienione i jakie polecenia mają być uruchamiane.
  • Uwzględnij kryteria sukcesu: Bez kryteriów powodzenia agent nie wie, kiedy zatrzymać. Użyj pól wyboru lub jasnej listy warunków weryfikowalnych.
  • Uwzględnij obsługę błędów: Przewidywanie typowych trybów awarii, takich jak brakujące pakiety, błędy kompilacji lub przerwane testy.
  • Kontynuuj skupienie się na umiejętnościach: Jedna umiejętność na uaktualnienie lub typ zadania. Umiejętność "uaktualniania fooBar v2 do wersji 3" jest lepsza niż "uaktualnianie wszystkich bibliotek wewnętrznych".
  • Nazwa z czasownikiem w formie gerundium: Użyj upgrading-foobar-v2-to-v3, a nie foobar-upgrade lub foobar-v3.
  • lazy Wykorzystaj mechanizm do wykrywania większości niestandardowych umiejętności, aby zapobiec przepełnieniu okna kontekstu agenta.

Tworzenie scenariuszy niestandardowych

W przypadku zaawansowanych użytkowników, którzy chcą definiować całkowicie nowe przepływy pracy aktualizacji, scenariusze niestandardowe umożliwiają zorkiestrowanie pełnego, wielofazowego potoku aktualizacji. Scenariusz to umiejętność metadata.discovery: scenario, która definiuje fazy, przez które przechodzi agent.

---
name: migrating-soap-to-rest-api
description: >
  Migrate legacy WCF/SOAP services to ASP.NET Core REST APIs. Activates
  when WCF service references, .svc files, or SOAP clients are detected,
  or when asked to "migrate SOAP to REST", "replace WCF", or "convert
  web services to REST".
metadata:
  discovery: scenario
  traits: .NET | CSharp
  scenarioTraitsSet: [wcf, soap, web-services]
---

# SOAP to REST API Migration

## Pre-initialization

Gather from the user:
- Which SOAP services to migrate (all or specific ones)
- Whether to maintain backward compatibility with a SOAP facade
- Authentication mechanism for the new REST APIs
- API versioning strategy (URL path, header, query string)

## Assessment

Analyze the solution for:
- `.svc` files and WCF service contracts
- WSDL files and service references
- `System.ServiceModel` usage and binding configurations
- Data contracts and their serialization requirements
- Client proxies consuming SOAP services

## Planning

Create tasks in this order:
1. Create shared DTOs — Convert `[DataContract]` types to POCOs
2. Create REST controllers — One controller per `[ServiceContract]`
3. Map operations to HTTP methods
4. Migrate service implementations
5. Update clients — Replace `ChannelFactory`/generated proxies with `HttpClient`
6. Remove WCF infrastructure
7. Add API documentation — Swagger/OpenAPI via Swashbuckle

## Execution

For each service contract:
1. Create a corresponding controller
2. Create a service interface and implementation
3. Register the service in DI
4. Map WCF operations to REST endpoints
5. Update any in-solution clients to use the new REST endpoints
6. Build and run existing tests

Umieść pliki scenariuszy w .github/skills/ lub .github/upgrades/skills/, aby agent mógł je odnaleźć.

Napiwek

Pole scenarioTraitsSet definiuje cechy używane przez agenta do dopasowania scenariusza do cech rozwiązania. Te cechy ułatwiają agentowi sugerowanie scenariusza, jeśli jest to konieczne.

Kontrola źródła i rozgałęzianie

Agent oferuje pracę w gałęzi Git, ale masz pełną kontrolę nad strategią:

  • Nazewnictwo gałęzi: Poinformuj agenta, jakiej nazwy gałęzi użyć, lub pozwól agentowi go zasugerować.
  • Gałęzie poszczególnych zadań: Zażądaj oddzielnej gałęzi na zadanie w celu szczegółowego przeglądu.
  • Czas zatwierdzania: Wybierz, kiedy agent zatwierdza: po każdym ukończonym zadaniu (ustawienie domyślne), tylko na końcu pełnego uaktualnienia lub na żądanie.
  • Brak kontroli źródła: Agent współpracuje również z folderami innych niż Git, ale zaleca najpierw tworzenie kopii zapasowej projektu.

Przykładowe instrukcje czatu:

  • "Użyj nazwy gałęzi 'upgrade/dotnet10' dla tego uaktualnienia"
  • "Utwórz gałąź na zadanie, aby móc przeglądać poszczególne elementy osobno"
  • "Nie zatwierdzaj, dopóki jawnie nie pytam cię"
  • "Zatwierdzaj każde zadanie, dołączając opisowy komunikat"

Napiwek

W przypadku dużych uaktualnień obejmujących wiele projektów gałęzie poszczególnych zadań zapewniają elastyczność przeglądania i scalania każdej zmiany niezależnie lub wycofywania pojedynczego zadania bez wpływu na resztę.

Priorytet ładowania umiejętności

Gdy agent odnajduje wiele umiejętności, rozwiązuje je przy użyciu systemu priorytetowego. Źródła o wyższym priorytcie zastępują lub uzupełniają te o niższym priorytcie:

Priority Źródło Lokalizacja
5 (najwyższa) Umiejętności niestandardowe (udostępniane przez użytkownika za pośrednictwem interfejsu API)
4 Umiejętności profilu użytkownika %UserProfile%/.copilot/skills/
3 Umiejętności uaktualniania repozytorium .github/upgrades/skills/
2 Umiejętności zarządzania repozytorium .github/skills/
1 (najniższa) Wbudowane umiejętności (zintegrowane z agentem)

Agent zbiera umiejętności ze wszystkich źródeł. Jeśli umiejętności mają nakładające się zakresy, pierwszeństwo mają źródła o wyższym priorytcie. Pole discovery kontroluje moment ładowania umiejętności. lazy oznacza na żądanie, gdy jest to istotne, i preload oznacza zawsze dostępne.

Napiwek

Nie musisz zastępować wbudowanej umiejętności, aby zmienić zachowanie. Umiejętność o wyższym priorytecie z repozytorium uzupełnia wbudowaną umiejętność, dodając specyficzne dla zespołu konwencje do podstawowego zachowania.