Wszystkie wpisy

Wieloplikowa pomoc Copilota - @workspace, nie Workspace GA (marzec 2024)
Wieloplikowa pomoc Copilota - @workspace, nie Workspace GA (marzec 2024)

English

Wieloplikowa pomoc Copilota - @workspace, nie Workspace GA (marzec 2024)

Marzec 2024: pytam @workspace o kilka plików testów. Copilot Workspace jest early glimpse, nie preview do użycia. Devin tylko jako nagłówek.

Obietnica z Universe i to, co mam 15 marca

Jest 15 marca. W styczniu napisałem, że listopadowe Universe pokazało zapowiedź środowiska, w którym asystent prowadzi zmianę przez wiele plików, od issue do pull requesta, i że tego środowiska nie mam. Minęły dwa miesiące i nadal go nie mam. GitHub nazwał tę zapowiedź Copilot Workspace i 8 listopada 2023 powiedział, że “when Copilot Workspace is delivered in 2024”. Dziś, w połowie marca, nie mam waitlisty, nie mam preview i nie otwieram niczego, co prowadziłoby issue przez plan do PR.

Mam natomiast coś, co w rozmowach myli się z tamtą zapowiedzią, i o to jest ten wpis. Od 29 grudnia Copilot Chat jest w ogólnej dostępności w stabilnym VS Code, bez Insidersa i bez rozszerzenia Nightly, o których pisałem w maju. Od changelogu z 30 listopada 2023 w tym czacie siedzi agent @workspace: pytanie, które nie jest przywiązane do jednego otwartego bufora, tylko do repozytorium, które mam w oknie. To jest wieloplikowa pomoc, którą naprawdę używam. To nie jest produkt Workspace.

Moja teza na marzec 2024 jest wąska. Wieloplikowa pomoc to @workspace w Copilot Chat. Recenzuję plan zmian w kilku plikach testów, zanim cokolwiek wkleję do suite. Nie deleguję merge’a. Nie udaję, że Universe już dostarczyło most od zgłoszenia do pull requesta.

Stan warsztatu na dziś. Runner to Playwright 1.42.1 z 2 marca. Chat mam w stabilnym VS Code na tej samej subskrypcji co ghost text od czerwca 2022. 27 lutego Copilot Enterprise wszedł w GA: czat na github.com, bazy wiedzy, podsumowania PR. Żadna z tych trzech rzeczy nie jest Workspace. Nie wpinam też do tego wpisu narzędzi, których nie mam pod ręką jako codziennego stacku.

Czego tu nie będzie. Nie będzie zdania, że “dziś otwieram Workspace i commituję z issue do PR”. Nie będzie tutoriala Devin. Nie będzie przerzucania daily na claude.ai. Będzie jedno syntetyczne demo: POM, spec i test logowania w repozytorium przykładów, pytanie @workspace, gdzie dodać asercję na błąd hasła, i dwa skreślenia.

Co znaczy wieloplikowo w marcu

Ghost text nadal widzi jeden bufor. Tak było w technical preview, tak było przy boilerplate testów, tak jest dziś. Szary tekst przed kursorem nie wie, że obok login.spec.ts leży LoginPage.ts i auth.md. Wie, co jest nad kursorem.

@workspace jest po to, żeby to ograniczenie zdjąć bez wklejania trzech plików do przeglądarki. Pytam w czacie, z agentem @workspace, o rzecz, która z definicji nie mieści się w jednym pliku: gdzie w tym zestawie dodać asercję, że złe hasło zostawia użytkownika na formularzu i pokazuje komunikat. Chat zbiera referencje. Ja decyduję, które z nich ruszyć.

Różnica względem maja 2023 jest statusem produktu, nie magią. Wtedy czat był preview w Insidersie i widział otwarty plik. Dziś jest GA i umie wskazać kilka plików. Nadal nie umie zatwierdzić, że wskazanie jest trafne. Nadal nie merguje.

W praktyce wygląda to tak, że otwieram czat, wpisuję @workspace i pytanie, i dostaję listę miejsc. Czasem z cytatem. Czasem z pewnością, której cytat nie podtrzymuje. Tę listę czytam jak review, nie jak polecenie.

Plan, nie apply na ślepo

Proszę wprost o dwie rzeczy i nic więcej: listę plików, które trzeba ruszyć, i propozycję diffu w czacie. Nie proszę o zapisanie zmian na dysk. Nie proszę o commit. To jest ta sama dyscyplina, którą w kwietniu 2023 stosowałem do ghost textu, tylko obiekt recenzji jest szerszy: nie jedna podpowiedź w linii, tylko plan, który pretenduje do znajomości trzech plików naraz.

Pokażę to na syntetycznym logowaniu z repozytorium przykładów, nie z projektu klienta. Są trzy pliki. LoginPage.ts trzyma lokatory i metody. login.spec.ts ma scenariusz poprawnego hasła. auth.md opisuje, że złe hasło zostawia formularz i pokazuje tekst “Nieprawidłowe hasło”. Prompt, który wkleiłem, brzmiał tak:

@workspace Gdzie dodać asercję, że logowanie złym hasłem
zostawia użytkownika na formularzu i pokazuje komunikat błędu?
Nie zapisuj zmian. Wypisz pliki i proponowany diff.

