<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Cli | The .NET Blog</title><link>https://thedotnetblog.com/pl/tags/cli/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>pl</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/pl/tags/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Windows App Dev CLI v0.3: F5 z terminala i UI Automation dla agentów</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 przynosi winapp run do uruchamiania i debugowania z terminala, winapp ui do automatyzacji interfejsu oraz nowy pakiet NuGet umożliwiający działanie dotnet run z zapakowanymi aplikacjami.</description><content:encoded>&lt;p&gt;&lt;em&gt;Ten artykuł został przetłumaczony automatycznie. Aby zobaczyć oryginał, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Doświadczenie F5 w Visual Studio jest świetne. Ale otwieranie VS tylko po to, żeby uruchomić i debugować zapakowaną aplikację Windows — czy to w potoku CI, zautomatyzowanym workflowie, czy gdy agent AI wykonuje testy — to zbędny narzut.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 właśnie &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;wyszło&lt;/a&gt; i rozwiązuje ten problem bezpośrednio dzięki dwóm głównym funkcjom: &lt;code&gt;winapp run&lt;/code&gt; i &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-f5-z-dowolnego-miejsca"&gt;winapp run: F5 z dowolnego miejsca&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; przyjmuje folder niezapakowanej aplikacji i manifest, wykonując wszystko, co VS robi przy uruchamianiu debugowania: rejestruje luźny pakiet, uruchamia aplikację i zachowuje &lt;code&gt;LocalState&lt;/code&gt; między ponownymi deploymentami.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Zbuduj aplikację, a następnie uruchom ją jako zapakowaną aplikację&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winapp run ./bin/Debug
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Działa dla WinUI, WPF, WinForms, Console, Avalonia i innych. Tryby są zaprojektowane zarówno dla deweloperów, jak i zautomatyzowanych workflowów:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Uruchamia i natychmiast zwraca kontrolę do terminala. Idealny dla CI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Usuwa zarejestrowany pakiet przy zamknięciu aplikacji.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: Przechwytuje komunikaty &lt;code&gt;OutputDebugString&lt;/code&gt; i wyjątki w czasie rzeczywistym.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="nowy-pakiet-nuget-dotnet-run-dla-zapakowanych-aplikacji"&gt;Nowy pakiet NuGet: dotnet run dla zapakowanych aplikacji&lt;/h2&gt;
&lt;p&gt;Dla deweloperów .NET jest nowy pakiet NuGet: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;. Po instalacji &lt;code&gt;dotnet run&lt;/code&gt; obsługuje cały inner loop: budowanie, przygotowanie pakietu loose-layout, rejestrację w Windows i uruchomienie — wszystko w jednym kroku.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winapp init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# lub&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet add package Microsoft.Windows.SDK.BuildTools.WinApp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="winapp-ui-ui-automation-z-wiersza-poleceń"&gt;winapp ui: UI Automation z wiersza poleceń&lt;/h2&gt;
&lt;p&gt;To funkcja otwierająca scenariusze agentyczne. &lt;code&gt;winapp ui&lt;/code&gt; zapewnia pełny dostęp UI Automation do dowolnej działającej aplikacji Windows — WPF, WinForms, Win32, Electron, WinUI3 — bezpośrednio z terminala.&lt;/p&gt;
&lt;p&gt;Co można robić:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wylistować wszystkie okna najwyższego poziomu&lt;/li&gt;
&lt;li&gt;Nawigować po pełnym drzewie UI Automation dowolnego okna&lt;/li&gt;
&lt;li&gt;Wyszukiwać elementy po nazwie, typie lub ID automatyzacji&lt;/li&gt;
&lt;li&gt;Klikać, wywoływać i ustawiać wartości&lt;/li&gt;
&lt;li&gt;Robić zrzuty ekranu&lt;/li&gt;
&lt;li&gt;Czekać na pojawienie się elementów — idealne do synchronizacji testów&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Połączenie &lt;code&gt;winapp ui&lt;/code&gt; z &lt;code&gt;winapp run&lt;/code&gt; daje kompletny workflow build → uruchomienie → weryfikacja z terminala. Agent może uruchomić aplikację, sprawdzić stan UI, programowo z nią interagować i zwalidować wynik.&lt;/p&gt;
&lt;h2 id="inne-nowości"&gt;Inne nowości&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Usuwa sideloadowany pakiet po zakończeniu pracy.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Dodaje alias do uruchamiania aplikacji po nazwie z terminala.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uzupełnianie tabulatorem&lt;/strong&gt;: Jedno polecenie do skonfigurowania uzupełniania w PowerShell.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="jak-zdobyć"&gt;Jak zdobyć&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;winget install Microsoft.WinAppCli
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# lub&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;npm install -g @microsoft/winappcli
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;CLI jest w publicznym podglądzie. Pełna dokumentacja dostępna w &lt;a href="https://github.com/microsoft/WinAppCli"&gt;repozytorium GitHub&lt;/a&gt;, a wszystkie szczegóły w &lt;a href="https://devblogs.microsoft.com/ifdef-windows/windows-app-development-cli-v0-3-new-run-and-ui-commands-plus-dotnet-run-support-for-packaged-apps/"&gt;oryginalnym ogłoszeniu&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Przestań Pilnować Terminala: Tryb Odłączony Aspire Zmienia Przepływ Pracy</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2 pozwala uruchomić AppHost w tle i odzyskać terminal. W połączeniu z nowymi poleceniami CLI i obsługą agentów, to większa sprawa niż się wydaje.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Za każdym razem gdy uruchamiasz Aspire AppHost, twój terminal znika. Zablokowany. Zajęty do Ctrl+C. Chcesz uruchomić szybkie polecenie? Nowa karta. Sprawdzić logi? Kolejna karta. To małe tarcie szybko się kumuluje.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 to naprawia. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;opisał wszystkie szczegóły&lt;/a&gt;, i szczerze, to jedna z tych funkcji, która natychmiast zmienia sposób pracy.&lt;/p&gt;
&lt;h2 id="tryb-odłączony-jedno-polecenie-terminal-wraca"&gt;Tryb odłączony: jedno polecenie, terminal wraca&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To skrót dla &lt;code&gt;aspire run --detach&lt;/code&gt;. Twój AppHost uruchamia się w tle i natychmiast odzyskujesz terminal.&lt;/p&gt;
&lt;h2 id="zarządzanie-tym-co-działa"&gt;Zarządzanie tym, co działa&lt;/h2&gt;
&lt;p&gt;Uruchamianie w tle jest przydatne tylko wtedy, gdy możesz faktycznie zarządzać tym, co jest uruchomione. Aspire 13.2 dostarcza pełny zestaw poleceń CLI:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Lista wszystkich działających AppHostów&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire ps
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Sprawdź stan konkretnego AppHosta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire describe
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Strumieniuj logi z działającego AppHosta&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire logs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Zatrzymaj konkretny AppHost&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="połącz-z-trybem-izolowanym"&gt;Połącz z trybem izolowanym&lt;/h2&gt;
&lt;p&gt;Tryb odłączony naturalnie łączy się z trybem izolowanym:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire start --isolated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire start --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Każda instancja otrzymuje losowe porty, oddzielne sekrety i własny cykl życia.&lt;/p&gt;
&lt;h2 id="dlaczego-to-jest-ogromne-dla-agentów-kodowania"&gt;Dlaczego to jest ogromne dla agentów kodowania&lt;/h2&gt;
&lt;p&gt;Agent kodujący w twoim terminalu może teraz:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Uruchomić aplikację z &lt;code&gt;aspire start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Zapytać o jej stan za pomocą &lt;code&gt;aspire describe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Sprawdzić logi &lt;code&gt;aspire logs&lt;/code&gt; w celu diagnozy problemów&lt;/li&gt;
&lt;li&gt;Zatrzymać ją &lt;code&gt;aspire stop&lt;/code&gt; po zakończeniu&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Uruchomienie &lt;code&gt;aspire agent init&lt;/code&gt; konfiguruje plik umiejętności Aspire, który uczy agentów tych poleceń.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Tryb odłączony to ulepszenie przepływu pracy ukryte jako prosta flaga. Przeczytaj &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;pełny post&lt;/a&gt; i pobierz Aspire 13.2 z &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd update — Jedno Polecenie do Wszystkich Menedżerów Pakietów</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI ma teraz uniwersalne polecenie aktualizacji, które działa niezależnie od metody instalacji — winget, Homebrew, Chocolatey lub skrypt instalacyjny.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten komunikat &amp;ldquo;Dostępna jest nowa wersja azd&amp;rdquo;, który pojawia się co kilka tygodni? Ten, który odrzucasz, bo nie pamiętasz, czy zainstalowałeś &lt;code&gt;azd&lt;/code&gt; przez winget, Homebrew czy ten skrypt curl z sześciu miesięcy temu? To jest w końcu naprawione.&lt;/p&gt;
&lt;p&gt;Microsoft właśnie dostarczył &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — pojedyncze polecenie, które aktualizuje Azure Developer CLI do najnowszej wersji niezależnie od tego, jak go pierwotnie zainstalowałeś.&lt;/p&gt;
&lt;h2 id="jak-to-działa"&gt;Jak to działa&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;To wszystko. Dla wczesnego dostępu do nowych funkcji:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel daily
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd update --channel stable
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Polecenie wykrywa Twoją aktualną metodę instalacji i używa odpowiedniego mechanizmu aktualizacji.&lt;/p&gt;
&lt;h2 id="mały-haczyk"&gt;Mały haczyk&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; jest dostarczany od wersji 1.23.x. Jeśli jesteś na starszej wersji, będziesz musiał wykonać jedną ostatnią ręczną aktualizację. Potem &lt;code&gt;azd update&lt;/code&gt; zajmuje się wszystkim.&lt;/p&gt;
&lt;h2 id="dlaczego-to-ważne"&gt;Dlaczego to ważne&lt;/h2&gt;
&lt;p&gt;To małe ulepszenie jakości życia, ale dla tych z nas, którzy używają &lt;code&gt;azd&lt;/code&gt; na co dzień do wdrażania agentów AI i aplikacji Aspire do Azure, bycie na bieżąco ma znaczenie.&lt;/p&gt;
&lt;p&gt;Przeczytaj &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;pełne ogłoszenie&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>.NET Aspire 13.2 Chce Być Najlepszym Przyjacielem Twojego Agenta AI</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 stawia wszystko na agentic development — ustrukturyzowane wyjście CLI, izolowane uruchomienia, środowiska samoleczące i pełne dane OpenTelemetry, żeby agenci AI mogli faktycznie budować, uruchamiać i obserwować twoje aplikacje.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten moment, kiedy twój agent kodowania AI pisze świetny kod, ekscytujesz się, a potem wszystko się sypie, kiedy próbuje to &lt;em&gt;uruchomić&lt;/em&gt;? Konflikty portów, phantom processes, złe zmienne środowiskowe — nagle agent spala tokeny na rozwiązywanie problemów ze startem zamiast budować funkcje.&lt;/p&gt;
&lt;p&gt;Zespół Aspire opublikował &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;bardzo przemyślany post&lt;/a&gt; dokładnie o tym problemie, a ich odpowiedź jest przekonująca: Aspire 13.2 jest zaprojektowany nie tylko dla ludzi, ale dla agentów AI.&lt;/p&gt;
&lt;h2 id="aspire-jako-infrastruktura-agentów"&gt;Aspire jako infrastruktura agentów&lt;/h2&gt;
&lt;p&gt;Oto co Aspire 13.2 wnosi do stołu agentic development:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Cały stos w typowanym kodzie.&lt;/strong&gt; AppHost definiuje pełną topologię — w kompilowanym TypeScript lub C#:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;./.modules/aspire.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postgres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addPostgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;catalog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addRedis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cache&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNodeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/index.ts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PORT&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Jedno polecenie do wszystkiego.&lt;/strong&gt; Zamiast żonglowania &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt; i skryptami startowymi bazy danych — wszystko to po prostu &lt;code&gt;aspire start&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Izolowany tryb dla równoległych agentów.&lt;/strong&gt; Z &lt;code&gt;--isolated&lt;/code&gt;, każde uruchomienie Aspire dostaje własne losowe porty i oddzielne sekrety użytkownika.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Oczy agenta przez telemetrię.&lt;/strong&gt; CLI Aspire eksponuje pełne dane OpenTelemetry podczas developmentu — ślady, metryki, ustrukturyzowane logi.&lt;/p&gt;
&lt;h2 id="analogia-do-kul-w-kręglach"&gt;Analogia do kul w kręglach&lt;/h2&gt;
&lt;p&gt;Zespół Aspire używa świetnej analogii: pomyśl o Aspire jak o odbojnikach toru do kręgli dla agentów AI. Jeśli agent nie jest doskonały (a nie będzie), odbojniki nie pozwolą mu rzucać na rynsztok.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 to nie tylko framework dla aplikacji rozproszonych — staje się niezbędną infrastrukturą agentów. Przeczytaj &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;pełny post&lt;/a&gt; od zespołu Aspire.&lt;/p&gt;</content:encoded></item><item><title>Tryb Izolowany Aspire Rozwiązuje Problem Konfliktów Portów w Równoległym Programowaniu</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2 wprowadza tryb --isolated: losowe porty, oddzielne sekrety i zero kolizji przy uruchamianiu wielu instancji tego samego AppHosta. Idealne dla agentów AI, worktrees i równoległych przepływów pracy.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jeśli próbowałeś uruchomić dwie instancje tego samego projektu jednocześnie, znasz ten ból. Port 8080 jest już zajęty.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 naprawia to jedną flagą. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;opisał pełne szczegóły&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="rozwiązanie---isolated"&gt;Rozwiązanie: &lt;code&gt;--isolated&lt;/code&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Każde uruchomienie dostaje:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Losowe porty&lt;/strong&gt; — brak kolizji między instancjami&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Izolowane sekrety użytkownika&lt;/strong&gt; — ciągi połączeń i klucze API zostają oddzielne dla każdej instancji&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prawdziwe-scenariusze-gdzie-to-błyszczy"&gt;Prawdziwe scenariusze gdzie to błyszczy&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Wiele checkoutów:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-feature
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Terminal 2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; ~/projects/my-app-bugfix
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire run --isolated
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Oba działają bez konfliktów.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agenty w tle w VS Code.&lt;/strong&gt; Gdy agent w tle Copilot Chat tworzy git worktree, tryb izolowany zapewnia, że obie instancje po prostu działają.&lt;/p&gt;
&lt;h2 id="jak-to-działa-pod-maską"&gt;Jak to działa pod maską&lt;/h2&gt;
&lt;p&gt;Gdy przekażesz &lt;code&gt;--isolated&lt;/code&gt;, CLI generuje unikalny identyfikator instancji dla uruchomienia, który napędza randomizację portów i izolację sekretów.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;Tryb izolowany to mała funkcja, która rozwiązuje prawdziwy, coraz bardziej powszechny problem. Zdobądź 13.2 z &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Dostarcza CLI do Dokumentacji — i Twój Agent AI Też Może Go Używać</title><link>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</link><pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 dodaje aspire docs — CLI do wyszukiwania, przeglądania i czytania oficjalnej dokumentacji bez opuszczania terminala. Działa też jako narzędzie dla agentów AI.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ten post został automatycznie przetłumaczony. Aby przejść do oryginału, &lt;a href="https://thedotnetblog.com/pl/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;kliknij tutaj&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Znasz ten moment, kiedy siedzisz głęboko w Aspire AppHost, łączysz integracje i musisz sprawdzić dokładnie, jakich parametrów oczekuje integracja Redis? Alt-tab do przeglądarki, szukasz na aspire.dev. Kontekst utracony.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 właśnie &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;dostarczył rozwiązanie&lt;/a&gt;. CLI &lt;code&gt;aspire docs&lt;/code&gt; pozwala wyszukiwać, przeglądać i czytać oficjalną dokumentację Aspire bezpośrednio z terminala.&lt;/p&gt;
&lt;h2 id="trzy-polecenia-zero-kart-przeglądarki"&gt;Trzy polecenia, zero kart przeglądarki&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Lista wszystkich dokumentów&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs list
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Szukaj tematu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Przeczytaj pełną stronę&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Tylko jedna sekcja&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire docs get redis-integration --section &lt;span class="s2"&gt;&amp;#34;Add Redis resource&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kąt-agentów-ai"&gt;Kąt agentów AI&lt;/h2&gt;
&lt;p&gt;To samo sprawia, że jest to interesujące dla deweloperów budujących z narzędziami AI. Te same polecenia &lt;code&gt;aspire docs&lt;/code&gt; działają jako narzędzia dla agentów AI.&lt;/p&gt;
&lt;p&gt;Zamiast halucynować Aspire API na podstawie przestarzałych danych treningowych, agent może wywołać &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt;, znaleźć oficjalne dokumenty integracji i przeczytać właściwą stronę.&lt;/p&gt;
&lt;h2 id="podsumowanie"&gt;Podsumowanie&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; to mała funkcja, która czysto rozwiązuje prawdziwy problem. Zobacz &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;deep dive Davida Pine&amp;rsquo;a&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>