Odpowiedź wskazała trzy miejsca. Dwa z nich skreślam.

Skreślenie pierwsze: zły plik. Chat zaproponował dopisać asercję do istniejącego testu poprawnego hasła, na końcu, po expect(page).toHaveURL(/pulpit/). To jest najkrótsza droga do zielonego i najgorsza umowa o to, co ten test sprawdza. Scenariusz sukcesu nie powinien w drugiej połowie udawać, że hasło jest złe. Asercja na błąd hasła należy do nowego testu albo do osobnego test(), nie do ogona happy path. POM mógł dostać metodę expectError(message), spec nie musiał się ruszać, login.spec.ts musiał dostać drugi przypadek. Chat złożył to w jedną edycję, bo tak jest mniej plików.

Skreślenie drugie: zmyślony export. W propozycji diffu dla LoginPage.ts pojawił się import errorBanner z pliku locators.ts. Tego pliku w tym repozytorium nie ma. Nie było go w cytowanych referencjach. Model dopisał go, bo w innych projektach, na których się uczył, lokatory mieszkają w osobnym module, a mój POM trzyma je w klasie strony. Gdybym wkleił ten diff bez czytania, dostałbym czerwony TypeScript zanim dostałbym czerwony test.

Zostaje trzecie wskazanie i to jest jedyne, które przyjąłem jako plan: nowy test w login.spec.ts plus metoda na page objectcie, która czyta komunikat po nieudanym submitcie. auth.md zostaje źródłem oczekiwania, nie miejscem na kod. To rozstrzygnięcie nie wyszło z czatu. Wyszło z recenzji.

Nie deleguję merge’a, bo pod tym planem nie podpisuje się nikt poza mną. @workspace nie widzi, czy komunikat błędu jest w DOM, czy w aria-live, czy w toście, który znika po trzech sekundach. Tego nie ma w plikach, które zindeksował. Jest w zachowaniu aplikacji, a zachowanie sprawdzam runnerem, nie czatem.

Devin jako nagłówek

12 marca, trzy dni przed tym wpisem, Cognition ogłosiło Devina: “AI software engineer” z dostępem do shella i przeglądarki, na razie early access i waitlista. Nagłówek jest głośny i wpisuje się w tę samą rozmowę, którą w styczniu miałem przy pętli Auto-GPT: cel, narzędzia, kolejne kroki, obietnica, że suite dostanie właściciela.

Nie instaluję tego. Nie mam dostępu. Nie robię z tego tutoriala utrzymania testów. Zostawiam datę i jedną obserwację: Devin reklamuje się jako agent, który sam dochodzi do końca, a @workspace reklamuje się jako czat, który widzi repozytorium. To są dwa różne kontrakty. W marcu 2024 zostaję przy drugim, z recenzją planu, i nie zamieniam go na pierwszy tylko dlatego, że pierwszy lepiej wygląda w tytule.

Claude 3 jako konkurent

4 marca Anthropic ogłosił rodzinę Claude 3: Opus i Sonnet od razu, Haiku w zapowiedzi “soon”. API jest ogólnie dostępne. To jest realny konkurent dla czatu w przeglądarce, w którym od stycznia 2023 szkicuję przypadki. Nie jest konkurentem dla @workspace w VS Code, bo nie siedzi w moim edytorze i nie indeksuje mi repozytorium testów.

Nie przerzucam daily na claude.ai. Copilot zostaje w IDE, Claude zostaje w tej samej szufladzie co ChatGPT: szkic, który wklejam i wykreślam. Na 15 marca nie mam powodu, żeby mieszać te dwa kanały w jeden proces. Piramida od września nie zmieniła kształtów dlatego, że w marcu doszedł kolejny model.

Podsumowanie

Wieloplikowa pomoc, którą mam w marcu 2024, to kontekst workspace w Copilot Chat. Produkt Copilot Workspace zostaje obietnicą z Universe.

Trzy zdania, które chcę móc przeczytać za rok. 15 marca nie otwieram Workspace i nie prowadzę issue do PR; otwieram @workspace i proszę o listę plików plus diff w czacie. Syntetyczny zestaw logowania pokazał dwa skreślenia, które znam z ghost textu i z pętli: asercja doklejona do happy path i import z pliku, którego nie ma. Recenzja planu zostaje, dokładnie tak jak recenzja jednej linii w kwietniu i recenzja agenta w styczniu.

Czego z tego nie wynika. Nie wynika, że Workspace nie wyjdzie w tym roku: GitHub zapowiedział 2024 i ja tę datę odnotowuję, nie negocjuję. Nie wynika, że Devin jest bez wartości, bo nie mam go w rękach i nie mam jak tego zmierzyć. Nie wynika, że @workspace zastępuje czytanie POM, specu i testu po kolei, bo jedyny poprawny plan z dema ułożyłem ja, po skreśleniach.

Warunek, po którym poznam, że most issue-plan-PR dojrzał, formułuję tak: dostanę preview, które sam uruchomię, i dwa przebiegi na tym samym zgłoszeniu dadzą ten sam zestaw plików, bez zmyślonego exportu. Do tego czasu wieloplikowa pomoc u mnie kończy się na czacie. Merge podpisuję ja.