<?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>Posts | The .NET Blog</title><link>https://thedotnetblog.com/id/posts/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>id</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sat, 25 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/id/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 10 Hadir Bersama Ubuntu 26.04 LTS — Ini yang Baru</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/</guid><description>Ubuntu 26.04 LTS (Resolute Raccoon) hadir dengan .NET 10 sebagai toolchain kelas satu. Native AOT, Chiseled container, Linux 7.0.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ini hari Ubuntu LTS. &lt;a href="https://canonical.com/blog/canonical-releases-ubuntu-26-04-lts-resolute-raccoon"&gt;Ubuntu 26.04 (Resolute Raccoon)&lt;/a&gt; diluncurkan hari ini dengan &lt;a href="https://devblogs.microsoft.com/dotnet/whats-new-for-dotnet-in-ubuntu-2604/"&gt;.NET 10&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="instal-net-10-dengan-dua-perintah"&gt;Instal .NET 10 dengan Dua Perintah&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;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo apt install dotnet-sdk-10.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="container-perbarui--noble-ke--resolute"&gt;Container: Perbarui &lt;code&gt;-noble&lt;/code&gt; ke &lt;code&gt;-resolute&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;sed -i &lt;span class="s2"&gt;&amp;#34;s/noble/resolute/g&amp;#34;&lt;/span&gt; Dockerfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="native-aot-startup-3ms-binary-14mb"&gt;Native AOT: Startup 3ms, Binary 1,4MB&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;apt install -y dotnet-sdk-aot-10.0 clang
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dotnet publish app.cs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# binary native 1,4MB, startup 3ms&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Untuk beban kerja cloud-native di mana waktu cold-start penting — Functions, container, serverless — ini pengubah permainan nyata.&lt;/p&gt;
&lt;h2 id="butuh-net-8-atau-9"&gt;Butuh .NET 8 atau 9?&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;apt install -y software-properties-common
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;add-apt-repository ppa:dotnet/backports
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt install -y dotnet-sdk-8.0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/whats-new-for-dotnet-in-ubuntu-2604/"&gt;Posting lengkap&lt;/a&gt; memiliki lebih banyak detail.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server Kini .mcpb — Instal Tanpa Runtime Apapun</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>Azure MCP Server kini tersedia sebagai MCP Bundle (.mcpb) — unduh, seret ke Claude Desktop, selesai. Tidak perlu Node.js, Python, atau .NET.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Tahu apa yang menjengkelkan dari pengaturan server MCP? Anda memerlukan runtime. Node.js untuk versi npm, Python untuk pip/uvx, .NET SDK untuk varian dotnet.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server baru saja mengubah itu&lt;/a&gt;. Kini tersedia sebagai &lt;code&gt;.mcpb&lt;/code&gt; — MCP Bundle — dan pengaturannya adalah seret-dan-lepas.&lt;/p&gt;
&lt;h2 id="apa-itu-mcp-bundle"&gt;Apa itu MCP Bundle?&lt;/h2&gt;
&lt;p&gt;Bayangkan seperti ekstensi VS Code (&lt;code&gt;.vsix&lt;/code&gt;) atau ekstensi browser (&lt;code&gt;.crx&lt;/code&gt;), tetapi untuk server MCP. File &lt;code&gt;.mcpb&lt;/code&gt; adalah arsip ZIP mandiri yang menyertakan biner server dan semua dependensinya.&lt;/p&gt;
&lt;h2 id="cara-menginstal"&gt;Cara Menginstal&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. Unduh bundle untuk platform Anda&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Buka &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;halaman GitHub Releases&lt;/a&gt; dan unduh file &lt;code&gt;.mcpb&lt;/code&gt; untuk OS dan arsitektur Anda.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Instal di Claude Desktop&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Cara termudah: seret dan lepas file &lt;code&gt;.mcpb&lt;/code&gt; ke jendela Claude Desktop saat Anda berada di halaman pengaturan Extensions (&lt;code&gt;☰ → File → Settings → Extensions&lt;/code&gt;). Tinjau detail server, klik Install, konfirmasi.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Autentikasi ke Azure&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;az login
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Selesai. Azure MCP Server menggunakan kredensial Azure Anda yang ada.&lt;/p&gt;
&lt;h2 id="untuk-memulai"&gt;Untuk Memulai&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Unduhan&lt;/strong&gt;: &lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server-"&gt;GitHub Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Repo&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp"&gt;aka.ms/azmcp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docs&lt;/strong&gt;: &lt;a href="https://aka.ms/azmcp/docs"&gt;aka.ms/azmcp/docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;posting lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>CodeAct di Agent Framework: Cara Memotong Latensi Agen Anda Setengahnya</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</guid><description>CodeAct menyatukan rantai alat multi-langkah menjadi satu blok kode yang disandbox — memangkas latensi 52% dan penggunaan token 64%.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini telah diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ada momen dalam setiap proyek agen di mana Anda melihat trace dan berpikir: &amp;ldquo;kenapa ini lama sekali?&amp;rdquo; Model tidak masalah. Alat-alat bekerja. Tapi ada tujuh round trip untuk mendapatkan hasil yang bisa dihitung dalam satu langkah.&lt;/p&gt;
&lt;p&gt;Itulah persis masalah yang dipecahkan CodeAct — dan &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;tim Agent Framework baru saja merilis dukungan alpha&lt;/a&gt; melalui paket baru &lt;code&gt;agent-framework-hyperlight&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="apa-itu-codeact"&gt;Apa itu CodeAct?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/abs/2402.01030"&gt;Pola CodeAct&lt;/a&gt; secara elegan sederhana: alih-alih memberi model daftar alat untuk dipanggil satu per satu, Anda memberinya satu alat &lt;code&gt;execute_code&lt;/code&gt; dan membiarkannya mengekspresikan &lt;em&gt;seluruh rencana&lt;/em&gt; sebagai program Python singkat.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pendekatan&lt;/th&gt;
&lt;th&gt;Waktu&lt;/th&gt;
&lt;th&gt;Token&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Tradisional&lt;/td&gt;
&lt;td&gt;27,81d&lt;/td&gt;
&lt;td&gt;6.890&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CodeAct&lt;/td&gt;
&lt;td&gt;13,23d&lt;/td&gt;
&lt;td&gt;2.489&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Peningkatan&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;52,4%&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;63,9%&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="keamanan-micro-vm-hyperlight"&gt;Keamanan: Micro-VM Hyperlight&lt;/h2&gt;
&lt;p&gt;Paket &lt;code&gt;agent-framework-hyperlight&lt;/code&gt; menggunakan micro-VM &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt;. Setiap pemanggilan &lt;code&gt;execute_code&lt;/code&gt; mendapat micro-VM baru yang baru dibuat. Startup diukur dalam milidetik. Isolasi hampir gratis.&lt;/p&gt;
&lt;p&gt;Alat Anda tetap berjalan di host. Kode lem yang dihasilkan model berjalan di sandbox. Itulah pembagian yang benar.&lt;/p&gt;
&lt;h2 id="pengaturan-minimal"&gt;Pengaturan Minimal&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework_hyperlight&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&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="n"&gt;codeact&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HyperlightCodeActProvider&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="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_weather&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="n"&gt;approval_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;never_require&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&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="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;Agent&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="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;client&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="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;CodeActAgent&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="n"&gt;instructions&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;You are a helpful assistant.&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="n"&gt;context_providers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;codeact&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kapan-menggunakan-codeact-dan-kapan-tidak"&gt;Kapan Menggunakan CodeAct (dan Kapan Tidak)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Gunakan CodeAct ketika:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Tugas merantai banyak pemanggilan alat kecil (pencarian, penggabungan, perhitungan)&lt;/li&gt;
&lt;li&gt;Latensi dan biaya token penting&lt;/li&gt;
&lt;li&gt;Anda ingin isolasi kuat per pemanggilan untuk kode yang dihasilkan model&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Tetap gunakan tool-calling tradisional ketika:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Agen hanya melakukan satu atau dua pemanggilan alat per giliran&lt;/li&gt;
&lt;li&gt;Setiap pemanggilan memiliki efek samping yang perlu disetujui secara individual&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="coba-sekarang"&gt;Coba Sekarang&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;pip install agent-framework-hyperlight --pre
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;posting lengkap di blog Agent Framework&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Di Mana Agen Anda Mengingat Hal-hal? Panduan Praktis Penyimpanan Riwayat Obrolan</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>Dikelola layanan atau klien? Linear atau percabangan? Keputusan arsitektur yang menentukan apa yang benar-benar bisa dilakukan agen AI Anda — dengan contoh kode C# dan Python.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Saat membangun agen AI, Anda menghabiskan sebagian besar energi pada model, alat, dan prompt. Pertanyaan &lt;em&gt;di mana riwayat percakapan disimpan&lt;/em&gt; tampak seperti detail implementasi — tetapi itu adalah salah satu keputusan arsitektur terpenting yang akan Anda buat.&lt;/p&gt;
&lt;p&gt;Hal ini menentukan apakah pengguna dapat memisahkan percakapan, membatalkan jawaban, melanjutkan sesi setelah restart, dan apakah data Anda pernah meninggalkan infrastruktur Anda. &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;Tim Agent Framework menerbitkan analisis mendalam&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="dua-pola-mendasar"&gt;Dua pola mendasar&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Dikelola layanan&lt;/strong&gt;: Layanan AI menyimpan status percakapan. Aplikasi Anda menyimpan referensi dan layanan secara otomatis menyertakan riwayat yang relevan dalam setiap permintaan.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dikelola klien&lt;/strong&gt;: Aplikasi Anda mempertahankan riwayat lengkap dan mengirim pesan yang relevan dengan setiap permintaan. Layanan tidak memiliki status. Anda mengontrol segalanya.&lt;/p&gt;
&lt;h2 id="cara-agent-framework-mengabstraksi-ini"&gt;Cara Agent Framework mengabstraksi ini&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Nama saya Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Siapa nama saya?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&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;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_session&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="n"&gt;first&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Nama saya Alice.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&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="n"&gt;second&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Siapa nama saya?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;session&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;h2 id="referensi-cepat-penyedia"&gt;Referensi cepat penyedia&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Penyedia&lt;/th&gt;
&lt;th&gt;Penyimpanan&lt;/th&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Kompaksi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI/Azure Chat Completions&lt;/td&gt;
&lt;td&gt;Klien&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Anda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;Layanan&lt;/td&gt;
&lt;td&gt;Linear&lt;/td&gt;
&lt;td&gt;Layanan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (default)&lt;/td&gt;
&lt;td&gt;Layanan&lt;/td&gt;
&lt;td&gt;Percabangan&lt;/td&gt;
&lt;td&gt;Layanan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;Klien&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Anda&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="cara-memilih"&gt;Cara memilih&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Butuh percabangan atau &amp;ldquo;batalkan&amp;rdquo;?&lt;/strong&gt; → Responses API dikelola layanan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Butuh kedaulatan data?&lt;/strong&gt; → Dikelola klien dengan backend database&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Chatbot sederhana?&lt;/strong&gt; → Linear dikelola layanan sudah cukup&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;posting lengkap&lt;/a&gt; untuk pohon keputusan lengkap.&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 Hadir di Azure Foundry — Yang Perlu Diketahui Developer .NET</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 tersedia umum di Microsoft Foundry. Evolusi dari GPT-5 ke 5.5, apa yang benar-benar meningkat dan cara mulai menggunakannya di agent Anda hari ini.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Microsoft baru saja mengumumkan bahwa &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;GPT-5.5 tersedia umum di Microsoft Foundry&lt;/a&gt;. Jika Anda membangun agent di Azure, inilah pembaruan yang Anda tunggu.&lt;/p&gt;
&lt;h2 id="evolusi-gpt-5"&gt;Evolusi GPT-5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt;: menyatukan penalaran dan kecepatan dalam satu sistem&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;: penalaran multi-langkah yang lebih kuat, kemampuan agentik awal untuk enterprise&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;: penalaran konteks panjang yang lebih dalam, eksekusi agentik yang lebih andal, efisiensi token yang lebih baik&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="yang-benar-benar-berubah"&gt;Yang Benar-benar Berubah&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Pengkodean agentik yang ditingkatkan&lt;/strong&gt;: GPT-5.5 mempertahankan konteks di seluruh basis kode besar, mendiagnosis kegagalan tingkat arsitektur, dan mengantisipasi persyaratan pengujian. Model bernalar tentang &lt;em&gt;apa lagi&lt;/em&gt; yang dipengaruhi perbaikan sebelum bertindak.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Efisiensi token&lt;/strong&gt;: Output berkualitas lebih tinggi dengan lebih sedikit token dan lebih sedikit percobaan ulang. Biaya dan latensi langsung lebih rendah untuk deployment produksi.&lt;/p&gt;
&lt;h2 id="harga"&gt;Harga&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Input ($/M token)&lt;/th&gt;
&lt;th&gt;Input Cache&lt;/th&gt;
&lt;th&gt;Output ($/M token)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5&lt;/td&gt;
&lt;td&gt;$5,00&lt;/td&gt;
&lt;td&gt;$0,50&lt;/td&gt;
&lt;td&gt;$30,00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.5 Pro&lt;/td&gt;
&lt;td&gt;$30,00&lt;/td&gt;
&lt;td&gt;$3,00&lt;/td&gt;
&lt;td&gt;$180,00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="mengapa-foundry-penting"&gt;Mengapa Foundry Penting&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service memungkinkan Anda mendefinisikan agent dalam YAML atau menghubungkannya dengan Microsoft Agent Framework, GitHub Copilot SDK, LangGraph, atau OpenAI Agents SDK — dan menjalankannya sebagai agent yang di-host secara terisolasi dengan sistem file persisten, identitas Microsoft Entra tersendiri, dan harga scale-to-zero.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AIAgent&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;aiProjectClient&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="n"&gt;AsAIAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.5&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Anda adalah asisten yang membantu.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;AgentSaya&amp;#34;&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;Lihat &lt;a href="https://azure.microsoft.com/en-us/blog/openais-gpt-5-5-in-microsoft-foundry-frontier-intelligence-on-an-enterprise-ready-platform/"&gt;pengumuman lengkap&lt;/a&gt; untuk semua detail.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.118: Copilot CLI Mendapat Nama Sesi, Lencana Model, dan TypeScript 7.0 Nightly</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/</link><pubDate>Sat, 25 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/</guid><description>Visual Studio Code 1.118 adalah rilis terfokus pada peningkatan Copilot CLI — penamaan sesi, lencana model, pemilihan model otomatis, dan opt-in TypeScript 7.0 Nightly.</description><content:encoded>&lt;p&gt;&lt;em&gt;Posting ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_118"&gt;Visual Studio Code 1.118&lt;/a&gt; adalah rilis kecil yang terfokus — sebagian besar penyempurnaan Copilot CLI.&lt;/p&gt;
&lt;h2 id="copilot-cli-sesi-mendapat-nama-nyata"&gt;Copilot CLI: Sesi Mendapat Nama Nyata&lt;/h2&gt;
&lt;p&gt;API judul sesi SDK Copilot CLI kini digunakan sebagai sumber kebenaran untuk nama sesi. Alih-alih label yang dibuat otomatis, sesi menampilkan nama asli dari SDK.&lt;/p&gt;
&lt;h2 id="beralih-sesi-lebih-cepat"&gt;Beralih Sesi Lebih Cepat&lt;/h2&gt;
&lt;p&gt;Aplikasi Agents kini memiliki &lt;code&gt;Ctrl+1&lt;/code&gt;, &lt;code&gt;Ctrl+2&lt;/code&gt;, dll. untuk beralih cepat antar sesi.&lt;/p&gt;
&lt;h2 id="lencana-model-di-chat"&gt;Lencana Model di Chat&lt;/h2&gt;
&lt;p&gt;Respons Copilot CLI di panel chat kini menampilkan lencana model — Anda bisa melihat sekilas model mana yang menangani setiap permintaan.&lt;/p&gt;
&lt;h2 id="pemilihan-model-otomatis-di-copilot-cli"&gt;Pemilihan Model Otomatis di Copilot CLI&lt;/h2&gt;
&lt;p&gt;Fitur pemilihan model otomatis kini juga berfungsi di agen Copilot CLI.&lt;/p&gt;
&lt;h2 id="opt-in-typescript-70-nightly"&gt;Opt-in TypeScript 7.0 Nightly&lt;/h2&gt;
&lt;p&gt;Anda kini bisa memilih untuk menguji TypeScript 7.0 nightly langsung dari pengaturan VS Code. TypeScript 7.0 adalah rilis besar (&lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-beta/"&gt;beta dirilis beberapa hari lalu&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;Lihat &lt;a href="https://code.visualstudio.com/updates/v1_118"&gt;catatan rilis lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: Satu Endpoint untuk Semua Alat Agen AI</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>Microsoft Foundry meluncurkan Toolboxes dalam preview publik — cara untuk mengelola dan mengekspos alat agen AI melalui satu endpoint yang kompatibel dengan MCP.</description><content:encoded>&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ada masalah yang terlihat sepele sampai benar-benar dihadapi: organisasi membangun beberapa agen AI, masing-masing butuh alat, dan setiap tim mengonfigurasinya dari awal. Integrasi pencarian web yang sama, konfigurasi Azure AI Search yang sama, koneksi server GitHub MCP yang sama — tapi di repositori berbeda, oleh tim berbeda, dengan kredensial berbeda, tanpa tata kelola bersama.&lt;/p&gt;
&lt;p&gt;Microsoft Foundry baru saja meluncurkan &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; dalam preview publik, dan ini adalah jawaban langsung atas masalah tersebut.&lt;/p&gt;
&lt;h2 id="apa-itu-toolbox"&gt;Apa itu Toolbox?&lt;/h2&gt;
&lt;p&gt;Toolbox adalah bundel alat bernama yang dapat digunakan kembali, didefinisikan sekali di Foundry dan diekspos melalui satu endpoint yang kompatibel dengan MCP. Runtime agen apa pun yang berbicara MCP dapat mengonsumsinya — tidak ada lock-in ke Foundry Agents.&lt;/p&gt;
&lt;p&gt;Janjinya sederhana: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;. Definisikan alat, konfigurasikan autentikasi secara terpusat (OAuth passthrough, identitas terkelola Entra), terbitkan endpoint. Setiap agen yang membutuhkan alat tersebut terhubung ke endpoint dan mendapatkan semuanya.&lt;/p&gt;
&lt;h2 id="empat-pilar-dua-tersedia-hari-ini"&gt;Empat pilar (dua tersedia hari ini)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pilar&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;Apa yang dilakukan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discover&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Segera hadir&lt;/td&gt;
&lt;td&gt;Temukan alat yang disetujui tanpa pencarian manual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Build&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tersedia&lt;/td&gt;
&lt;td&gt;Kelompokkan alat ke dalam bundel yang dapat digunakan kembali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Consume&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tersedia&lt;/td&gt;
&lt;td&gt;Satu endpoint MCP mengekspos semua alat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Govern&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Segera hadir&lt;/td&gt;
&lt;td&gt;Autentikasi terpusat + observabilitas untuk semua panggilan alat&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="contoh-praktis"&gt;Contoh praktis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.identity&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;DefaultAzureCredential&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&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="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&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="n"&gt;endpoint&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;FOUNDRY_PROJECT_ENDPOINT&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="n"&gt;credential&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DefaultAzureCredential&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&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="n"&gt;toolbox_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;beta&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;toolboxes&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_toolbox_version&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="n"&gt;toolbox_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;customer-feedback-triaging-toolbox&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="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Cari dokumentasi dan respons issues GitHub.&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="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&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="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;web_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;description&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Cari dokumentasi publik&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="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;azure_ai_search&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;index_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;internal-docs&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="s2"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mcp_server&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;server_url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://your-github-mcp-server.com&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;Setelah diterbitkan, Foundry menyediakan endpoint terpadu. Satu koneksi, semua alat.&lt;/p&gt;
&lt;h2 id="tidak-terkunci-di-foundry-agents"&gt;Tidak terkunci di Foundry Agents&lt;/h2&gt;
&lt;p&gt;Toolboxes &lt;strong&gt;dibuat dan dikelola&lt;/strong&gt; di Foundry, tapi permukaan konsumsinya adalah protokol MCP yang terbuka. Bisa digunakan dari agen kustom (Microsoft Agent Framework, LangGraph), GitHub Copilot dan IDE lain yang mendukung MCP.&lt;/p&gt;
&lt;h2 id="mengapa-penting-sekarang"&gt;Mengapa penting sekarang&lt;/h2&gt;
&lt;p&gt;Gelombang multi-agen sedang tiba di produksi. Setiap agen baru adalah permukaan baru untuk konfigurasi duplikat, kredensial usang, dan perilaku tidak konsisten. Fondasi Build + Consume cukup untuk mulai sentralisasi. Ketika pilar Govern tiba, akan ada lapisan alat yang sepenuhnya dapat diamati dan dikontrol secara terpusat untuk seluruh armada agen.&lt;/p&gt;
&lt;h2 id="penutup"&gt;Penutup&lt;/h2&gt;
&lt;p&gt;Ini masih awal — preview publik, Python SDK dulu, Discover dan Govern masih akan datang. Tapi modelnya kokoh dan desain MCP-native berarti bekerja dengan alat yang sudah dibangun. Cek &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;pengumuman resmi&lt;/a&gt; untuk memulai.&lt;/p&gt;</content:encoded></item><item><title>Hooks azd dengan Python, TypeScript, dan .NET: Selamat Tinggal Shell Script</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</link><pubDate>Thu, 23 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI kini mendukung hooks dalam Python, JavaScript, TypeScript, dan .NET. Tidak perlu lagi beralih ke Bash hanya untuk menjalankan script migrasi.</description><content:encoded>&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Jika pernah memiliki proyek yang sepenuhnya ditulis dalam .NET namun tetap harus menulis script Bash untuk hooks azd, rasa frustrasi itu sudah pasti familiar. Mengapa harus beralih ke sintaks shell di langkah pre-provisioning ketika seluruh proyek menggunakan C#?&lt;/p&gt;
&lt;p&gt;Masalah ini kini memiliki solusi resmi. Azure Developer CLI &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;baru saja meluncurkan dukungan multi-bahasa untuk hooks&lt;/a&gt;, dan hasilnya sesuai ekspektasi.&lt;/p&gt;
&lt;h2 id="apa-itu-hooks"&gt;Apa itu hooks&lt;/h2&gt;
&lt;p&gt;Hooks adalah script yang berjalan di titik-titik penting dalam siklus hidup &lt;code&gt;azd&lt;/code&gt; — sebelum provisioning, setelah deployment, dan lainnya. Didefinisikan di &lt;code&gt;azure.yaml&lt;/code&gt;, mereka memungkinkan injeksi logika kustom tanpa memodifikasi CLI.&lt;/p&gt;
&lt;p&gt;Sebelumnya hanya Bash dan PowerShell yang didukung. Kini bisa menggunakan &lt;strong&gt;Python, JavaScript, TypeScript, atau .NET&lt;/strong&gt; — dan &lt;code&gt;azd&lt;/code&gt; menangani sisanya secara otomatis.&lt;/p&gt;
&lt;h2 id="cara-kerja-deteksi-bahasa"&gt;Cara kerja deteksi bahasa&lt;/h2&gt;
&lt;p&gt;Cukup arahkan hook ke sebuah file dan &lt;code&gt;azd&lt;/code&gt; akan menyimpulkan bahasa dari ekstensinya:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.py&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postdeploy&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/seed.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tanpa konfigurasi tambahan. Jika ekstensinya ambigu, bisa menambahkan &lt;code&gt;kind: python&lt;/code&gt; (atau bahasa yang sesuai) secara eksplisit.&lt;/p&gt;
&lt;h2 id="detail-penting-per-bahasa"&gt;Detail penting per bahasa&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Letakkan &lt;code&gt;requirements.txt&lt;/code&gt; atau &lt;code&gt;pyproject.toml&lt;/code&gt; di samping script (atau direktori induknya). &lt;code&gt;azd&lt;/code&gt; akan otomatis membuat virtual environment, menginstal dependensi, dan menjalankan script.&lt;/p&gt;
&lt;h3 id="javascript-dan-typescript"&gt;JavaScript dan TypeScript&lt;/h3&gt;
&lt;p&gt;Pola yang sama — letakkan &lt;code&gt;package.json&lt;/code&gt; dekat script dan &lt;code&gt;azd&lt;/code&gt; akan menjalankan &lt;code&gt;npm install&lt;/code&gt; terlebih dahulu. Untuk TypeScript, menggunakan &lt;code&gt;npx tsx&lt;/code&gt; tanpa langkah kompilasi dan tanpa &lt;code&gt;tsconfig.json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;Dua mode tersedia:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mode project&lt;/strong&gt;: Jika ada &lt;code&gt;.csproj&lt;/code&gt; di samping script, &lt;code&gt;azd&lt;/code&gt; otomatis menjalankan &lt;code&gt;dotnet restore&lt;/code&gt; dan &lt;code&gt;dotnet build&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mode single-file&lt;/strong&gt;: Di .NET 10+, file &lt;code&gt;.cs&lt;/code&gt; mandiri dapat dijalankan langsung via &lt;code&gt;dotnet run script.cs&lt;/code&gt;. Tidak perlu file project.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="konfigurasi-per-executor"&gt;Konfigurasi per executor&lt;/h2&gt;
&lt;p&gt;Setiap bahasa mendukung blok &lt;code&gt;config&lt;/code&gt; opsional:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;hooks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;preprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/setup.ts&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;packageManager&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;pnpm&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;postprovision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;run&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;./hooks/migrate.cs&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;config&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;configuration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;Release&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;framework&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;net10.0&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="mengapa-ini-penting-bagi-developer-net"&gt;Mengapa ini penting bagi developer .NET&lt;/h2&gt;
&lt;p&gt;Hooks adalah tempat terakhir dalam proyek berbasis azd yang memaksa pergantian bahasa. Sekarang seluruh deployment pipeline — dari kode aplikasi hingga lifecycle hooks — bisa hidup dalam satu bahasa. Utility .NET yang sudah ada bisa digunakan kembali di hooks, shared library bisa direferensikan, dan pemeliharaan shell script pun berakhir.&lt;/p&gt;
&lt;h2 id="penutup"&gt;Penutup&lt;/h2&gt;
&lt;p&gt;Salah satu perubahan yang terlihat kecil namun benar-benar mengurangi gesekan dalam workflow azd sehari-hari. Dukungan multi-bahasa untuk hooks sudah tersedia sekarang — cek &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;post resmi&lt;/a&gt; untuk dokumentasi lengkap.&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: F5 dari Terminal dan UI Automation untuk Agen AI</title><link>https://thedotnetblog.com/id/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/id/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 menghadirkan winapp run untuk peluncuran debug dari terminal, winapp ui untuk otomasi antarmuka, dan paket NuGet baru yang membuat dotnet run bekerja dengan aplikasi yang dikemas.</description><content:encoded>&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Pengalaman F5 di Visual Studio sangat bagus. Tapi harus membuka VS hanya untuk menjalankan dan men-debug aplikasi Windows yang dikemas — baik di pipeline CI, workflow otomatis, atau saat agen AI menjalankan pengujian — terlalu berlebihan.&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 baru saja &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;dirilis&lt;/a&gt; dan menangani hal ini secara langsung dengan dua fitur utama: &lt;code&gt;winapp run&lt;/code&gt; dan &lt;code&gt;winapp ui&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="winapp-run-f5-dari-mana-saja"&gt;winapp run: F5 dari Mana Saja&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; menerima folder aplikasi yang tidak dikemas dan sebuah manifest, lalu melakukan semua yang VS lakukan saat debug launch: mendaftarkan loose package, menjalankan aplikasi, dan mempertahankan &lt;code&gt;LocalState&lt;/code&gt; antar re-deploy.&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;# Build aplikasi, lalu jalankan sebagai aplikasi yang dikemas&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;Bekerja untuk WinUI, WPF, WinForms, Console, Avalonia, dan lainnya. Mode dirancang untuk developer maupun workflow otomatis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: Meluncurkan dan segera mengembalikan kontrol ke terminal. Sempurna untuk CI.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: Membersihkan package yang terdaftar saat aplikasi ditutup.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: Menangkap pesan &lt;code&gt;OutputDebugString&lt;/code&gt; dan exception secara real-time.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="paket-nuget-baru-dotnet-run-untuk-aplikasi-yang-dikemas"&gt;Paket NuGet Baru: dotnet run untuk Aplikasi yang Dikemas&lt;/h2&gt;
&lt;p&gt;Untuk developer .NET ada paket NuGet baru: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;. Setelah diinstal, &lt;code&gt;dotnet run&lt;/code&gt; menangani seluruh inner loop: build, menyiapkan loose-layout package, mendaftar di Windows, dan meluncurkan — semuanya dalam satu langkah.&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;# atau&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-dari-command-line"&gt;winapp ui: UI Automation dari Command Line&lt;/h2&gt;
&lt;p&gt;Inilah fitur yang membuka skenario agentik. &lt;code&gt;winapp ui&lt;/code&gt; memberikan akses UI Automation penuh ke aplikasi Windows mana pun yang sedang berjalan — WPF, WinForms, Win32, Electron, WinUI3 — langsung dari terminal.&lt;/p&gt;
&lt;p&gt;Yang bisa dilakukan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Menampilkan semua jendela tingkat teratas&lt;/li&gt;
&lt;li&gt;Menelusuri pohon UI Automation lengkap dari sebuah jendela&lt;/li&gt;
&lt;li&gt;Mencari elemen berdasarkan nama, tipe, atau ID otomasi&lt;/li&gt;
&lt;li&gt;Klik, invoke, dan set nilai&lt;/li&gt;
&lt;li&gt;Mengambil screenshot&lt;/li&gt;
&lt;li&gt;Menunggu elemen muncul — ideal untuk sinkronisasi pengujian&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Menggabungkan &lt;code&gt;winapp ui&lt;/code&gt; dengan &lt;code&gt;winapp run&lt;/code&gt; menghasilkan workflow build → jalankan → verifikasi yang lengkap dari terminal. Agen dapat menjalankan aplikasi, memeriksa status UI, berinteraksi secara programatik, dan memvalidasi hasilnya.&lt;/p&gt;
&lt;h2 id="fitur-lainnya"&gt;Fitur Lainnya&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: Menghapus package yang sideloaded setelah selesai.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: Menambahkan alias untuk menjalankan aplikasi berdasarkan nama dari terminal.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tab completion&lt;/strong&gt;: Satu perintah untuk mengatur tab completion PowerShell.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cara-mendapatkannya"&gt;Cara Mendapatkannya&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;# atau&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 dalam public preview. Lihat &lt;a href="https://github.com/microsoft/WinAppCli"&gt;repositori GitHub&lt;/a&gt; untuk dokumentasi lengkap dan &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;pengumuman asli&lt;/a&gt; untuk semua detailnya.&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: Penyiapan Proyek Berbantuan AI dan Pemecahan Masalah Error Cerdas</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>Azure Developer CLI kini terintegrasi dengan GitHub Copilot untuk membuat infrastruktur proyek dan menyelesaikan error deployment — tanpa keluar dari terminal.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Artikel ini diterjemahkan secara otomatis. Untuk versi asli dalam bahasa Inggris, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Kamu pasti pernah mengalami momen ketika ingin men-deploy aplikasi yang sudah ada ke Azure, lalu menatap file &lt;code&gt;azure.yaml&lt;/code&gt; yang kosong sambil mencoba mengingat apakah Express API-mu harus menggunakan Container Apps atau App Service? Momen itu kini jauh lebih singkat.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) kini terintegrasi dengan GitHub Copilot dalam dua cara yang nyata: scaffolding proyek berbantuan AI selama &lt;code&gt;azd init&lt;/code&gt;, dan pemecahan masalah error cerdas ketika deployment gagal. Kedua fitur ini sepenuhnya berjalan di dalam terminal.&lt;/p&gt;
&lt;h2 id="setup-dengan-copilot-selama-azd-init"&gt;Setup dengan Copilot selama azd init&lt;/h2&gt;
&lt;p&gt;Saat menjalankan &lt;code&gt;azd init&lt;/code&gt;, kini ada opsi &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Pilih itu dan Copilot akan menganalisis codebase-mu untuk menghasilkan &lt;code&gt;azure.yaml&lt;/code&gt;, template infrastruktur, dan modul Bicep — berdasarkan kode aslimu.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# Pilih: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Prasyarat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 atau lebih baru&lt;/strong&gt; — cek dengan &lt;code&gt;azd version&lt;/code&gt; atau perbarui dengan &lt;code&gt;azd update&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Langganan GitHub Copilot aktif&lt;/strong&gt; (Individual, Business, atau Enterprise)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub CLI (&lt;code&gt;gh&lt;/code&gt;)&lt;/strong&gt; — &lt;code&gt;azd&lt;/code&gt; akan meminta login jika diperlukan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yang menurutku benar-benar berguna: ini bekerja dua arah. Membangun dari nol? Copilot membantu mengonfigurasi layanan Azure yang tepat sejak awal. Punya aplikasi yang ingin di-deploy? Arahkan Copilot ke sana dan konfigurasi akan dibuat tanpa perlu restrukturisasi kode apapun.&lt;/p&gt;
&lt;h3 id="yang-sebenarnya-dilakukan"&gt;Yang sebenarnya dilakukan&lt;/h3&gt;
&lt;p&gt;Katakanlah kamu punya Node.js Express API dengan dependensi PostgreSQL. Daripada memutuskan manual antara Container Apps dan App Service, lalu menulis Bicep dari nol, Copilot mendeteksi stack-mu dan menghasilkan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azure.yaml&lt;/code&gt; dengan pengaturan &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt;, dan &lt;code&gt;build&lt;/code&gt; yang tepat&lt;/li&gt;
&lt;li&gt;Modul Bicep untuk Azure Container Apps&lt;/li&gt;
&lt;li&gt;Modul Bicep untuk Azure Database for PostgreSQL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dan menjalankan pemeriksaan awal sebelum mengubah apapun — memverifikasi direktori git bersih, meminta persetujuan alat server MCP di awal. Tidak ada yang terjadi tanpa kamu tahu persis apa yang akan berubah.&lt;/p&gt;
&lt;h2 id="pemecahan-masalah-error-dengan-copilot"&gt;Pemecahan Masalah Error dengan Copilot&lt;/h2&gt;
&lt;p&gt;Error deployment adalah hal yang tak terhindarkan. Parameter yang hilang, masalah izin, ketersediaan SKU — dan pesan error jarang memberitahumu satu hal yang benar-benar perlu kamu ketahui: &lt;em&gt;cara memperbaikinya&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Tanpa Copilot, siklusnya terlihat seperti: salin error → cari di docs → baca tiga jawaban Stack Overflow yang tidak relevan → jalankan beberapa perintah &lt;code&gt;az&lt;/code&gt; CLI → coba lagi dan berharap. Dengan Copilot terintegrasi di &lt;code&gt;azd&lt;/code&gt;, siklus ini runtuh. Saat perintah &lt;code&gt;azd&lt;/code&gt; apapun gagal, langsung ditawarkan empat pilihan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — penjelasan dalam bahasa sederhana tentang apa yang salah&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — instruksi langkah demi langkah untuk memperbaiki masalah&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — analisis lengkap + Copilot menerapkan perbaikan (dengan persetujuanmu) + retry opsional&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — tangani sendiri&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Poin kuncinya: Copilot sudah memiliki konteks tentang proyekmu, perintah yang gagal, dan detail error. Sarannya spesifik untuk &lt;em&gt;situasimu&lt;/em&gt;.&lt;/p&gt;
&lt;h3 id="mengatur-perilaku-default"&gt;Mengatur Perilaku Default&lt;/h3&gt;
&lt;p&gt;Jika selalu memilih opsi yang sama, lewati prompt interaktif:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.category troubleshoot
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Nilai: &lt;code&gt;explain&lt;/code&gt;, &lt;code&gt;guidance&lt;/code&gt;, &lt;code&gt;troubleshoot&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;skip&lt;/code&gt;. Kamu juga bisa mengaktifkan auto-fix dan retry:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config set copilot.errorHandling.fix allow
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Kembali ke mode interaktif kapan saja:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd config unset copilot.errorHandling.category
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Jalankan &lt;code&gt;azd update&lt;/code&gt; untuk mendapatkan versi terbaru dan coba &lt;code&gt;azd init&lt;/code&gt; di proyek berikutnya.&lt;/p&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;pengumuman aslinya di sini&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Menulis Native Addon Node.js dalam C# dengan .NET Native AOT</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/</link><pubDate>Tue, 21 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/</guid><description>Tim C# Dev Kit mengganti addon Node.js berbasis C++ dengan .NET Native AOT — hasilnya lebih bersih, lebih aman, dan hanya butuh .NET SDK.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Artikel ini diterjemahkan secara otomatis. Untuk versi asli dalam bahasa Inggris, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ini skenario yang saya suka: sebuah tim yang mengerjakan tooling .NET memiliki native addon Node.js yang ditulis dalam C++ dan dikompilasi via &lt;code&gt;node-gyp&lt;/code&gt;. Berhasil. Tapi itu mengharuskan Python terinstall di setiap mesin developer — versi Python yang lama, perlu dicatat — hanya untuk membangun sebuah paket yang tidak akan pernah disentuh langsung oleh siapapun di tim.&lt;/p&gt;
&lt;p&gt;Jadi mereka mengajukan pertanyaan yang sangat masuk akal: kita sudah punya .NET SDK terinstall, kenapa kita masih menulis C++?&lt;/p&gt;
&lt;p&gt;Jawabannya adalah Native AOT, dan hasilnya sungguh elegan. Drew Noakes dari tim C# Dev Kit menulis bagaimana mereka melakukannya.&lt;/p&gt;
&lt;h2 id="ide-dasarnya"&gt;Ide dasarnya&lt;/h2&gt;
&lt;p&gt;Native addon Node.js adalah shared library (&lt;code&gt;.dll&lt;/code&gt; di Windows, &lt;code&gt;.so&lt;/code&gt; di Linux, &lt;code&gt;.dylib&lt;/code&gt; di macOS) yang bisa dimuat Node.js saat runtime. Antarmukanya disebut &lt;a href="https://nodejs.org/api/n-api.html"&gt;N-API&lt;/a&gt; — C API yang stabil dan kompatibel dengan ABI. N-API tidak peduli bahasa apa yang menghasilkan library tersebut, hanya bahwa ia mengekspor simbol yang tepat.&lt;/p&gt;
&lt;p&gt;.NET Native AOT bisa menghasilkan tepat itu. Ia mengkompilasi kode C# kamu ahead-of-time menjadi shared library native dengan entry point sembarang.&lt;/p&gt;
&lt;h2 id="konfigurasi-proyek"&gt;Konfigurasi proyek&lt;/h2&gt;
&lt;p&gt;File proyek sangat minimal:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Project&lt;/span&gt; &lt;span class="na"&gt;Sdk=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Microsoft.NET.Sdk&amp;#34;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;PropertyGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;TargetFramework&amp;gt;&lt;/span&gt;net10.0&lt;span class="nt"&gt;&amp;lt;/TargetFramework&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;PublishAot&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/PublishAot&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;AllowUnsafeBlocks&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/AllowUnsafeBlocks&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/PropertyGroup&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/Project&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;PublishAot&lt;/code&gt; memberitahu SDK untuk menghasilkan shared library saat &lt;code&gt;dotnet publish&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="mengekspor-entry-point"&gt;Mengekspor entry point&lt;/h2&gt;
&lt;p&gt;Node.js mengharapkan library kamu mengekspor &lt;code&gt;napi_register_module_v1&lt;/code&gt;. Dalam C#, &lt;code&gt;[UnmanagedCallersOnly]&lt;/code&gt; melakukan persis itu:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[UnmanagedCallersOnly(
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; EntryPoint = &amp;#34;napi_register_module_v1&amp;#34;,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; CallConvs = [typeof(CallConvCdecl)]&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="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;Init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;exports&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Initialize&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="n"&gt;RegisterFunction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exports&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;readStringValue&amp;#34;&lt;/span&gt;&lt;span class="n"&gt;u8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="n"&gt;ReadStringValue&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;exports&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Sufiks &lt;code&gt;u8&lt;/code&gt; menghasilkan &lt;code&gt;ReadOnlySpan&amp;lt;byte&amp;gt;&lt;/code&gt; dengan string literal UTF-8, diteruskan langsung ke N-API tanpa alokasi encoding apapun.&lt;/p&gt;
&lt;h2 id="resolving-n-api-terhadap-proses-host"&gt;Resolving N-API terhadap proses host&lt;/h2&gt;
&lt;p&gt;Fungsi N-API diekspor oleh &lt;code&gt;node.exe&lt;/code&gt; sendiri, bukan library terpisah. Jadi alih-alih melakukan linking, kamu me-resolve-nya terhadap proses yang berjalan saat startup:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;NativeLibrary&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SetDllImportResolver&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="n"&gt;System&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Reflection&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Assembly&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetExecutingAssembly&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="n"&gt;ResolveDllImport&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;Dengan itu, deklarasi P/Invoke bekerja dengan bersih:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[LibraryImport(&amp;#34;node&amp;#34;, EntryPoint = &amp;#34;napi_create_string_utf8&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;internal&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kd"&gt;partial&lt;/span&gt; &lt;span class="n"&gt;Status&lt;/span&gt; &lt;span class="n"&gt;CreateStringUtf8&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="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ReadOnlySpan&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;byte&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nuint&lt;/span&gt; &lt;span class="n"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;out&lt;/span&gt; &lt;span class="n"&gt;nint&lt;/span&gt; &lt;span class="n"&gt;result&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;h2 id="memanggil-dari-typescript"&gt;Memanggil dari TypeScript&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;dotnet publish&lt;/code&gt; menghasilkan native library spesifik platform kamu. Ganti namanya menjadi &lt;code&gt;.node&lt;/code&gt; dan gunakan dengan &lt;code&gt;require()&lt;/code&gt; standar:&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;const&lt;/span&gt; &lt;span class="nx"&gt;registry&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kr"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;./native/win32-x64/RegistryAddon.node&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="kr"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;RegistryAddon&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;sdkPath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;registry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;readStringValue&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="s1"&gt;&amp;#39;SOFTWARE\\dotnet\\Setup\\InstalledVersions\\x64\\sdk&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 class="s1"&gt;&amp;#39;InstallLocation&amp;#39;&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Itu saja. TypeScript ke C#, tanpa Python, tanpa C++.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Tim C# Dev Kit mengganti overhead Python/C++ dengan kode C# yang bersih yang sudah bisa ditulis dan di-debug oleh semua orang di tim. Polanya tidak rumit setelah kamu melihatnya, dan ini adalah contoh bagus dari Native AOT yang memecahkan masalah nyata yang jarang dibicarakan.&lt;/p&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/dotnet/writing-nodejs-addons-with-dotnet-native-aot/"&gt;posting aslinya di blog .NET&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.117: Agen Mendapatkan Cabang Git Sendiri dan Saya Sangat Setuju</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</link><pubDate>Sun, 19 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</guid><description>VS Code 1.117 menghadirkan isolasi worktree untuk sesi agen, mode Autopilot yang persisten, dan dukungan subagen. Alur kerja coding agentik semakin nyata.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Garis antara &amp;ldquo;asisten AI&amp;rdquo; dan &amp;ldquo;rekan tim AI&amp;rdquo; terus menipis. VS Code 1.117 baru saja mendarat dan &lt;a href="https://code.visualstudio.com/updates/v1_117"&gt;catatan rilis lengkap&lt;/a&gt; penuh, tapi ceritanya jelas: agen menjadi warga kelas satu dalam alur kerjamu.&lt;/p&gt;
&lt;p&gt;Inilah yang sebenarnya penting.&lt;/p&gt;
&lt;h2 id="mode-autopilot-akhirnya-mengingat-preferensimu"&gt;Mode Autopilot akhirnya mengingat preferensimu&lt;/h2&gt;
&lt;p&gt;Sebelumnya, kamu harus mengaktifkan kembali Autopilot setiap kali memulai sesi baru. Menjengkelkan. Sekarang mode izinmu persisten antar sesi, dan kamu bisa mengonfigurasi defaultnya.&lt;/p&gt;
&lt;p&gt;Agent Host mendukung tiga konfigurasi sesi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt; — alat meminta konfirmasi sebelum berjalan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass&lt;/strong&gt; — menyetujui segalanya secara otomatis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — sepenuhnya otonom, menjawab pertanyaannya sendiri dan terus berjalan&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jika kamu membuat scaffold proyek .NET baru dengan migrasi, Docker, dan CI — atur ke Autopilot sekali dan lupakan. Preferensi itu bertahan.&lt;/p&gt;
&lt;h2 id="isolasi-worktree-dan-git-untuk-sesi-agen"&gt;Isolasi Worktree dan git untuk sesi agen&lt;/h2&gt;
&lt;p&gt;Ini yang besar. Sesi agen sekarang mendukung isolasi worktree dan git penuh. Artinya ketika agen mengerjakan tugas, ia mendapatkan cabang dan direktori kerja sendiri. Cabang utamamu tetap tidak tersentuh.&lt;/p&gt;
&lt;p&gt;Bahkan lebih baik — Copilot CLI menghasilkan nama cabang yang bermakna untuk sesi worktree ini. Tidak ada lagi &lt;code&gt;agent-session-abc123&lt;/code&gt;. Kamu mendapatkan sesuatu yang benar-benar mendeskripsikan apa yang dilakukan agen.&lt;/p&gt;
&lt;p&gt;Untuk developer .NET yang menjalankan beberapa cabang fitur atau memperbaiki bug sementara tugas scaffolding panjang berjalan, ini adalah perubahan besar.&lt;/p&gt;
&lt;h2 id="subagen-dan-tim-agen"&gt;Subagen dan tim agen&lt;/h2&gt;
&lt;p&gt;Agent Host Protocol sekarang mendukung subagen. Agen bisa menjalankan agen lain untuk menangani bagian dari sebuah tugas. Agen utama berkoordinasi, dan agen khusus menangani bagian-bagiannya.&lt;/p&gt;
&lt;h2 id="output-terminal-otomatis-disertakan-saat-agen-mengirim-input"&gt;Output terminal otomatis disertakan saat agen mengirim input&lt;/h2&gt;
&lt;p&gt;Kecil tapi bermakna. Ketika agen mengirim input ke terminal, output terminal sekarang secara otomatis disertakan dalam konteks. Jika kamu pernah melihat agen menjalankan &lt;code&gt;dotnet build&lt;/code&gt;, gagal, dan kemudian membutuhkan giliran ekstra hanya untuk melihat kesalahan — gesekan itu hilang.&lt;/p&gt;
&lt;h2 id="aplikasi-agen-yang-memperbarui-dirinya-sendiri-di-macos"&gt;Aplikasi Agen yang memperbarui dirinya sendiri di macOS&lt;/h2&gt;
&lt;p&gt;Aplikasi Agen mandiri di macOS sekarang memperbarui dirinya sendiri. Tidak perlu lagi mengunduh versi baru secara manual.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;VS Code 1.117 adalah infrastruktur. Isolasi worktree, izin persisten, protokol subagen — ini adalah blok bangunan untuk alur kerja di mana agen menangani tugas nyata dan paralel tanpa mengganggu kodemu. Jika kamu membangun dengan .NET dan belum menyelami alur kerja agentik, sejujurnya, sekarang adalah waktu yang tepat untuk mulai.&lt;/p&gt;</content:encoded></item><item><title>Eksperimen AI Anda di Azure Membakar Uang — Inilah Cara Memperbaikinya</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>Beban kerja AI di Azure bisa cepat mahal. Mari bicara tentang apa yang sebenarnya berhasil untuk mengontrol biaya tanpa memperlambat pengembangan.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda sedang membangun aplikasi bertenaga AI di Azure sekarang, Anda mungkin sudah menyadari sesuatu: tagihan cloud Anda terlihat berbeda. Bukan hanya lebih tinggi — lebih aneh. Lonjakan. Sulit diprediksi.&lt;/p&gt;
&lt;p&gt;Microsoft baru saja menerbitkan artikel bagus tentang &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;prinsip optimasi biaya cloud yang masih penting&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mengapa-beban-kerja-ai-berbeda"&gt;Mengapa beban kerja AI berbeda&lt;/h2&gt;
&lt;p&gt;Beban kerja .NET tradisional relatif dapat diprediksi. Beban kerja AI? Tidak sama sekali. Anda menguji beberapa model, menjalankan infrastruktur berbasis GPU, dan membuat panggilan API Azure OpenAI di mana konsumsi token bervariasi drastis.&lt;/p&gt;
&lt;h2 id="manajemen-vs-optimasi--ketahui-perbedaannya"&gt;Manajemen vs. optimasi — ketahui perbedaannya&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Manajemen&lt;/strong&gt;: pelacakan dan pelaporan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optimasi&lt;/strong&gt;: membuat keputusan nyata. Apakah Anda benar-benar membutuhkan tingkat S3? Apakah instance yang selalu menyala itu duduk menganggur di akhir pekan?&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="yang-benar-benar-berhasil"&gt;Yang benar-benar berhasil&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Beri tag sumber daya Anda&lt;/strong&gt; — jika tidak bisa tahu proyek mana yang menghabiskan anggaran, tidak bisa mengoptimalkan apa pun&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pasang perlindungan sebelum bereksperimen&lt;/strong&gt; — gunakan Azure Policy untuk membatasi SKU mahal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sesuaikan ukuran secara terus-menerus&lt;/strong&gt; — periksa rekomendasi Azure Advisor&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pikirkan siklus hidup&lt;/strong&gt; — sumber daya dev harus dimatikan saat tidak digunakan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ukur nilai, bukan hanya biaya&lt;/strong&gt; — model yang lebih mahal tetapi menghasilkan hasil jauh lebih baik mungkin pilihan yang tepat&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>RFT Foundry Menjadi Lebih Murah dan Lebih Pintar — Inilah yang Berubah</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</link><pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>Microsoft Foundry mengirimkan tiga pembaruan RFT bulan ini: pelatihan global untuk o4-mini, penilai model GPT-4.1 baru, dan panduan praktik terbaik.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda membangun aplikasi .NET yang mengandalkan model yang disetel halus, pembaruan Foundry bulan ini layak diperhatikan.&lt;/p&gt;
&lt;p&gt;Detail lengkap ada di &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;pengumuman resmi&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="pelatihan-global-untuk-o4-mini"&gt;Pelatihan Global untuk o4-mini&lt;/h2&gt;
&lt;p&gt;o4-mini adalah model yang digunakan untuk beban kerja penalaran berat dan agentik. Anda kini dapat meluncurkan pekerjaan penyetelan halus dari 13+ region Azure dengan tarif pelatihan per-token yang lebih rendah.&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="s2"&gt;&amp;#34;trainingType&amp;#34;&lt;/span&gt;: &lt;span class="s2"&gt;&amp;#34;globalstandard&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="penilai-model-baru-keluarga-gpt-41"&gt;Penilai Model Baru: Keluarga GPT-4.1&lt;/h2&gt;
&lt;p&gt;Tiga opsi baru: GPT-4.1, GPT-4.1-mini, dan GPT-4.1-nano.&lt;/p&gt;
&lt;p&gt;Strategi pengelompokan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; untuk iterasi awal. Biaya rendah, loop umpan balik cepat.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; setelah rubrik penilaian stabil.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; untuk penilaian produksi.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="jebakan-format-data-rft"&gt;Jebakan Format Data RFT&lt;/h2&gt;
&lt;p&gt;Format data RFT berbeda dari SFT. Pesan terakhir di setiap baris harus berperan User atau Developer — bukan Assistant.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting-bagi-pengembang-net"&gt;Mengapa ini penting bagi pengembang .NET&lt;/h2&gt;
&lt;p&gt;Pelatihan yang lebih murah berarti Anda dapat melakukan iterasi lebih agresif. &lt;a href="https://github.com/microsoft-foundry/fine-tuning/blob/main/Demos/Agentic_RFT_PrivatePreview/RFT_Best_Practice.md"&gt;Panduan praktik terbaik di GitHub&lt;/a&gt; akan menghemat waktu debugging.&lt;/p&gt;</content:encoded></item><item><title>Berhenti Mengawasi Terminal: Mode Terpisah Aspire Mengubah Alur Kerja</title><link>https://thedotnetblog.com/id/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/id/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2 memungkinkan Anda menjalankan AppHost di background dan mengambil kembali terminal Anda. Dikombinasikan dengan perintah CLI baru dan dukungan agen, ini lebih besar dari yang terlihat.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Setiap kali Anda menjalankan Aspire AppHost, terminal Anda hilang. Terkunci. Terpakai hingga Ctrl+C. Perlu menjalankan perintah cepat? Buka tab baru. Ingin memeriksa log? Tab lain. Gesekan kecil ini menumpuk dengan cepat.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 memperbaiki ini. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;menulis semua detailnya&lt;/a&gt;, dan jujur, ini adalah salah satu fitur yang segera mengubah cara Anda bekerja.&lt;/p&gt;
&lt;h2 id="mode-terpisah-satu-perintah-terminal-kembali"&gt;Mode terpisah: satu perintah, terminal kembali&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;Ini singkatan dari &lt;code&gt;aspire run --detach&lt;/code&gt;. AppHost Anda boot di background dan Anda mendapatkan terminal kembali segera.&lt;/p&gt;
&lt;h2 id="mengelola-yang-sedang-berjalan"&gt;Mengelola yang sedang berjalan&lt;/h2&gt;
&lt;p&gt;Berjalan di background hanya berguna jika Anda bisa mengelola apa yang berjalan. Aspire 13.2 menyertakan set lengkap perintah 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;# Daftar semua AppHost yang berjalan&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;# Periksa state AppHost tertentu&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;# Stream log dari AppHost yang berjalan&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;# Hentikan AppHost tertentu&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="gabungkan-dengan-mode-terisolasi"&gt;Gabungkan dengan mode terisolasi&lt;/h2&gt;
&lt;p&gt;Mode terpisah secara alami berpasangan dengan mode terisolasi:&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;Setiap instance mendapat port acak, rahasia terpisah, dan siklus hidupnya sendiri.&lt;/p&gt;
&lt;h2 id="mengapa-ini-besar-untuk-agen-coding"&gt;Mengapa ini besar untuk agen coding&lt;/h2&gt;
&lt;p&gt;Agen coding yang bekerja di terminal Anda sekarang dapat:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Memulai aplikasi dengan &lt;code&gt;aspire start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mengkueri statusnya dengan &lt;code&gt;aspire describe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Memeriksa log dengan &lt;code&gt;aspire logs&lt;/code&gt; untuk mendiagnosis masalah&lt;/li&gt;
&lt;li&gt;Menghentikannya dengan &lt;code&gt;aspire stop&lt;/code&gt; saat selesai&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Menjalankan &lt;code&gt;aspire agent init&lt;/code&gt; menyiapkan file skill Aspire yang mengajarkan agen perintah-perintah ini.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Mode terpisah adalah peningkatan alur kerja yang menyamar sebagai flag sederhana. Baca &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;postingan lengkap&lt;/a&gt; dan dapatkan Aspire 13.2 dengan &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>Docker Sandbox Memungkinkan Agen Copilot Melakukan Refaktor Kode Tanpa Membahayakan Mesin Anda</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/</link><pubDate>Fri, 17 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/</guid><description>Docker Sandbox memberi agen GitHub Copilot microVM yang aman untuk melakukan refaktor sesuka hati — tanpa prompt izin, tanpa risiko ke host. Inilah mengapa itu mengubah segalanya untuk modernisasi .NET skala besar.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda menggunakan mode agen Copilot untuk sesuatu selain pengeditan kecil, Anda tahu rasa sakitnya. Setiap penulisan file, setiap perintah terminal — prompt izin lainnya.&lt;/p&gt;
&lt;p&gt;Tim Azure baru saja menerbitkan postingan tentang &lt;a href="https://devblogs.microsoft.com/all-things-azure/best-of-both-worlds-for-agentic-refactoring-github-copilot-microvms-via-docker-sandbox/"&gt;Docker Sandbox untuk agen GitHub Copilot&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="yang-sebenarnya-diberikan-docker-sandbox"&gt;Yang sebenarnya diberikan Docker Sandbox&lt;/h2&gt;
&lt;p&gt;Ide dasarnya sederhana: jalankan microVM ringan dengan lingkungan Linux penuh, sinkronkan workspace Anda ke dalamnya, dan biarkan agen Copilot beroperasi bebas di dalam.&lt;/p&gt;
&lt;p&gt;Ini lebih dari sekadar &amp;ldquo;jalankan sesuatu dalam container&amp;rdquo;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sinkronisasi workspace dua arah&lt;/strong&gt; yang mempertahankan jalur absolut&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Docker daemon privat&lt;/strong&gt; yang berjalan di dalam microVM&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Proxy penyaringan HTTP/HTTPS&lt;/strong&gt; yang mengontrol akses jaringan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mode YOLO&lt;/strong&gt; — agen berjalan tanpa prompt izin&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mengapa-developer-net-harus-peduli"&gt;Mengapa developer .NET harus peduli&lt;/h2&gt;
&lt;p&gt;Dengan Docker Sandbox, Anda dapat mengarahkan agen Copilot ke proyek, membiarkannya melakukan refaktor dengan bebas di dalam microVM, menjalankan &lt;code&gt;dotnet build&lt;/code&gt; dan &lt;code&gt;dotnet test&lt;/code&gt; untuk validasi, dan hanya menerima perubahan yang benar-benar berfungsi.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Docker Sandbox memecahkan ketegangan fundamental dalam agentic coding: agen membutuhkan kebebasan untuk berguna, tetapi kebebasan di mesin host Anda berbahaya. MicroVM memberi Anda keduanya.&lt;/p&gt;</content:encoded></item><item><title>Alat Azure MCP Kini Tertanam di Visual Studio 2022 — Tanpa Ekstensi</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>Alat Azure MCP dikirim sebagai bagian dari workload pengembangan Azure di Visual Studio 2022. Lebih dari 230 alat, 45 layanan Azure, nol ekstensi untuk dipasang.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda menggunakan alat Azure MCP di Visual Studio melalui ekstensi terpisah, Anda tahu prosesnya — instal VSIX, restart, berharap tidak rusak, kelola ketidakcocokan versi. Gesekan itu hilang.&lt;/p&gt;
&lt;p&gt;Yun Jung Choi &lt;a href="https://devblogs.microsoft.com/visualstudio/azure-mcp-tools-now-ship-built-into-visual-studio-2022-no-extension-required/"&gt;mengumumkan&lt;/a&gt; bahwa alat Azure MCP kini dikirim langsung sebagai bagian dari workload pengembangan Azure di Visual Studio 2022. Tanpa ekstensi. Tanpa VSIX.&lt;/p&gt;
&lt;h2 id="cara-mengaktifkannya"&gt;Cara mengaktifkannya&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Perbarui ke Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; atau lebih tinggi&lt;/li&gt;
&lt;li&gt;Pastikan workload &lt;strong&gt;Azure development&lt;/strong&gt; terinstal&lt;/li&gt;
&lt;li&gt;Buka GitHub Copilot Chat&lt;/li&gt;
&lt;li&gt;Klik tombol &lt;strong&gt;Pilih alat&lt;/strong&gt; (ikon dua kunci pas)&lt;/li&gt;
&lt;li&gt;Aktifkan &lt;strong&gt;Azure MCP Server&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tetap aktif di antara sesi.&lt;/p&gt;
&lt;h2 id="catatan"&gt;Catatan&lt;/h2&gt;
&lt;p&gt;Alat dinonaktifkan secara default — Anda perlu mengaktifkannya. Bagi developer .NET yang tinggal di Visual Studio, ini mengurangi alasan untuk beralih konteks ke portal Azure.&lt;/p&gt;</content:encoded></item><item><title>Pin Clustering Akhirnya Hadir di .NET MAUI Maps — Satu Properti, Nol Rasa Sakit</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/</link><pubDate>Thu, 16 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/</guid><description>.NET MAUI 11 Preview 3 menambahkan pengelompokan pin native ke kontrol Map. Satu properti, grup clustering terpisah, dan penanganan ketukan — semuanya bawaan.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Anda tahu momen ketika memuat peta dengan seratus pin dan semuanya menjadi gumpalan yang tidak terbaca? Itulah pengalaman .NET MAUI Maps — sampai sekarang.&lt;/p&gt;
&lt;p&gt;David Ortinau &lt;a href="https://devblogs.microsoft.com/dotnet/pin-clustering-in-dotnet-maui-maps/"&gt;baru saja mengumumkan&lt;/a&gt; bahwa .NET MAUI 11 Preview 3 hadir dengan pin clustering bawaan di Android dan iOS/Mac Catalyst.&lt;/p&gt;
&lt;h2 id="satu-properti-untuk-menguasai-semuanya"&gt;Satu properti untuk menguasai semuanya&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;maps:Map&lt;/span&gt; &lt;span class="na"&gt;IsClusteringEnabled=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;True&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Itu saja. Pin yang berdekatan dikelompokkan ke dalam cluster dengan lencana hitungan.&lt;/p&gt;
&lt;h2 id="grup-clustering-independen"&gt;Grup clustering independen&lt;/h2&gt;
&lt;p&gt;Properti &lt;code&gt;ClusteringIdentifier&lt;/code&gt; memungkinkan Anda memisahkan pin ke dalam grup independen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Pin&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Label&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Pike Place Coffee&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="n"&gt;Location&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;Location&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;47.6097&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="m"&gt;122.3331&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="n"&gt;ClusteringIdentifier&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;coffee&amp;#34;&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="menangani-ketukan-cluster"&gt;Menangani ketukan cluster&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;map&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClusterClicked&lt;/span&gt; &lt;span class="p"&gt;+=&lt;/span&gt; &lt;span class="kd"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sender&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;\n&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Pins&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Label&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="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;DisplayAlert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$&amp;#34;Cluster ({e.Pins.Count} pins)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;names&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;OK&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="mulai"&gt;Mulai&lt;/h2&gt;
&lt;p&gt;Instal &lt;a href="https://dotnet.microsoft.com/download/dotnet/11.0"&gt;.NET 11 Preview 3&lt;/a&gt; dan perbarui workload .NET MAUI.&lt;/p&gt;</content:encoded></item><item><title>.NET April 2026 Servicing — Patch Keamanan yang Harus Anda Terapkan Hari Ini</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/</guid><description>Rilis servicing April 2026 menambal 6 CVE di .NET 10, .NET 9, .NET 8, dan .NET Framework — termasuk dua kerentanan eksekusi kode jarak jauh.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-april-2026-servicing-updates/"&gt;Pembaruan servicing April 2026&lt;/a&gt; untuk .NET dan .NET Framework sudah tersedia, dan versi ini mencakup perbaikan keamanan yang ingin Anda terapkan segera. Enam CVE ditambal, termasuk dua kerentanan eksekusi kode jarak jauh (RCE).&lt;/p&gt;
&lt;h2 id="yang-ditambal"&gt;Yang ditambal&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;Tipe&lt;/th&gt;
&lt;th&gt;Mempengaruhi&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-26171&lt;/td&gt;
&lt;td&gt;Bypass Fitur Keamanan&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8 + .NET Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-32178&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Eksekusi Kode Jarak Jauh&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8 + .NET Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-33116&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Eksekusi Kode Jarak Jauh&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-32203&lt;/td&gt;
&lt;td&gt;Penolakan Layanan&lt;/td&gt;
&lt;td&gt;.NET 10, 9, 8 + .NET Framework&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-23666&lt;/td&gt;
&lt;td&gt;Penolakan Layanan&lt;/td&gt;
&lt;td&gt;.NET Framework 3.0–4.8.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CVE-2026-32226&lt;/td&gt;
&lt;td&gt;Penolakan Layanan&lt;/td&gt;
&lt;td&gt;.NET Framework 2.0–4.8.1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="versi-yang-diperbarui"&gt;Versi yang diperbarui&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;.NET 10&lt;/strong&gt;: 10.0.6&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 9&lt;/strong&gt;: 9.0.15&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;.NET 8&lt;/strong&gt;: 8.0.26&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="yang-harus-dilakukan"&gt;Yang harus dilakukan&lt;/h2&gt;
&lt;p&gt;Perbarui proyek dan pipeline CI/CD Anda ke versi patch terbaru. Dua kerentanan RCE bukan sesuatu yang Anda tunda.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Mendapatkan MongoDB EF Core dan Azure Data Lake — Dua Integrasi yang Patut Dicoba</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 menambahkan integrasi MongoDB Entity Framework Core dan Azure Data Lake Storage dengan health check otomatis dan service discovery. Inilah tampilannya dalam praktik.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aspire 13.2 hadir dengan dua integrasi database baru yang patut diperhatikan: MongoDB Entity Framework Core dan Azure Data Lake Storage.&lt;/p&gt;
&lt;h2 id="mongodb-bertemu-ef-core-di-aspire"&gt;MongoDB bertemu EF Core di Aspire&lt;/h2&gt;
&lt;p&gt;Aspire telah mendukung MongoDB untuk sementara, tapi selalu driver mentah — tidak ada EF Core, tidak ada DbContext, tidak ada kueri LINQ. Sekarang Anda mendapatkan pengalaman EF Core penuh dengan MongoDB, beserta health check otomatis dan service discovery dari Aspire.&lt;/p&gt;
&lt;p&gt;Pengaturan di AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;mongodb&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDB&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&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="n"&gt;WithDataVolume&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="n"&gt;WithLifetime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ContainerLifetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Persistent&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;apiService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ApiService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;api&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="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mongodb&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;Di proyek yang menggunakan:&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;dotnet add package Aspire.MongoDB.EntityFrameworkCore
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Daftarkan DbContext Anda:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddMongoDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;MyDbContext&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;mongodb&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;mydb&amp;#34;&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;Integrasi menangani connection pooling, trace OpenTelemetry, dan health check di belakang layar.&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-bergabung"&gt;Azure Data Lake Storage bergabung&lt;/h2&gt;
&lt;p&gt;Di AppHost:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureStorage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;azure-storage&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;dataLake&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLake&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;fileSystem&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;storage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddDataLakeFileSystem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;analyticsService&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddProject&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;Projects&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AnalyticsService&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;analytics&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="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataLake&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="n"&gt;WithReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fileSystem&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;Di proyek yang menggunakan:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeServiceClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake&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="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AddAzureDataLakeFileSystemClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;data-lake-file-system&amp;#34;&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;Tidak ada manajemen connection string manual, tidak ada pencarian kredensial.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 adalah rilis inkremental, tapi integrasi MongoDB EF Core dan Data Lake mengisi celah nyata. &lt;a href="https://get.aspire.dev"&gt;Upgrade ke 13.2&lt;/a&gt; dan coba.&lt;/p&gt;</content:encoded></item><item><title>azd update — Satu Perintah untuk Semua Package Manager Anda</title><link>https://thedotnetblog.com/id/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/id/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI kini memiliki perintah pembaruan universal yang bekerja terlepas dari cara Anda menginstalnya — winget, Homebrew, Chocolatey, atau skrip instalasi.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Anda tahu pesan &amp;ldquo;Versi baru azd tersedia&amp;rdquo; yang muncul setiap beberapa minggu? Yang Anda abaikan karena tidak ingat apakah Anda menginstal &lt;code&gt;azd&lt;/code&gt; melalui winget, Homebrew, atau skrip curl enam bulan lalu? Ini akhirnya diperbaiki.&lt;/p&gt;
&lt;p&gt;Microsoft baru saja merilis &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; — perintah tunggal yang memperbarui Azure Developer CLI ke versi terbaru terlepas dari cara asli Anda menginstalnya.&lt;/p&gt;
&lt;h2 id="cara-kerjanya"&gt;Cara kerjanya&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;Itu saja. Untuk akses awal ke fitur baru:&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;Perintah mendeteksi metode instalasi Anda saat ini dan menggunakan mekanisme pembaruan yang sesuai di balik layar.&lt;/p&gt;
&lt;h2 id="catatan-kecil"&gt;Catatan kecil&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; hadir mulai versi 1.23.x. Jika Anda menggunakan versi lebih lama, Anda perlu melakukan satu pembaruan manual terakhir. Setelah itu, &lt;code&gt;azd update&lt;/code&gt; menangani semuanya.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting"&gt;Mengapa ini penting&lt;/h2&gt;
&lt;p&gt;Ini adalah peningkatan kualitas hidup yang kecil, tetapi bagi yang menggunakan &lt;code&gt;azd&lt;/code&gt; setiap hari untuk men-deploy agen AI dan aplikasi Aspire ke Azure, tetap terkini itu penting.&lt;/p&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;pengumuman lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps Server Patch April 2026 — Perbaikan Penyelesaian PR dan Pembaruan Keamanan</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/</guid><description>Azure DevOps Server mendapatkan Patch 3 dengan perbaikan kegagalan penyelesaian PR, validasi keluar yang ditingkatkan, dan koneksi PAT GitHub Enterprise Server yang dipulihkan.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Info cepat untuk tim yang menjalankan Azure DevOps Server sendiri: Microsoft merilis &lt;a href="https://devblogs.microsoft.com/devops/april-patches-for-azure-devops-server/"&gt;Patch 3 untuk April 2026&lt;/a&gt; dengan tiga perbaikan terarah.&lt;/p&gt;
&lt;h2 id="yang-diperbaiki"&gt;Yang diperbaiki&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kegagalan penyelesaian pull request&lt;/strong&gt; — pengecualian null reference selama penyelesaian otomatis item kerja dapat menyebabkan penggabungan PR gagal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validasi pengalihan saat keluar&lt;/strong&gt; — validasi yang ditingkatkan untuk mencegah pengalihan berbahaya&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Koneksi PAT GitHub Enterprise Server&lt;/strong&gt; — membuat koneksi Personal Access Token dipulihkan&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cara-memperbarui"&gt;Cara memperbarui&lt;/h2&gt;
&lt;p&gt;Unduh &lt;a href="https://aka.ms/devopsserverpatch3"&gt;Patch 3&lt;/a&gt; dan jalankan installer. Untuk memverifikasi patch diterapkan:&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;&amp;lt;patch-installer&amp;gt;.exe CheckInstall
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Microsoft sangat merekomendasikan untuk selalu menggunakan patch terbaru demi keamanan dan keandalan.&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier Kini GA — Optimasi Biaya Blob Storage Otomatis Tanpa Aturan Siklus Hidup</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>Tingkat cerdas Azure Blob Storage kini tersedia secara umum, secara otomatis memindahkan objek antara tingkat hot, cool, dan cold berdasarkan pola akses aktual.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda pernah menghabiskan waktu menyetel kebijakan siklus hidup Azure Blob Storage dan kemudian menyaksikannya runtuh ketika pola akses berubah, ini untuk Anda. Microsoft baru saja mengumumkan &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;ketersediaan umum smart tier&lt;/a&gt; untuk Azure Blob dan Data Lake Storage.&lt;/p&gt;
&lt;h2 id="yang-sebenarnya-dilakukan-smart-tier"&gt;Yang sebenarnya dilakukan smart tier&lt;/h2&gt;
&lt;p&gt;Smart tier terus mengevaluasi waktu akses terakhir setiap objek di akun penyimpanan Anda. Data yang sering diakses tetap di hot, data tidak aktif pindah ke cool setelah 30 hari, lalu ke cold setelah 60 hari lagi. Saat data diakses lagi, langsung dipromosikan kembali ke hot.&lt;/p&gt;
&lt;p&gt;Tidak ada aturan siklus hidup yang perlu dikonfigurasi. Tidak ada penyesuaian manual.&lt;/p&gt;
&lt;p&gt;Selama pratinjau, Microsoft melaporkan bahwa &lt;strong&gt;lebih dari 50% kapasitas yang dikelola smart tier secara otomatis berpindah ke tingkat lebih dingin&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting-untuk-developer-net"&gt;Mengapa ini penting untuk developer .NET&lt;/h2&gt;
&lt;p&gt;Skenario praktis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Telemetri dan log aplikasi&lt;/strong&gt; — panas saat debugging, jarang diakses setelah beberapa minggu&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pipeline data dan output ETL&lt;/strong&gt; — akses intensif saat pemrosesan, lalu sebagian besar dingin&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konten yang dibuat pengguna&lt;/strong&gt; — unggahan terbaru panas, konten lama mendingin secara bertahap&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pertukaran-yang-perlu-diketahui"&gt;Pertukaran yang perlu diketahui&lt;/h2&gt;
&lt;p&gt;Aturan peringkatan smart tier bersifat statis (30 hari → cool, 90 hari → cold). Jika Anda membutuhkan ambang batas kustom, aturan siklus hidup masih berlaku.&lt;/p&gt;</content:encoded></item><item><title>Di Mana Anda Harus Meng-host Agen AI di Azure? Panduan Keputusan Praktis</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure menawarkan enam cara untuk meng-host agen AI — dari kontainer mentah hingga Foundry Hosted Agents yang sepenuhnya dikelola. Inilah cara memilih yang tepat untuk workload .NET Anda.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda sedang membangun agen AI dengan .NET sekarang, Anda mungkin sudah memperhatikan: ada &lt;em&gt;banyak&lt;/em&gt; cara untuk meng-host-nya di Azure. Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents.&lt;/p&gt;
&lt;p&gt;Microsoft baru saja menerbitkan &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;panduan komprehensif untuk hosting agen Azure AI&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="enam-opsi-sekilas"&gt;Enam opsi sekilas&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Opsi&lt;/th&gt;
&lt;th&gt;Terbaik untuk&lt;/th&gt;
&lt;th&gt;Anda kelola&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Container Apps&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kontrol container penuh tanpa kerumitan K8s&lt;/td&gt;
&lt;td&gt;Observabilitas, state, siklus hidup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;AKS&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Kepatuhan enterprise, multi-cluster&lt;/td&gt;
&lt;td&gt;Semuanya&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Azure Functions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tugas singkat berbasis event&lt;/td&gt;
&lt;td&gt;Hampir tidak ada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;App Service&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agen HTTP sederhana&lt;/td&gt;
&lt;td&gt;Deployment, scaling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agen opsional kode&lt;/td&gt;
&lt;td&gt;Hampir tidak ada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Foundry Hosted Agents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agen framework kustom&lt;/td&gt;
&lt;td&gt;Hanya kode agen Anda&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="foundry-hosted-agents--titik-manis-untuk-developer-agen-net"&gt;Foundry Hosted Agents — titik manis untuk developer agen .NET&lt;/h2&gt;
&lt;p&gt;Deployment benar-benar sederhana:&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 ext install azure.ai.agents
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Satu perintah &lt;code&gt;azd up&lt;/code&gt; membangun container, mendorongnya ke ACR, menyediakan proyek Foundry, dan memulai agen.&lt;/p&gt;
&lt;h2 id="kerangka-keputusan-saya"&gt;Kerangka keputusan saya&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Butuh infrastruktur nol?&lt;/strong&gt; → Foundry Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Punya kode agen kustom tapi ingin hosting terkelola?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tugas singkat berbasis event?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kontrol container maksimum?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Kepatuhan ketat dan multi-cluster?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Untuk sebagian besar developer .NET yang membangun dengan Semantic Kernel atau Microsoft Agent Framework, Hosted Agents kemungkinan adalah titik awal yang tepat. Cek &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;panduan lengkap dari Microsoft&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Agent Skills di .NET Kini Benar-Benar Fleksibel</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</link><pubDate>Tue, 14 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>Microsoft Agent Framework kini mendukung tiga cara penulisan skill — file, kelas, dan kode inline — semuanya disusun melalui satu provider. Inilah alasannya penting dan cara menggunakan masing-masing.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda membangun agen dengan Microsoft Agent Framework, Anda sudah tahu caranya: Anda mendefinisikan skill, menghubungkannya ke provider, dan membiarkan agen menentukan mana yang harus dipanggil. Yang baru adalah &lt;em&gt;bagaimana&lt;/em&gt; Anda menulis skill tersebut — dan lompatan fleksibilitasnya signifikan.&lt;/p&gt;
&lt;p&gt;Pembaruan terbaru memperkenalkan tiga pola authoring berbeda untuk agent skill: &lt;strong&gt;berbasis file&lt;/strong&gt;, &lt;strong&gt;berbasis kelas&lt;/strong&gt;, dan &lt;strong&gt;didefinisikan kode inline&lt;/strong&gt;. Ketiganya terhubung ke satu &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;, artinya Anda bisa mix and match tanpa logika routing.&lt;/p&gt;
&lt;h2 id="skill-berbasis-file-titik-awal"&gt;Skill berbasis file: titik awal&lt;/h2&gt;
&lt;p&gt;Skill berbasis file persis seperti namanya — direktori di disk dengan file &lt;code&gt;SKILL.md&lt;/code&gt;, skrip opsional, dan dokumen referensi:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;skills/
└── onboarding-guide/
├── SKILL.md
├── scripts/
│ └── check-provisioning.py
└── references/
└── onboarding-checklist.md
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Frontmatter &lt;code&gt;SKILL.md&lt;/code&gt; mendeklarasikan nama dan deskripsi skill, dan bagian instruksi memberi tahu agen cara menggunakan skrip dan referensi.&lt;/p&gt;
&lt;p&gt;Kemudian Anda menghubungkannya dengan &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProvider&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="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&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="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&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;h2 id="skill-berbasis-kelas-kirim-via-nuget"&gt;Skill berbasis kelas: kirim via NuGet&lt;/h2&gt;
&lt;p&gt;Di sinilah yang menarik bagi tim. Skill berbasis kelas mewarisi dari &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; dan menggunakan atribut seperti &lt;code&gt;[AgentSkillResource]&lt;/code&gt; dan &lt;code&gt;[AgentSkillScript]&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;BenefitsEnrollmentSkill&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;AgentClassSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;BenefitsEnrollmentSkill&lt;/span&gt;&lt;span class="p"&gt;&amp;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="n"&gt;AgentSkillFrontmatter&lt;/span&gt; &lt;span class="n"&gt;Frontmatter&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&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="s"&gt;&amp;#34;benefits-enrollment&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="s"&gt;&amp;#34;Enroll an employee in health, dental, or vision plans.&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="na"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillScript(&amp;#34;enroll&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;static&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Enroll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;planCode&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;bool&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrClient&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EnrollInPlan&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;planCode&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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;Sebuah tim bisa mengemas ini sebagai paket NuGet. Tambahkan ke proyek, masukkan ke builder, dan bekerja bersama skill berbasis file Anda.&lt;/p&gt;
&lt;h2 id="skill-inline-jembatan-cepat"&gt;Skill inline: jembatan cepat&lt;/h2&gt;
&lt;p&gt;Saat tim lain membangun skill yang persis Anda butuhkan tapi tidak akan siap dalam satu sprint? &lt;code&gt;AgentInlineSkill&lt;/code&gt; adalah jembatan Anda:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;timeOffSkill&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentInlineSkill&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="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;time-off-balance&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="n"&gt;description&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Calculate remaining vacation and sick days.&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="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;1. Minta ID karyawan. 2. Gunakan calculate-balance. 3. Sajikan hasilnya.&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="n"&gt;AddScript&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;calculate-balance&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;=&amp;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetAnnualAllowance&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&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="n"&gt;HrDatabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;GetDaysUsed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&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="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;JsonSerializer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Serialize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="n"&gt;employeeId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;leaveType&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;remaining&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ketika paket NuGet akhirnya dikirim, Anda mengganti skill inline dengan yang berbasis kelas. Agen tidak tahu perbedaannya.&lt;/p&gt;
&lt;h2 id="persetujuan-skrip-human-in-the-loop"&gt;Persetujuan skrip: human-in-the-loop&lt;/h2&gt;
&lt;p&gt;Bagi developer .NET yang membangun agen produksi, inilah bagian yang benar-benar membuka percakapan deployment. Aktifkan &lt;code&gt;UseScriptApproval&lt;/code&gt; dan agen berhenti sebelum menjalankan skrip apapun:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;skillsProvider&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AgentSkillsProviderBuilder&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="n"&gt;UseFileSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Combine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AppContext&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;BaseDirectory&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;skills&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="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;BenefitsEnrollmentSkill&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="n"&gt;UseSkill&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timeOffSkill&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="n"&gt;UseFileScriptRunner&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SubprocessScriptRunner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&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="n"&gt;UseScriptApproval&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&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="n"&gt;Build&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;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Agent skills di .NET kini memiliki model authoring yang benar-benar fleksibel. Baik Anda membuat prototip dengan skill berbasis file atau mengirim kemampuan yang dikemas via NuGet, semua pola disusun melalui &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Lihat &lt;a href="https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/"&gt;pengumuman asli&lt;/a&gt; dan &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;contoh GitHub&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 Baru Dirilis — Otomasi Cloud Agentic Self-Hosted Sudah Ada</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</link><pubDate>Sat, 11 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 mencapai stabilitas dengan deployment remote self-hosted, 276 alat di 57 layanan Azure, dan keamanan tingkat enterprise.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda baru-baru ini membangun sesuatu dengan MCP dan Azure, Anda mungkin sudah tahu bahwa pengalaman lokal bekerja dengan baik. Tapi ketika Anda perlu berbagi pengaturan itu ke seluruh tim? Di situlah hal-hal menjadi rumit.&lt;/p&gt;
&lt;p&gt;Tidak lagi. Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;baru saja mencapai 2.0 stabil&lt;/a&gt;, dan fitur utamanya adalah persis yang telah diminta tim enterprise: &lt;strong&gt;dukungan server MCP remote self-hosted&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="apa-itu-azure-mcp-server"&gt;Apa itu Azure MCP Server?&lt;/h2&gt;
&lt;p&gt;Azure MCP Server mengimplementasikan spesifikasi &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; dan mengekspos kemampuan Azure sebagai alat terstruktur dan dapat ditemukan. Angkanya berbicara sendiri: &lt;strong&gt;276 alat MCP di 57 layanan Azure&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="hal-besar-deployment-remote-self-hosted"&gt;Hal besar: deployment remote self-hosted&lt;/h2&gt;
&lt;p&gt;Dalam skenario tim nyata, Anda membutuhkan:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Akses bersama untuk developer dan sistem agen internal&lt;/li&gt;
&lt;li&gt;Konfigurasi terpusat&lt;/li&gt;
&lt;li&gt;Batas jaringan dan kebijakan enterprise&lt;/li&gt;
&lt;li&gt;Integrasi ke pipeline CI/CD&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 mengatasi semua ini. Untuk autentikasi, ada dua opsi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — saat berjalan bersama &lt;a href="https://aka.ms/azmcp/self-host/foundry"&gt;Microsoft Foundry&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alur On-Behalf-Of (OBO)&lt;/strong&gt; — delegasi OpenID Connect dengan izin pengguna yang sebenarnya&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="pengerasan-keamanan"&gt;Pengerasan keamanan&lt;/h2&gt;
&lt;p&gt;Rilis 2.0 menambahkan validasi endpoint yang lebih kuat, perlindungan terhadap pola injection, dan kontrol isolasi yang lebih ketat.&lt;/p&gt;
&lt;h2 id="memulai"&gt;Memulai&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp"&gt;GitHub Repo&lt;/a&gt;&lt;/strong&gt; — kode sumber, dokumentasi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/docker"&gt;Docker Image&lt;/a&gt;&lt;/strong&gt; — deployment dalam container&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;Ekstensi VS Code&lt;/a&gt;&lt;/strong&gt; — integrasi IDE&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Panduan self-hosting&lt;/a&gt;&lt;/strong&gt; — fitur unggulan 2.0&lt;/li&gt;
&lt;/ul&gt;</content:encoded></item><item><title>.NET Aspire 13.2 Ingin Menjadi Sahabat Terbaik Agen AI Anda</title><link>https://thedotnetblog.com/id/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/id/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 all-in pada pengembangan agentik — output CLI terstruktur, eksekusi terisolasi, lingkungan yang menyembuhkan sendiri, dan data OpenTelemetry penuh agar agen AI Anda benar-benar dapat membangun, menjalankan, dan mengamati aplikasi Anda.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Anda tahu momen ketika agen coding AI Anda menulis kode yang solid, Anda bersemangat, kemudian semuanya berantakan saat mencoba &lt;em&gt;menjalankannya&lt;/em&gt;? Konflik port, phantom process, variabel lingkungan yang salah — tiba-tiba agen Anda membakar token untuk men-debug masalah startup alih-alih membangun fitur.&lt;/p&gt;
&lt;p&gt;Tim Aspire baru saja merilis &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;post yang sangat bijaksana&lt;/a&gt; tentang masalah ini, dan jawaban mereka menarik: Aspire 13.2 dirancang tidak hanya untuk manusia, tetapi untuk agen AI.&lt;/p&gt;
&lt;h2 id="aspire-sebagai-infrastruktur-agen"&gt;Aspire sebagai infrastruktur agen&lt;/h2&gt;
&lt;p&gt;Inilah yang dibawa Aspire 13.2 ke meja pengembangan agentik:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Seluruh stack dalam kode bertipe.&lt;/strong&gt; AppHost mendefinisikan topologi lengkap — dalam TypeScript atau C# yang dapat dikompilasi:&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;Satu perintah untuk semuanya.&lt;/strong&gt; Alih-alih menyulap &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt;, dan skrip startup database — semuanya hanya &lt;code&gt;aspire start&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mode terisolasi untuk agen paralel.&lt;/strong&gt; Dengan &lt;code&gt;--isolated&lt;/code&gt;, setiap jalankan Aspire mendapat port acak sendiri dan rahasia pengguna terpisah.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mata agen melalui telemetri.&lt;/strong&gt; Aspire CLI mengekspos data OpenTelemetry penuh selama development — trace, metrik, log terstruktur.&lt;/p&gt;
&lt;h2 id="analogi-bowling-bumper"&gt;Analogi bowling bumper&lt;/h2&gt;
&lt;p&gt;Tim Aspire menggunakan analogi yang bagus: pikirkan Aspire sebagai bumper jalur bowling untuk agen AI. Jika agennya tidak sempurna (dan memang tidak akan), bumper mencegahnya melempar ke selokan.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 bukan hanya framework aplikasi terdistribusi — ini menjadi infrastruktur agen yang esensial. Baca &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;post lengkap&lt;/a&gt; dari tim Aspire.&lt;/p&gt;</content:encoded></item><item><title>Agentic Platform Engineering Menjadi Nyata — Git-APE Menunjukkan Caranya</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>Proyek Git-APE Microsoft mempraktikkan agentic platform engineering — menggunakan agen GitHub Copilot dan Azure MCP untuk mengubah permintaan bahasa alami menjadi infrastruktur cloud yang tervalidasi.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Platform engineering telah menjadi salah satu istilah yang terdengar hebat di konferensi tetapi biasanya berarti &amp;ldquo;kami membangun portal internal dan wrapper Terraform.&amp;rdquo; Janji sebenarnya — self-service infrastruktur yang benar-benar aman, terkendali, dan cepat — selalu beberapa langkah menjauh.&lt;/p&gt;
&lt;p&gt;Tim Azure baru saja menerbitkan &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;Bagian 2 dari seri agentic platform engineering mereka&lt;/a&gt;. Mereka menyebutnya &lt;strong&gt;Git-APE&lt;/strong&gt; — sebuah proyek open-source yang menggunakan agen GitHub Copilot dan server Azure MCP untuk mengubah permintaan bahasa alami menjadi infrastruktur yang tervalidasi dan ter-deploy.&lt;/p&gt;
&lt;h2 id="apa-yang-sebenarnya-dilakukan-git-ape"&gt;Apa yang sebenarnya dilakukan Git-APE&lt;/h2&gt;
&lt;p&gt;Ide inti: alih-alih mempelajari modul Terraform, developer berbicara dengan agen Copilot. Agen menginterpretasikan niat, menghasilkan Infrastructure-as-Code, memvalidasi terhadap kebijakan, dan mendeploy — semuanya dalam VS Code.&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;git clone https://github.com/Azure/git-ape
&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; git-ape
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Buka workspace di VS Code, dan file konfigurasi agen ditemukan otomatis oleh GitHub Copilot:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape deploy a function app with storage in West Europe
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Pembersihan sama mudahnya:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;@git-ape destroy my-resource-group
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="mengapa-ini-penting"&gt;Mengapa ini penting&lt;/h2&gt;
&lt;p&gt;Bagi yang membangun di Azure, ini menggeser percakapan platform engineering dari &amp;ldquo;bagaimana kami membangun portal&amp;rdquo; menjadi &amp;ldquo;bagaimana kami mendeskripsikan guardrail kami sebagai API.&amp;rdquo;&lt;/p&gt;
&lt;p&gt;Sebagai developer .NET: Azure MCP Server dan agen GitHub Copilot bekerja dengan semua workload Azure — ASP.NET Core API Anda, tumpukan .NET Aspire — semuanya bisa menjadi target alur deployment agentik.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Git-APE adalah pandangan awal tetapi konkret tentang agentic platform engineering dalam praktik. Clone &lt;a href="https://github.com/Azure/git-ape"&gt;repositorinya&lt;/a&gt; dan baca &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;postingan lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Aplikasi MCP Mendapatkan Fluent API — Buat UI Alat AI Kaya di .NET dalam Tiga Langkah</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>API konfigurasi fluent baru untuk Aplikasi MCP di Azure Functions memungkinkan Anda mengubah alat MCP .NET mana pun menjadi aplikasi lengkap dengan tampilan, izin, dan kebijakan CSP.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Alat MCP sangat bagus untuk memberikan kemampuan kepada agen AI. Tapi bagaimana jika alat Anda perlu menampilkan sesuatu kepada pengguna?&lt;/p&gt;
&lt;p&gt;Lilian Kasem dari tim Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;memperkenalkan API konfigurasi fluent baru&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="fluent-api-dalam-tiga-langkah"&gt;Fluent API dalam tiga langkah&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Langkah 1: Definisikan fungsi Anda:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;[Function(nameof(HelloApp))]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;HelloApp&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="na"&gt; [McpToolTrigger(&amp;#34;HelloApp&amp;#34;, &amp;#34;A simple MCP App that says hello.&amp;#34;)]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;ToolInvocationContext&lt;/span&gt; &lt;span class="n"&gt;context&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Hello from app&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Langkah 2: Promosikan ke Aplikasi MCP:&lt;/strong&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ConfigureMcpTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;HelloApp&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="n"&gt;AsMcpApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;app&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="n"&gt;WithView&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/hello-app.html&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="n"&gt;WithTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Hello App&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="n"&gt;WithPermissions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardWrite&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; &lt;span class="n"&gt;McpAppPermissions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ClipboardRead&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="n"&gt;WithCsp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;csp&lt;/span&gt; &lt;span class="p"&gt;=&amp;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;csp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AllowBaseUri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&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="n"&gt;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://www.microsoft.com&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Langkah 3: Tambahkan tampilan HTML Anda.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Tambahkan paket:&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;dotnet add package Microsoft.Azure.Functions.Worker.Extensions.Mcp --version 1.5.0-preview.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;posting lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Hubungkan Server MCP Anda di Azure Functions ke Agen Foundry — Begini Caranya</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>Bangun server MCP Anda sekali, deploy ke Azure Functions, dan hubungkan ke agen Microsoft Foundry dengan autentikasi yang tepat.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ada satu hal yang saya sukai tentang ekosistem MCP: Anda membangun server sekali dan bekerja di mana saja.&lt;/p&gt;
&lt;p&gt;Lily Ma dari tim Azure SDK &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;menerbitkan panduan praktis&lt;/a&gt; tentang menghubungkan server MCP yang di-deploy ke Azure Functions dengan agen Microsoft Foundry.&lt;/p&gt;
&lt;h2 id="mengapa-kombinasi-ini-masuk-akal"&gt;Mengapa kombinasi ini masuk akal&lt;/h2&gt;
&lt;p&gt;Azure Functions memberi Anda infrastruktur yang dapat diskalakan, autentikasi bawaan, dan penagihan tanpa server. Microsoft Foundry memberi Anda agen AI yang dapat bernalar dan bertindak. Menghubungkan keduanya berarti alat kustom Anda menjadi kemampuan agen AI perusahaan.&lt;/p&gt;
&lt;h2 id="opsi-autentikasi"&gt;Opsi autentikasi&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metode&lt;/th&gt;
&lt;th&gt;Kasus Penggunaan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Berbasis kunci&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pengembangan atau server tanpa Entra auth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Microsoft Entra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Produksi dengan managed identity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OAuth identity passthrough&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Produksi dengan konteks pengguna&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tanpa autentikasi&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev/pengujian atau data publik saja&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="pengaturan"&gt;Pengaturan&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Deploy server MCP ke Azure Functions&lt;/strong&gt; — sampel tersedia untuk &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aktifkan autentikasi MCP bawaan&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dapatkan URL endpoint&lt;/strong&gt; — &lt;code&gt;https://&amp;lt;FUNCTION_APP_NAME&amp;gt;.azurewebsites.net/runtime/webhooks/mcp&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tambahkan server MCP sebagai alat di Foundry&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;panduan lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Membangun UI Multi-Agen Real-Time yang Tidak Terasa Seperti Kotak Hitam</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>AG-UI dan Microsoft Agent Framework bergabung untuk memberikan alur kerja multi-agen frontend yang layak — dengan streaming real-time, persetujuan manusia, dan visibilitas penuh atas apa yang dilakukan agen Anda.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Begini kenyataan tentang sistem multi-agen: tampilannya luar biasa dalam demo. Tiga agen saling mengoper pekerjaan, memecahkan masalah, mengambil keputusan. Lalu Anda mencoba menampilkannya kepada pengguna nyata dan&amp;hellip; sunyi. Indikator yang berputar. Tidak ada yang tahu agen mana yang melakukan apa atau mengapa sistem berhenti. Ini bukan produk — ini masalah kepercayaan.&lt;/p&gt;
&lt;p&gt;Tim Microsoft Agent Framework baru saja menerbitkan &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;panduan yang luar biasa&lt;/a&gt; tentang cara memadukan alur kerja MAF dengan &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt;, protokol terbuka untuk mengalirkan peristiwa eksekusi agen ke frontend melalui Server-Sent Events. Dan jujur saja? Inilah jembatan yang selama ini kita butuhkan.&lt;/p&gt;
&lt;h2 id="mengapa-ini-penting-bagi-developer-net"&gt;Mengapa ini penting bagi developer .NET&lt;/h2&gt;
&lt;p&gt;Jika Anda membangun aplikasi bertenaga AI, Anda mungkin sudah pernah menabrak dinding ini. Orkestrasi backend Anda bekerja dengan baik — agen saling meneruskan pekerjaan, alat berjalan, keputusan dibuat. Tapi frontend tidak tahu apa yang terjadi di balik layar. AG-UI mengatasi ini dengan mendefinisikan protokol standar untuk mengalirkan peristiwa agen (&lt;code&gt;RUN_STARTED&lt;/code&gt;, &lt;code&gt;STEP_STARTED&lt;/code&gt;, &lt;code&gt;TOOL_CALL_*&lt;/code&gt;, &lt;code&gt;TEXT_MESSAGE_*&lt;/code&gt;) langsung ke lapisan UI Anda melalui SSE.&lt;/p&gt;
&lt;p&gt;Demo yang mereka bangun adalah alur kerja dukungan pelanggan dengan tiga agen: agen triase yang merutekan permintaan, agen pengembalian dana yang menangani urusan keuangan, dan agen pesanan yang mengelola penggantian. Setiap agen memiliki alat-alatnya sendiri, dan topologi handoff didefinisikan secara eksplisit — tidak ada nuansa &amp;ldquo;cari tahu dari prompt&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="topologi-handoff-adalah-bintang-sesungguhnya"&gt;Topologi handoff adalah bintang sesungguhnya&lt;/h2&gt;
&lt;p&gt;Yang menarik perhatian saya adalah bagaimana &lt;code&gt;HandoffBuilder&lt;/code&gt; memungkinkan Anda mendeklarasikan graf perutean berarah antar agen:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;HandoffBuilder&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="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&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="n"&gt;participants&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;order&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="n"&gt;termination_condition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;termination_condition&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&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="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Refunds, damaged-item claims...&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="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement, exchange...&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="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;refund&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Replacement logistics needed after refund.&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="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_handoff&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;order&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;triage&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;After replacement/shipping tasks complete.&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Setiap &lt;code&gt;add_handoff&lt;/code&gt; membuat sisi berarah dengan deskripsi bahasa alami. Framework menghasilkan alat handoff untuk setiap agen berdasarkan topologi ini. Jadi keputusan perutean didasarkan pada struktur orkestrasi Anda, bukan pada apa yang ingin dilakukan LLM. Ini sangat penting untuk keandalan produksi.&lt;/p&gt;
&lt;h2 id="human-in-the-loop-yang-benar-benar-bekerja"&gt;Human-in-the-loop yang benar-benar bekerja&lt;/h2&gt;
&lt;p&gt;Demo ini memperlihatkan dua pola interupsi yang dibutuhkan oleh aplikasi agen mana pun di dunia nyata:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interupsi persetujuan alat&lt;/strong&gt; — ketika agen memanggil alat yang ditandai dengan &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt;, alur kerja dijeda dan mengeluarkan peristiwa. Frontend merender modal persetujuan dengan nama alat dan argumennya. Tidak ada loop percobaan ulang yang membakar token — hanya alur jeda-setujui-lanjutkan yang bersih.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Interupsi permintaan informasi&lt;/strong&gt; — ketika agen membutuhkan lebih banyak konteks dari pengguna (seperti ID pesanan), agen berhenti dan bertanya. Frontend menampilkan pertanyaan, pengguna merespons, dan eksekusi dilanjutkan dari tepat di mana ia berhenti.&lt;/p&gt;
&lt;p&gt;Kedua pola dialirkan sebagai peristiwa AG-UI standar, sehingga frontend Anda tidak memerlukan logika khusus per agen — cukup merender peristiwa apa pun yang masuk melalui koneksi SSE.&lt;/p&gt;
&lt;h2 id="menghubungkannya-sangat-sederhana"&gt;Menghubungkannya sangat sederhana&lt;/h2&gt;
&lt;p&gt;Integrasi antara MAF dan AG-UI adalah satu panggilan fungsi:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;agent_framework.ag_ui&lt;/span&gt; &lt;span class="kn"&gt;import&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="n"&gt;AgentFrameworkWorkflow&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="n"&gt;add_agent_framework_fastapi_endpoint&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&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="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;FastAPI&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="n"&gt;demo_workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AgentFrameworkWorkflow&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="n"&gt;workflow_factory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;_thread_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;create_handoff_workflow&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="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ag_ui_handoff_workflow_demo&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&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="n"&gt;add_agent_framework_fastapi_endpoint&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="n"&gt;app&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;demo_workflow&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/handoff_demo&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;workflow_factory&lt;/code&gt; membuat alur kerja baru per thread, sehingga setiap percakapan mendapat status yang terisolasi. Endpoint menangani semua plumbing SSE secara otomatis. Jika Anda sudah menggunakan FastAPI (atau bisa menambahkannya sebagai lapisan ringan), ini hampir tanpa gesekan.&lt;/p&gt;
&lt;h2 id="pandangan-saya"&gt;Pandangan saya&lt;/h2&gt;
&lt;p&gt;Bagi developer .NET, pertanyaan langsung adalah: &amp;ldquo;Bisakah saya melakukan ini di C#?&amp;rdquo; Agent Framework tersedia untuk .NET dan Python, dan protokol AG-UI bersifat language-agnostic (ini hanyalah SSE). Jadi meskipun demo ini menggunakan Python dan FastAPI, polanya langsung dapat diterapkan. Anda bisa menghubungkan ASP.NET Core minimal API dengan endpoint SSE mengikuti skema peristiwa AG-UI yang sama.&lt;/p&gt;
&lt;p&gt;Kesimpulan yang lebih besar adalah bahwa UI multi-agen menjadi perhatian kelas satu, bukan renungan. Jika Anda membangun apa pun di mana agen berinteraksi dengan manusia — dukungan pelanggan, alur kerja persetujuan, pemrosesan dokumen — kombinasi orkestrasi MAF dan transparansi AG-UI adalah pola yang harus diikuti.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework memberi Anda yang terbaik dari kedua dunia: orkestrasi multi-agen yang kuat di backend dan visibilitas real-time di frontend. Tidak ada lagi interaksi agen sebagai kotak hitam.&lt;/p&gt;
&lt;p&gt;Lihat &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;panduan lengkap&lt;/a&gt; dan &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;repositori protokol AG-UI&lt;/a&gt; untuk mendalami lebih jauh.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry Maret 2026 — GPT-5.4, Agent Service GA, dan SDK Refresh yang Mengubah Segalanya</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>Pembaruan Foundry Maret 2026 sangat besar: Agent Service mencapai GA, GPT-5.4 menghadirkan penalaran yang andal, SDK azure-ai-projects stabil di semua bahasa.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Posting bulanan &amp;ldquo;Yang Baru di Microsoft Foundry&amp;rdquo; biasanya merupakan campuran peningkatan bertahap. &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;Edisi Maret 2026&lt;/a&gt;? Hampir semuanya adalah fitur utama.&lt;/p&gt;
&lt;h2 id="foundry-agent-service-siap-untuk-produksi"&gt;Foundry Agent Service siap untuk produksi&lt;/h2&gt;
&lt;p&gt;Runtime agen generasi berikutnya tersedia secara umum — dibangun di atas OpenAI Responses API, kompatibel secara wire dengan agen OpenAI.&lt;/p&gt;
&lt;p&gt;Penambahan utama: jaringan privat end-to-end, ekspansi auth MCP, pratinjau Voice Live, dan hosted agents di 6 region baru.&lt;/p&gt;
&lt;h2 id="gpt-54--keandalan-di-atas-kecerdasan-mentah"&gt;GPT-5.4 — keandalan di atas kecerdasan mentah&lt;/h2&gt;
&lt;p&gt;GPT-5.4 bukan tentang menjadi lebih pintar. Ini tentang menjadi lebih andal.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Harga (per M token)&lt;/th&gt;
&lt;th&gt;Terbaik untuk&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 (≤272K)&lt;/td&gt;
&lt;td&gt;$2.50 / $15 output&lt;/td&gt;
&lt;td&gt;Agen produksi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Pro&lt;/td&gt;
&lt;td&gt;$30 / $180 output&lt;/td&gt;
&lt;td&gt;Analisis mendalam&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Hemat biaya&lt;/td&gt;
&lt;td&gt;Klasifikasi, ekstraksi&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="sdk-akhirnya-stabil"&gt;SDK akhirnya stabil&lt;/h2&gt;
&lt;p&gt;SDK &lt;code&gt;azure-ai-projects&lt;/code&gt; merilis versi stabil di semua bahasa — termasuk .NET 2.0.0.&lt;/p&gt;
&lt;h2 id="fireworks-ai-membawa-model-terbuka-ke-azure"&gt;Fireworks AI membawa model terbuka ke Azure&lt;/h2&gt;
&lt;p&gt;DeepSeek V3.2, gpt-oss-120b, Kimi K2.5 tersedia saat peluncuran.&lt;/p&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;ringkasan lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Mode Terisolasi Aspire Memperbaiki Mimpi Buruk Konflik Port dalam Pengembangan Paralel</title><link>https://thedotnetblog.com/id/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/id/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2 memperkenalkan mode --isolated: port acak, rahasia terpisah, dan nol tabrakan saat menjalankan beberapa instans AppHost yang sama. Sempurna untuk agen AI, worktree, dan alur kerja paralel.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda pernah mencoba menjalankan dua instans proyek yang sama secara bersamaan, Anda tahu rasa sakitnya. Port 8080 sudah digunakan.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 memperbaiki ini dengan satu flag. James Newton-King &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;menulis semua detailnya&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="perbaikan---isolated"&gt;Perbaikan: &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;Setiap run mendapat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Port acak&lt;/strong&gt; — tidak ada tabrakan antar instans&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User secrets terisolasi&lt;/strong&gt; — connection string dan API key tetap terpisah per instans&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="skenario-nyata"&gt;Skenario nyata&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Beberapa checkout:&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;Keduanya berjalan tanpa konflik.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agen latar belakang di VS Code.&lt;/strong&gt; Ketika agen latar belakang Copilot Chat membuat git worktree untuk bekerja secara independen, mode terisolasi memastikan kedua instans berfungsi.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Mode terisolasi adalah fitur kecil yang memecahkan masalah nyata yang semakin umum. Dapatkan 13.2 dengan &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>Pengaturan Floating Windows Visual Studio yang Tidak Kamu Ketahui (Tapi Harus Tahu)</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/</guid><description>Pengaturan tersembunyi di Visual Studio memberi kendali penuh atas floating windows — entri taskbar mandiri, perilaku multi-monitor yang benar, dan integrasi FancyZones yang sempurna. Satu dropdown mengubah segalanya.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika kamu menggunakan beberapa monitor dengan Visual Studio (dan jujur saja, siapa yang tidak zaman sekarang), kamu mungkin pernah merasakan frustrasi ini: floating tool windows menghilang saat kamu meminimalkan IDE utama, selalu berada di atas segalanya, dan tidak muncul sebagai tombol taskbar terpisah. Ini mungkin berhasil untuk beberapa alur kerja, tapi untuk setup multi-monitor sangat menjengkelkan.&lt;/p&gt;
&lt;p&gt;Mads Kristensen dari tim Visual Studio &lt;a href="https://devblogs.microsoft.com/visualstudio/take-full-control-of-your-floating-windows-in-visual-studio/"&gt;berbagi pengaturan yang kurang dikenal&lt;/a&gt; yang sepenuhnya mengubah cara floating windows berperilaku. Satu dropdown. Itu saja.&lt;/p&gt;
&lt;h2 id="pengaturannya"&gt;Pengaturannya&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Tools &amp;gt; Options &amp;gt; Environment &amp;gt; Windows &amp;gt; Floating Windows&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Dropdown &amp;ldquo;These floating windows are owned by the main window&amp;rdquo; memiliki tiga opsi:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;None&lt;/strong&gt; — independensi penuh. Setiap floating window mendapat entri taskbar sendiri dan berperilaku seperti jendela Windows biasa.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool Windows&lt;/strong&gt; (default) — dokumen mengapung bebas, tool windows tetap terikat ke IDE.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documents and Tool Windows&lt;/strong&gt; — perilaku Visual Studio klasik, semuanya terikat ke jendela utama.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mengapa-none-adalah-pilihan-terbaik-untuk-setup-multi-monitor"&gt;Mengapa &amp;ldquo;None&amp;rdquo; adalah Pilihan Terbaik untuk Setup Multi-Monitor&lt;/h2&gt;
&lt;p&gt;Atur ke &lt;strong&gt;None&lt;/strong&gt; dan tiba-tiba semua floating tool windows dan dokumen berperilaku seperti aplikasi Windows nyata. Mereka muncul di taskbar, tetap terlihat saat kamu meminimalkan jendela Visual Studio utama, dan berhenti memaksa diri ke depan segalanya.&lt;/p&gt;
&lt;p&gt;Kombinasikan ini dengan &lt;strong&gt;PowerToys FancyZones&lt;/strong&gt; dan itu mengubah segalanya. Buat tata letak kustom di seluruh monitormu, snap Solution Explorer ke satu zona, debugger ke zona lain, dan file kode di mana pun kamu mau. Semuanya tetap di tempat, semuanya dapat diakses secara mandiri.&lt;/p&gt;
&lt;h2 id="rekomendasi-cepat"&gt;Rekomendasi Cepat&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pengguna multi-monitor&lt;/strong&gt;: Atur ke &lt;strong&gt;None&lt;/strong&gt;, pasangkan dengan FancyZones&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Floating windows sesekali&lt;/strong&gt;: &lt;strong&gt;Tool Windows&lt;/strong&gt; (default) adalah jalan tengah yang solid&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alur kerja tradisional&lt;/strong&gt;: &lt;strong&gt;Documents and Tool Windows&lt;/strong&gt; mempertahankan gaya klasik&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tips: &lt;strong&gt;Ctrl + double-click&lt;/strong&gt; pada title bar tool window mana pun untuk langsung memfloat atau mendocknya. Tidak perlu restart setelah mengubah pengaturan.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Ini salah satu pengaturan &amp;ldquo;Saya tidak percaya saya tidak tahu tentang ini&amp;rdquo;. Jika floating windows di Visual Studio pernah membuatmu kesal, pergi ubah ini sekarang.&lt;/p&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/visualstudio/take-full-control-of-your-floating-windows-in-visual-studio/"&gt;postingan lengkapnya&lt;/a&gt; untuk detail dan screenshot.&lt;/p&gt;</content:encoded></item><item><title>Penilaian Modernisasi GitHub Copilot Adalah Alat Migrasi Terbaik yang Belum Anda Gunakan</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>Ekstensi modernisasi GitHub Copilot tidak hanya menyarankan perubahan kode — melainkan menghasilkan penilaian migrasi lengkap dengan masalah yang dapat ditindaklanjuti, perbandingan target Azure, dan alur kerja kolaboratif.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Memigrasikan aplikasi .NET Framework lama ke .NET modern adalah salah satu tugas yang semua orang tahu harus dilakukan tapi tidak ada yang ingin memulainya.&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz baru saja menerbitkan &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;analisis mendalam tentang penilaian modernisasi GitHub Copilot&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="ini-bukan-sekadar-mesin-saran-kode"&gt;Ini bukan sekadar mesin saran kode&lt;/h2&gt;
&lt;p&gt;Ekstensi VS Code mengikuti model &lt;strong&gt;Nilai → Rencanakan → Eksekusi&lt;/strong&gt;. Fase penilaian menganalisis seluruh basis kode dan menghasilkan dokumen terstruktur yang menangkap semuanya.&lt;/p&gt;
&lt;p&gt;Penilaian disimpan di bawah &lt;code&gt;.github/modernize/assessment/&lt;/code&gt;. Setiap run menghasilkan laporan independen.&lt;/p&gt;
&lt;h2 id="dua-cara-untuk-memulai"&gt;Dua cara untuk memulai&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Penilaian yang Direkomendasikan&lt;/strong&gt; — jalur cepat. Pilih dari domain yang dikurasi (Peningkatan Java/.NET, Kesiapan Cloud, Keamanan).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Penilaian Kustom&lt;/strong&gt; — jalur terarah. Konfigurasikan apa yang akan dianalisis: komputasi target (App Service, AKS, Container Apps), OS target, analisis kontainerisasi.&lt;/p&gt;
&lt;h2 id="rincian-masalah-dapat-ditindaklanjuti"&gt;Rincian masalah dapat ditindaklanjuti&lt;/h2&gt;
&lt;p&gt;Setiap masalah dilengkapi level kritis:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Wajib&lt;/strong&gt; — harus diperbaiki atau migrasi akan gagal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potensial&lt;/strong&gt; — mungkin berdampak pada migrasi, memerlukan penilaian manusia&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Opsional&lt;/strong&gt; — perbaikan yang direkomendasikan, tidak akan memblokir migrasi&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="pendapat-saya"&gt;Pendapat saya&lt;/h2&gt;
&lt;p&gt;Jika Anda memiliki aplikasi .NET Framework lama, ini adalah alat &lt;em&gt;terbaik&lt;/em&gt; untuk memulai. Dokumen penilaian saja sudah sepadan dengan waktunya.&lt;/p&gt;
&lt;p&gt;Baca &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;panduan lengkap&lt;/a&gt; dan unduh &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;ekstensi VS Code&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server — Cara yang Tepat untuk Memberi Agen AI Akses Database</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>SQL MCP Server dari Data API builder memberi agen AI akses database yang aman dan deterministik tanpa mengekspos skema atau mengandalkan NL2SQL.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jujur saja: sebagian besar server MCP database yang tersedia saat ini sangat menakutkan. Mereka mengambil kueri bahasa alami, menghasilkan SQL secara langsung, dan menjalankannya pada data produksi Anda.&lt;/p&gt;
&lt;p&gt;Tim Azure SQL baru saja &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;memperkenalkan SQL MCP Server&lt;/a&gt;, dan mengambil pendekatan yang secara fundamental berbeda.&lt;/p&gt;
&lt;h2 id="mengapa-tidak-nl2sql"&gt;Mengapa tidak NL2SQL?&lt;/h2&gt;
&lt;p&gt;Model tidak deterministik. SQL MCP Server menggunakan pendekatan &lt;strong&gt;NL2DAB&lt;/strong&gt;. Agen bekerja dengan lapisan abstraksi entitas Data API builder untuk menghasilkan T-SQL yang akurat secara deterministik.&lt;/p&gt;
&lt;h2 id="tujuh-alat-bukan-tujuh-ratus"&gt;Tujuh alat, bukan tujuh ratus&lt;/h2&gt;
&lt;p&gt;SQL MCP Server mengekspos tepat tujuh alat DML:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — temukan entitas yang tersedia&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — sisipkan baris&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — kueri tabel dan view&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — modifikasi baris&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — hapus baris&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — jalankan stored procedure&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — kueri agregasi&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="mulai-dalam-tiga-perintah"&gt;Mulai dalam tiga perintah&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;dab init --database-type mssql --connection-string &lt;span class="s2"&gt;&amp;#34;@env(&amp;#39;sql_connection_string&amp;#39;)&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;dab add Customers --source dbo.Customers --permissions &lt;span class="s2"&gt;&amp;#34;anonymous:*&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;dab start
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="cerita-keamanan-solid"&gt;Cerita keamanan solid&lt;/h2&gt;
&lt;p&gt;RBAC di setiap lapisan, integrasi Azure Key Vault, Microsoft Entra + OAuth kustom.&lt;/p&gt;
&lt;p&gt;Lihat &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;posting lengkap&lt;/a&gt; dan &lt;a href="https://aka.ms/sql/mcp"&gt;dokumentasi&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.116 — Aplikasi Agen Mendapatkan Navigasi Keyboard dan Penyelesaian Konteks File</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/</link><pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/</guid><description>VS Code 1.116 berfokus pada polesan aplikasi Agen — keybinding khusus, peningkatan aksesibilitas, penyelesaian konteks file, dan resolusi tautan CSS @import.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.116 adalah rilis April 2026, dan meskipun lebih ringan dari beberapa pembaruan terbaru, perubahannya fokus dan bermakna — terutama jika kamu menggunakan aplikasi Agen setiap hari.&lt;/p&gt;
&lt;p&gt;Inilah yang mendarat, berdasarkan &lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;catatan rilis resmi&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="peningkatan-aplikasi-agen"&gt;Peningkatan aplikasi Agen&lt;/h2&gt;
&lt;p&gt;Aplikasi Agen terus matang dengan polesan kegunaan yang membuat perbedaan nyata dalam alur kerja sehari-hari:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keybinding khusus&lt;/strong&gt; — kamu sekarang bisa memfokuskan tampilan Changes, pohon file dalam Changes, dan tampilan Chat Customizations dengan perintah dan pintasan keyboard khusus.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dialog bantuan aksesibilitas&lt;/strong&gt; — menekan &lt;code&gt;Alt+F1&lt;/code&gt; di kotak input chat sekarang membuka dialog bantuan aksesibilitas yang menampilkan perintah dan keybinding yang tersedia.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Penyelesaian konteks file&lt;/strong&gt; — ketik &lt;code&gt;#&lt;/code&gt; di chat aplikasi Agen untuk memicu penyelesaian konteks file yang dicakup ke workspace saat ini.&lt;/p&gt;
&lt;h2 id="resolusi-tautan-css-import"&gt;Resolusi tautan CSS &lt;code&gt;@import&lt;/code&gt;&lt;/h2&gt;
&lt;p&gt;Sesuatu yang bagus untuk developer frontend: VS Code sekarang menyelesaikan referensi CSS &lt;code&gt;@import&lt;/code&gt; yang menggunakan jalur node_modules. Kamu bisa &lt;code&gt;Ctrl+klik&lt;/code&gt; melalui import seperti &lt;code&gt;@import &amp;quot;some-module/style.css&amp;quot;&lt;/code&gt; saat menggunakan bundler.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;VS Code 1.116 tentang penyempurnaan — membuat aplikasi Agen lebih mudah dinavigasi, lebih mudah diakses, dan lebih ramah keyboard. Lihat &lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;catatan rilis lengkapnya&lt;/a&gt; untuk daftar lengkap.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.115 — Notifikasi Terminal Latar Belakang, Mode Agen SSH, dan Lainnya</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/</link><pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/</guid><description>VS Code 1.115 menghadirkan notifikasi terminal latar belakang untuk agen, hosting agen jarak jauh SSH, tempel file di terminal, dan pelacakan edit sadar sesi. Inilah yang penting untuk developer .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.115 baru saja &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;rilis&lt;/a&gt;, dan meskipun ini adalah rilis yang lebih ringan dalam hal fitur utama, peningkatan terkait agen benar-benar berguna jika kamu bekerja dengan asisten coding AI setiap hari.&lt;/p&gt;
&lt;p&gt;Biarkan aku menyoroti apa yang sebenarnya layak diketahui.&lt;/p&gt;
&lt;h2 id="terminal-latar-belakang-berkomunikasi-kembali-ke-agen"&gt;Terminal latar belakang berkomunikasi kembali ke agen&lt;/h2&gt;
&lt;p&gt;Ini adalah fitur unggulan. Terminal latar belakang sekarang secara otomatis memberi tahu agen ketika perintah selesai, termasuk kode keluar dan output terminal.&lt;/p&gt;
&lt;p&gt;Mengapa ini penting? Jika kamu menggunakan mode agen Copilot untuk menjalankan perintah build atau suite test di latar belakang, kamu tahu rasa sakit &amp;ldquo;apakah itu sudah selesai?&amp;rdquo; — terminal latar belakang pada dasarnya adalah tembak dan lupakan. Sekarang agen mendapat pemberitahuan ketika &lt;code&gt;dotnet build&lt;/code&gt; atau &lt;code&gt;dotnet test&lt;/code&gt;mu selesai, melihat output, dan dapat bereaksi sesuai. Ini adalah perubahan kecil yang membuat alur kerja yang digerakkan agen jauh lebih andal.&lt;/p&gt;
&lt;p&gt;Ada juga alat &lt;code&gt;send_to_terminal&lt;/code&gt; baru yang memungkinkan agen mengirim perintah ke terminal latar belakang dengan konfirmasi pengguna.&lt;/p&gt;
&lt;h2 id="hosting-agen-jarak-jauh-ssh"&gt;Hosting agen jarak jauh SSH&lt;/h2&gt;
&lt;p&gt;VS Code sekarang mendukung koneksi ke mesin jarak jauh melalui SSH, secara otomatis menginstal CLI dan memulainya dalam mode host agen.&lt;/p&gt;
&lt;h2 id="pelacakan-edit-dalam-sesi-agen"&gt;Pelacakan edit dalam sesi agen&lt;/h2&gt;
&lt;p&gt;Edit file yang dibuat selama sesi agen sekarang dilacak dan dipulihkan, dengan diff, undo/redo, dan pemulihan state.&lt;/p&gt;
&lt;h2 id="kesadaran-tab-browser-dan-peningkatan-lainnya"&gt;Kesadaran tab browser dan peningkatan lainnya&lt;/h2&gt;
&lt;p&gt;Beberapa tambahan kualitas hidup lainnya:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pelacakan tab browser&lt;/strong&gt; — chat sekarang bisa melacak dan menautkan ke tab browser yang dibuka selama sesi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tempel file di terminal&lt;/strong&gt; — tempel file (termasuk gambar) ke terminal dengan Ctrl+V&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cakupan tes di minimap&lt;/strong&gt; — indikator cakupan tes sekarang muncul di minimap&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pinch-to-zoom di Mac&lt;/strong&gt; — browser terintegrasi mendukung gestur pinch-to-zoom&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;VS Code 1.115 adalah rilis inkremental, tapi peningkatan agen — notifikasi terminal latar belakang, hosting agen SSH, dan pelacakan edit — menambah pengalaman yang terasa lebih lancar secara keseluruhan. Lihat &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;catatan rilis lengkapnya&lt;/a&gt; untuk setiap detail.&lt;/p&gt;</content:encoded></item><item><title>C# 15 Mendapatkan Tipe Union — Dan Itu Persis Yang Kita Minta</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/</guid><description>C# 15 memperkenalkan kata kunci `union` — union diskriminasi yang dipaksakan kompiler dengan pencocokan pola yang lengkap. Seperti apa tampilannya, mengapa penting, dan cara mencobanya hari ini.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Inilah yang saya tunggu-tunggu. C# 15 memperkenalkan kata kunci &lt;code&gt;union&lt;/code&gt; — union diskriminasi yang tepat dengan pencocokan pola lengkap yang dipaksakan kompiler.&lt;/p&gt;
&lt;p&gt;Bill Wagner &lt;a href="https://devblogs.microsoft.com/dotnet/csharp-15-union-types/"&gt;menerbitkan analisis mendalam&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="masalah-yang-diselesaikan-union"&gt;Masalah yang diselesaikan union&lt;/h2&gt;
&lt;p&gt;Sebelum C# 15, mengembalikan &amp;ldquo;salah satu dari beberapa tipe yang mungkin&amp;rdquo; dari metode selalu merupakan kompromi. Anda tidak pernah mendapatkan apa yang sebenarnya Anda inginkan: kumpulan tipe tertutup di mana kompiler menjamin Anda telah menangani setiap kasus.&lt;/p&gt;
&lt;h2 id="sintaksnya-sederhana-dengan-indah"&gt;Sintaksnya sederhana dengan indah&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&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="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&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="kd"&gt;public&lt;/span&gt; &lt;span class="k"&gt;record&lt;/span&gt; &lt;span class="nc"&gt;class&lt;/span&gt; &lt;span class="n"&gt;Bird&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Name&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="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;Pet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Cat&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Dog&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Bird&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;Dan inilah keajaibannya — kompiler memaksakan pencocokan lengkap:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pet&lt;/span&gt; &lt;span class="k"&gt;switch&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;Dog&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&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="n"&gt;Cat&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&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="n"&gt;Bird&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Name&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Tidak perlu &lt;code&gt;_&lt;/code&gt;. Jika Anda nanti menambahkan tipe keempat ke union, setiap ekspresi switch yang tidak menanganinya menghasilkan peringatan.&lt;/p&gt;
&lt;h2 id="di-mana-ini-menjadi-praktis"&gt;Di mana ini menjadi praktis&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;ApiResult&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;(&lt;/span&gt;&lt;span class="n"&gt;T&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ApiError&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ValidationFailure&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;Sekarang setiap konsumen dipaksa untuk menangani sukses, error, dan kegagalan validasi.&lt;/p&gt;
&lt;h2 id="coba-hari-ini"&gt;Coba hari ini&lt;/h2&gt;
&lt;p&gt;Tipe union tersedia di .NET 11 Preview 2. Lihat &lt;a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/union"&gt;referensi bahasa lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 Memiliki CLI Dokumentasi — dan Agen AI Anda Bisa Menggunakannya Juga</title><link>https://thedotnetblog.com/id/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/id/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 menambahkan aspire docs — CLI untuk mencari, menelusuri, dan membaca dokumentasi resmi tanpa meninggalkan terminal. Juga berfungsi sebagai alat untuk agen AI.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Anda tahu momen ketika Anda sedang dalam Aspire AppHost, menghubungkan integrasi, dan perlu memeriksa parameter apa yang diharapkan integrasi Redis? Anda alt-tab ke browser, berburu di aspire.dev. Konteks hilang.&lt;/p&gt;
&lt;p&gt;Aspire 13.2 baru saja &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;mengirimkan perbaikan untuk itu&lt;/a&gt;. CLI &lt;code&gt;aspire docs&lt;/code&gt; memungkinkan Anda mencari, menelusuri, dan membaca dokumentasi Aspire resmi langsung dari terminal.&lt;/p&gt;
&lt;h2 id="tiga-perintah-nol-tab-browser"&gt;Tiga perintah, nol tab browser&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;# Daftar semua dokumen&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;# Cari topik&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;# Baca halaman penuh&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;# Hanya satu bagian&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="sudut-agen-ai"&gt;Sudut agen AI&lt;/h2&gt;
&lt;p&gt;Perintah &lt;code&gt;aspire docs&lt;/code&gt; yang sama berfungsi sebagai alat untuk agen AI. Alih-alih mengarang API Aspire berdasarkan data pelatihan lama, agen bisa memanggil &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt;, menemukan dokumen integrasi resmi, dan membaca halaman yang tepat.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; adalah fitur kecil yang memecahkan masalah nyata dengan bersih. Lihat &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;deep dive David Pine&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework Mencapai Versi 1.0 — Inilah yang Benar-Benar Penting bagi Developer .NET</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</link><pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</guid><description>Microsoft Agent Framework 1.0 siap produksi dengan API stabil, orkestrasi multi-agen, dan konektor untuk setiap penyedia AI utama. Inilah yang perlu Anda ketahui sebagai developer .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda telah mengikuti perjalanan Agent Framework dari hari-hari awal Semantic Kernel dan AutoGen, ini adalah momen yang berarti. Microsoft Agent Framework baru saja &lt;a href="https://devblogs.microsoft.com/agent-framework/microsoft-agent-framework-version-1-0/"&gt;mencapai versi 1.0&lt;/a&gt; — siap produksi, API stabil, komitmen dukungan jangka panjang. Tersedia untuk .NET dan Python, dan benar-benar siap untuk beban kerja nyata.&lt;/p&gt;
&lt;p&gt;Mari kita potong kebisingan pengumuman dan fokus pada apa yang penting jika Anda membangun aplikasi bertenaga AI dengan .NET.&lt;/p&gt;
&lt;h2 id="versi-singkat"&gt;Versi singkat&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 menyatukan apa yang dulu Semantic Kernel dan AutoGen menjadi satu SDK open-source. Satu abstraksi agen. Satu mesin orkestrasi. Beberapa penyedia AI. Jika Anda bolak-balik antara Semantic Kernel untuk pola enterprise dan AutoGen untuk alur kerja multi-agen tingkat penelitian, Anda bisa berhenti. Inilah satu SDK-nya sekarang.&lt;/p&gt;
&lt;h2 id="memulai-hampir-terlalu-mudah"&gt;Memulai hampir terlalu mudah&lt;/h2&gt;
&lt;p&gt;Berikut agen yang berfungsi di .NET:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// dotnet add package Microsoft.Agents.AI.OpenAI --prerelease&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI&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="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Microsoft.Agents.AI.Foundry&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="k"&gt;using&lt;/span&gt; &lt;span class="nn"&gt;Azure.Identity&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="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;https://your-project.services.ai.azure.com&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="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;gpt-5.3&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="n"&gt;AsAIAgent&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="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HaikuBot&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="n"&gt;instructions&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;You are an upbeat assistant that writes beautifully.&amp;#34;&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&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Write a haiku about shipping 1.0.&amp;#34;&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;Hanya itu. Beberapa baris dan Anda memiliki agen AI yang berjalan di Azure Foundry. Padanannya dalam Python sama singkatnya. Tambahkan function tools, percakapan multi-turn, dan streaming seiring kemajuan Anda — permukaan API berkembang tanpa menjadi aneh.&lt;/p&gt;
&lt;h2 id="orkestrasi-multi-agen--inilah-yang-nyata"&gt;Orkestrasi multi-agen — inilah yang nyata&lt;/h2&gt;
&lt;p&gt;Agen tunggal cocok untuk demo, tapi skenario produksi biasanya membutuhkan koordinasi. Agent Framework 1.0 hadir dengan pola orkestrasi yang telah teruji langsung dari Microsoft Research dan AutoGen:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sequential&lt;/strong&gt; — agen memproses secara berurutan (penulis → reviewer → editor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent&lt;/strong&gt; — fan out ke beberapa agen secara paralel, konvergensi hasil&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handoff&lt;/strong&gt; — satu agen mendelegasikan ke agen lain berdasarkan intent&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Group chat&lt;/strong&gt; — beberapa agen berdiskusi dan berkonvergensi pada solusi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magentic-One&lt;/strong&gt; — pola multi-agen tingkat penelitian dari MSR&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Semuanya mendukung streaming, checkpointing, persetujuan human-in-the-loop, dan pause/resume. Bagian checkpointing sangat penting — alur kerja yang berjalan lama bertahan dari restart proses.&lt;/p&gt;
&lt;h2 id="fitur-yang-paling-penting"&gt;Fitur yang paling penting&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Hook Middleware.&lt;/strong&gt; Tahu pipeline middleware di ASP.NET Core? Konsep yang sama, tapi untuk eksekusi agen. Cegat setiap tahap — tambahkan keamanan konten, logging, kebijakan kepatuhan — tanpa menyentuh prompt agen.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Memori yang dapat dicolokkan.&lt;/strong&gt; Riwayat percakapan, status key-value persisten, pengambilan berbasis vektor. Pilih backend Anda: Foundry Agent Service, Mem0, Redis, Neo4j, atau buat sendiri.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agen YAML deklaratif.&lt;/strong&gt; Definisikan instruksi, alat, memori, dan topologi orkestrasi agen Anda dalam file YAML yang dikontrol versi. Muat dan jalankan dengan satu panggilan API.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dukungan A2A dan MCP.&lt;/strong&gt; MCP (Model Context Protocol) memungkinkan agen menemukan dan memanggil alat eksternal secara dinamis. A2A (Agent-to-Agent protocol) memungkinkan kolaborasi lintas runtime.&lt;/p&gt;
&lt;h2 id="fitur-preview-yang-layak-ditonton"&gt;Fitur preview yang layak ditonton&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DevUI&lt;/strong&gt; — debugger lokal berbasis browser untuk memvisualisasikan eksekusi agen, aliran pesan, dan panggilan alat secara real-time.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot SDK dan Claude Code SDK&lt;/strong&gt; — gunakan Copilot atau Claude sebagai harness agen langsung dari kode orkestrasi Anda.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Harness&lt;/strong&gt; — runtime lokal yang dapat dikustomisasi yang memberi agen akses ke shell, sistem file, dan loop pesan.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; — paket kemampuan domain yang dapat digunakan kembali.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="migrasi-dari-semantic-kernel-atau-autogen"&gt;Migrasi dari Semantic Kernel atau AutoGen&lt;/h2&gt;
&lt;p&gt;Jika Anda memiliki kode Semantic Kernel atau AutoGen yang ada, tersedia asisten migrasi khusus yang menganalisis kode Anda dan menghasilkan rencana migrasi langkah demi langkah.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 adalah tonggak produksi yang telah ditunggu oleh tim enterprise. API stabil, dukungan multi-penyedia, dan pola orkestrasi yang benar-benar bekerja pada skala besar.&lt;/p&gt;
&lt;p&gt;Framework ini &lt;a href="https://github.com/microsoft/agent-framework"&gt;sepenuhnya open source di GitHub&lt;/a&gt;. Jika Anda menunggu sinyal &amp;ldquo;aman digunakan di produksi&amp;rdquo; — inilah saatnya.&lt;/p&gt;</content:encoded></item><item><title>azd Kini Memungkinkan Anda Menjalankan dan Men-debug Agen AI Secara Lokal — Apa yang Berubah di Maret 2026</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI merilis tujuh rilis di Maret 2026. Highlight: loop jalankan-dan-debug lokal untuk agen AI, integrasi GitHub Copilot dalam pengaturan proyek, dan dukungan Container App Jobs.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Tujuh rilis dalam satu bulan. Itulah yang didorong oleh tim Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) di Maret 2026, dan fitur unggulan adalah yang sudah saya tunggu: &lt;strong&gt;loop jalankan-dan-debug lokal untuk agen AI&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id="jalankan-dan-debug-agen-ai-tanpa-deploy"&gt;Jalankan dan debug agen AI tanpa deploy&lt;/h2&gt;
&lt;p&gt;Ini yang besar. Ekstensi &lt;code&gt;azure.ai.agents&lt;/code&gt; baru menambahkan serangkaian perintah:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — memulai agen Anda secara lokal&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — mengirim pesan ke agen (lokal atau ter-deploy)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — menampilkan status dan kesehatan container&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — streaming log container secara real time&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Sebelumnya, menguji agen AI berarti deploy ke Microsoft Foundry setiap kali ada perubahan. Sekarang Anda bisa beriterasi secara lokal.&lt;/p&gt;
&lt;h2 id="github-copilot-men-scaffold-proyek-azd-anda"&gt;GitHub Copilot men-scaffold proyek azd Anda&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; kini menawarkan opsi &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo;. Agen Copilot men-scaffold konfigurasi untuk struktur proyek Anda.&lt;/p&gt;
&lt;h2 id="container-app-jobs-dan-peningkatan-deployment"&gt;Container App Jobs dan peningkatan deployment&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;: &lt;code&gt;azd&lt;/code&gt; kini men-deploy &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; melalui konfigurasi &lt;code&gt;host: containerapp&lt;/code&gt; yang ada&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Timeout deployment yang dapat dikonfigurasi&lt;/strong&gt;: Flag &lt;code&gt;--timeout&lt;/code&gt; baru pada &lt;code&gt;azd deploy&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fallback build lokal&lt;/strong&gt;: Ketika remote ACR build gagal, &lt;code&gt;azd&lt;/code&gt; otomatis beralih ke Docker/Podman lokal&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validasi preflight lokal&lt;/strong&gt;: Parameter Bicep divalidasi secara lokal sebelum deploy&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Loop debugging agen AI lokal adalah bintang rilis ini. Cek &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;catatan rilis lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps Akhirnya Memperbaiki UX Editor Markdown yang Dikeluhkan Semua Orang</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/</guid><description>Editor Markdown Azure DevOps untuk item kerja mendapatkan perbedaan yang lebih jelas antara mode pratinjau dan mode edit. Ini perubahan kecil yang memperbaiki masalah alur kerja yang benar-benar mengganggu.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda menggunakan Azure Boards, Anda mungkin pernah mengalami ini: Anda sedang membaca deskripsi item kerja, mungkin meninjau kriteria penerimaan, dan secara tidak sengaja mengklik dua kali. Boom — Anda dalam mode edit. Anda tidak ingin mengedit apa pun. Anda hanya membaca.&lt;/p&gt;
&lt;p&gt;Dan Hellem &lt;a href="https://devblogs.microsoft.com/devops/improving-the-markdown-editor-for-work-items/"&gt;mengumumkan perbaikannya&lt;/a&gt;, dan ini adalah salah satu perubahan yang terdengar kecil tetapi sebenarnya menghilangkan gesekan nyata dari alur kerja harian Anda.&lt;/p&gt;
&lt;h2 id="apa-yang-berubah"&gt;Apa yang berubah&lt;/h2&gt;
&lt;p&gt;Editor Markdown untuk bidang teks item kerja sekarang dibuka dalam &lt;strong&gt;mode pratinjau secara default&lt;/strong&gt;. Anda dapat membaca dan berinteraksi dengan konten — mengikuti tautan, meninjau pemformatan — tanpa khawatir secara tidak sengaja masuk ke mode edit.&lt;/p&gt;
&lt;p&gt;Saat Anda benar-benar ingin mengedit, Anda mengklik ikon edit di bagian atas bidang. Setelah selesai, Anda keluar kembali ke mode pratinjau secara eksplisit.&lt;/p&gt;
&lt;h2 id="mengapa-ini-lebih-penting-dari-kedengarannya"&gt;Mengapa ini lebih penting dari kedengarannya&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://developercommunity.visualstudio.com/t/Markdown-editor-for-work-item-multi-line/10935496"&gt;Thread umpan balik komunitas&lt;/a&gt; tentang ini panjang. Perilaku klik-dua-kali-untuk-edit diperkenalkan dengan editor Markdown pada Juli 2025, dan keluhan dimulai hampir seketika.&lt;/p&gt;
&lt;h2 id="status-peluncuran"&gt;Status peluncuran&lt;/h2&gt;
&lt;p&gt;Ini sudah diluncurkan ke sebagian pelanggan dan akan diperluas ke semua orang dalam dua hingga tiga minggu ke depan.&lt;/p&gt;</content:encoded></item><item><title>Bookmark Studio Menghadirkan Navigasi Berbasis Slot dan Berbagi ke Bookmark Visual Studio</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/</guid><description>Ekstensi Bookmark Studio baru dari Mads Kristensen menambahkan navigasi slot berbasis keyboard, manajer bookmark, warna, label, dan kemampuan ekspor/berbagi ke bookmark Visual Studio.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Bookmark di Visual Studio selalu&amp;hellip; cukup baik. Anda mengaturnya, menavigasi ke yang berikutnya, lupa mana yang mana.&lt;/p&gt;
&lt;p&gt;Mads Kristensen baru saja &lt;a href="https://devblogs.microsoft.com/visualstudio/bookmark-studio-evolving-bookmarks-in-visual-studio/"&gt;merilis Bookmark Studio&lt;/a&gt;, ekstensi eksperimental yang mengisi kesenjangan yang mungkin Anda temui jika menggunakan bookmark secara teratur.&lt;/p&gt;
&lt;h2 id="navigasi-berbasis-slot"&gt;Navigasi berbasis slot&lt;/h2&gt;
&lt;p&gt;Tambahan utama: bookmark sekarang dapat ditetapkan ke slot 1–9 dan langsung melompat dengan &lt;code&gt;Alt+Shift+1&lt;/code&gt; hingga &lt;code&gt;Alt+Shift+9&lt;/code&gt;. Ini mengubah bookmark dari &amp;ldquo;saya punya beberapa bookmark di suatu tempat&amp;rdquo; menjadi &amp;ldquo;Slot 3 adalah controller API saya, Slot 5 adalah lapisan layanan.&amp;rdquo;&lt;/p&gt;
&lt;h2 id="manajer-bookmark"&gt;Manajer Bookmark&lt;/h2&gt;
&lt;p&gt;Jendela alat baru menampilkan semua bookmark Anda di satu tempat dengan pemfilteran berdasarkan nama, file, lokasi, warna, atau slot.&lt;/p&gt;
&lt;h2 id="organisasi-dengan-label-warna-dan-folder"&gt;Organisasi dengan label, warna, dan folder&lt;/h2&gt;
&lt;p&gt;Bookmark secara opsional dapat memiliki label dan warna serta dikelompokkan ke dalam folder. Semua metadata disimpan per solusi.&lt;/p&gt;
&lt;h2 id="ekspor-dan-berbagi"&gt;Ekspor dan berbagi&lt;/h2&gt;
&lt;p&gt;Bookmark Studio memungkinkan Anda mengekspor bookmark sebagai teks biasa, Markdown, atau CSV:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sertakan jalur bookmark dalam deskripsi pull request&lt;/li&gt;
&lt;li&gt;Bagikan jejak investigasi dengan rekan tim&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ambil dari &lt;a href="https://marketplace.visualstudio.com/items?itemName=MadsKristensen.BookmarkStudio"&gt;Visual Studio Marketplace&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Dashboard Aspire 13.2 Kini Memiliki Telemetry API — dan Ini Mengubah Segalanya</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</guid><description>.NET Aspire 13.2 hadir dengan ekspor telemetri yang lebih cerdas, API yang dapat diprogram untuk trace dan log, dan peningkatan visualisasi GenAI. Inilah mengapa ini penting untuk alur kerja debugging Anda.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda membangun aplikasi terdistribusi dengan .NET Aspire, Anda sudah tahu bahwa dashboard adalah bagian terbaik dari seluruh pengalaman. Aspire 13.2 membuatnya jauh lebih baik.&lt;/p&gt;
&lt;h2 id="mengekspor-telemetri-dengan-cara-yang-masuk-akal"&gt;Mengekspor telemetri dengan cara yang masuk akal&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 menambahkan dialog &lt;strong&gt;Kelola log dan telemetri&lt;/strong&gt; yang tepat di mana Anda dapat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Menghapus semua telemetri&lt;/li&gt;
&lt;li&gt;Mengekspor telemetri yang dipilih ke file ZIP dalam format OTLP/JSON standar&lt;/li&gt;
&lt;li&gt;Mengimpor ulang ZIP tersebut ke dashboard Aspire mana pun nanti&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bagian terakhir adalah fitur unggulan. Reproduksi bug, ekspor telemetri, lampirkan ke item kerja, dan rekan tim Anda dapat mengimpornya ke dashboard mereka sendiri.&lt;/p&gt;
&lt;h2 id="telemetry-api-adalah-pengubah-permainan-sesungguhnya"&gt;Telemetry API adalah pengubah permainan sesungguhnya&lt;/h2&gt;
&lt;p&gt;Dashboard kini mengekspos HTTP API di bawah &lt;code&gt;/api/telemetry&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/resources&lt;/code&gt; — daftar sumber daya dengan telemetri&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/spans&lt;/code&gt; — kueri span dengan filter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/logs&lt;/code&gt; — kueri log dengan filter&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces&lt;/code&gt; — daftar trace&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ini mendukung perintah CLI &lt;code&gt;aspire agent mcp&lt;/code&gt; dan &lt;code&gt;aspire otel&lt;/code&gt; yang baru.&lt;/p&gt;
&lt;h2 id="telemetri-genai-menjadi-praktis"&gt;Telemetri GenAI menjadi praktis&lt;/h2&gt;
&lt;p&gt;VS Code Copilot chat dan Copilot CLI mendukung konfigurasi &lt;code&gt;OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt; — arahkan ke dashboard Aspire dan Anda bisa melihat agen AI Anda berpikir secara real-time melalui telemetri.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 mengubah dashboard dari &amp;ldquo;UI debugging yang bagus&amp;rdquo; menjadi &amp;ldquo;platform observabilitas yang dapat diprogram&amp;rdquo;. Kunjungi &lt;a href="https://aspire.dev"&gt;aspire.dev&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Pembaruan Maret Visual Studio Memungkinkan Kamu Membangun Agen Copilot Kustom — dan Alat find_symbol Adalah Hal Besar</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</guid><description>Pembaruan Maret 2026 Visual Studio menghadirkan agen Copilot kustom, skill agen yang dapat digunakan ulang, alat find_symbol yang sadar bahasa, dan profiling bertenaga Copilot dari Test Explorer. Inilah yang penting.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Visual Studio baru saja mendapatkan pembaruan Copilot paling signifikan hingga saat ini. Mark Downie &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/"&gt;mengumumkan rilis Maret&lt;/a&gt;, dan judul utamanya adalah agen kustom — tapi jujur saja, alat &lt;code&gt;find_symbol&lt;/code&gt; yang tersembunyi lebih jauh mungkin adalah fitur yang paling mengubah alur kerjamu.&lt;/p&gt;
&lt;p&gt;Mari saya uraikan apa yang sebenarnya ada di sini.&lt;/p&gt;
&lt;h2 id="agen-copilot-kustom-di-repo-kamu"&gt;Agen Copilot kustom di repo kamu&lt;/h2&gt;
&lt;p&gt;Ingin Copilot mengikuti standar pengkodean timmu, menjalankan pipeline build, atau mengquery dokumen internal? Sekarang kamu bisa membangun persis itu.&lt;/p&gt;
&lt;p&gt;Agen kustom didefinisikan sebagai file &lt;code&gt;.agent.md&lt;/code&gt; yang kamu letakkan di &lt;code&gt;.github/agents/&lt;/code&gt; di repositorimu. Setiap agen mendapatkan akses penuh ke kesadaran workspace, pemahaman kode, alat, model pilihanmu, dan koneksi MCP ke layanan eksternal.&lt;/p&gt;
&lt;p&gt;Ini adalah pola yang sama yang sudah didukung VS Code — dan sangat menyenangkan melihat Visual Studio menyusul.&lt;/p&gt;
&lt;h2 id="skill-agen-paket-instruksi-yang-dapat-digunakan-ulang"&gt;Skill agen: paket instruksi yang dapat digunakan ulang&lt;/h2&gt;
&lt;p&gt;Skill secara otomatis diambil dari &lt;code&gt;.github/skills/&lt;/code&gt; di repositorimu atau &lt;code&gt;~/.copilot/skills/&lt;/code&gt; di profilmu.&lt;/p&gt;
&lt;h2 id="find_symbol-navigasi-sadar-bahasa-untuk-agen"&gt;find_symbol: navigasi sadar bahasa untuk agen&lt;/h2&gt;
&lt;p&gt;Di sinilah hal-hal menjadi sangat menarik. Alat &lt;code&gt;find_symbol&lt;/code&gt; baru memberikan mode agen Copilot navigasi simbol yang benar-benar didukung oleh layanan bahasa. Alih-alih mencari kode sebagai teks, agen dapat:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Menemukan semua referensi ke simbol di seluruh proyekmu&lt;/li&gt;
&lt;li&gt;Mengakses informasi tipe, deklarasi, dan metadata cakupan&lt;/li&gt;
&lt;li&gt;Menavigasi situs panggilan dengan kesadaran bahasa penuh&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Artinya dalam praktik: ketika kamu meminta Copilot untuk refaktor metode atau memperbarui tanda tangan parameter di seluruh situs panggilan, ia benar-benar dapat melihat struktur kodemu.&lt;/p&gt;
&lt;h2 id="profil-tes-dengan-copilot"&gt;Profil tes dengan Copilot&lt;/h2&gt;
&lt;p&gt;Sekarang ada perintah &lt;strong&gt;Profile with Copilot&lt;/strong&gt; di menu konteks Test Explorer. Pilih tes, klik profil, dan Profiling Agent secara otomatis menjalankannya dan menganalisis performa.&lt;/p&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Agen kustom dan skill adalah judul utama, tapi &lt;code&gt;find_symbol&lt;/code&gt; adalah pahlawan diam-diam — ini secara fundamental mengubah seberapa akurat Copilot bisa dalam merefaktor kode .NET. Unduh &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;Visual Studio 2026 Insiders&lt;/a&gt; untuk mencoba semuanya.&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: Yang Sebenarnya Perlu Diperhatikan Pengembang .NET</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft menjatuhkan tembok pengumuman Kubernetes di KubeCon Europe 2026. Inilah versi tersaringnya — hanya pembaruan AKS dan cloud-native yang penting jika Anda mengekspedisi aplikasi .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft baru saja menerbitkan &lt;a href="https://opensource.microsoft.com/blog/2026/03/24/whats-new-with-microsoft-in-open-source-and-kubernetes-at-kubecon-cloudnativecon-europe-2026/"&gt;rekap lengkap KubeCon Europe 2026 mereka&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="mtls-tanpa-pajak-service-mesh"&gt;mTLS tanpa pajak service mesh&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; memberi Anda mutual TLS, otorisasi berbasis aplikasi, dan telemetri traffic — tanpa menerapkan mesh sidecar berat. API ASP.NET Core yang berkomunikasi dengan background worker — semua terenkripsi di tingkat jaringan, tanpa perubahan kode aplikasi.&lt;/p&gt;
&lt;h2 id="observabilitas-gpu"&gt;Observabilitas GPU&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS kini menampilkan metrik GPU secara native&lt;/a&gt; ke Prometheus dan Grafana terkelola. Tanpa exporter kustom.&lt;/p&gt;
&lt;h2 id="jaringan-lintas-kluster"&gt;Jaringan lintas kluster&lt;/h2&gt;
&lt;p&gt;Azure Kubernetes Fleet Manager kini mengirimkan &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;jaringan lintas kluster&lt;/a&gt; — konektivitas terpadu, registri layanan global.&lt;/p&gt;
&lt;h2 id="upgrade-yang-lebih-aman"&gt;Upgrade yang lebih aman&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Upgrade agent pool biru-hijau&lt;/strong&gt; membuat node pool paralel. &lt;strong&gt;Rollback agent pool&lt;/strong&gt; memungkinkan Anda kembali ke versi sebelumnya.&lt;/p&gt;
&lt;h2 id="dari-mana-memulai"&gt;Dari mana memulai&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observabilitas dulu&lt;/strong&gt; — aktifkan metrik GPU dan log aliran jaringan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Coba upgrade biru-hijau&lt;/strong&gt; — uji alur kerja rollback&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pilot jaringan berbasis identitas&lt;/strong&gt; — aktifkan mTLS untuk satu jalur layanan&lt;/li&gt;
&lt;/ol&gt;</content:encoded></item><item><title>SQL MCP Server, Copilot di SSMS, dan Database Hub dengan AI Agent: Yang Benar-Benar Penting dari SQLCon 2026</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</link><pubDate>Sat, 28 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>Microsoft merilis serangkaian pengumuman database di SQLCon 2026. Inilah yang benar-benar penting jika Anda membangun aplikasi bertenaga AI di Azure SQL.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft baru saja meluncurkan &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;SQLCon 2026 bersamaan dengan FabCon di Atlanta&lt;/a&gt;. Saya akan melewati slide harga enterprise dan fokus pada hal-hal yang penting bagi developer yang membangun dengan Azure SQL dan AI.&lt;/p&gt;
&lt;h2 id="sql-mcp-server-kini-dalam-pratinjau-publik"&gt;SQL MCP Server kini dalam pratinjau publik&lt;/h2&gt;
&lt;p&gt;Ini adalah headline bagi saya. Azure SQL Database Hyperscale kini memiliki &lt;strong&gt;SQL MCP Server&lt;/strong&gt; dalam pratinjau publik yang memungkinkan Anda menghubungkan data SQL dengan aman ke agen AI dan Copilot menggunakan &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Bagi developer .NET yang membangun agen AI dengan Semantic Kernel atau Microsoft Agent Framework, ini membuka jalur integrasi yang bersih. Agen Anda perlu memeriksa inventaris? Mencari catatan pelanggan? Memvalidasi pesanan? MCP memberinya cara terstruktur untuk melakukan itu tanpa menulis kode pengambilan data khusus.&lt;/p&gt;
&lt;h2 id="github-copilot-di-ssms-22-kini-ga"&gt;GitHub Copilot di SSMS 22 Kini GA&lt;/h2&gt;
&lt;p&gt;Jika Anda menghabiskan waktu di SQL Server Management Studio, GitHub Copilot kini tersedia secara umum di SSMS 22. Pengalaman Copilot yang sama yang sudah Anda gunakan di VS Code dan Visual Studio, tapi untuk T-SQL.&lt;/p&gt;
&lt;p&gt;Nilai praktisnya langsung: bantuan berbasis obrolan untuk menulis query, merestrukturisasi stored procedure, menyelesaikan masalah performa, dan tugas admin.&lt;/p&gt;
&lt;h2 id="indeks-vektor-mendapat-peningkatan-serius"&gt;Indeks vektor mendapat peningkatan serius&lt;/h2&gt;
&lt;p&gt;Azure SQL Database kini memiliki indeks vektor yang lebih cepat dan lebih mampu dengan dukungan insert, update, dan delete penuh. Artinya data vektor Anda tetap terkini secara real time — tidak perlu pengindeksan ulang batch.&lt;/p&gt;
&lt;p&gt;Yang baru:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Kuantisasi&lt;/strong&gt; untuk ukuran indeks lebih kecil tanpa kehilangan banyak akurasi&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pemfilteran iteratif&lt;/strong&gt; untuk hasil yang lebih tepat&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Integrasi pengoptimal query yang lebih ketat&lt;/strong&gt; untuk performa yang dapat diprediksi&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jika Anda melakukan RAG dengan Azure SQL sebagai penyimpan vektor, peningkatan ini berguna secara langsung.&lt;/p&gt;
&lt;h2 id="database-hub-di-fabric-manajemen-agentik"&gt;Database Hub di Fabric: manajemen agentik&lt;/h2&gt;
&lt;p&gt;Microsoft mengumumkan &lt;strong&gt;Database Hub di Microsoft Fabric&lt;/strong&gt; (akses awal), yang memberikan panel tunggal di seluruh Azure SQL, Cosmos DB, PostgreSQL, MySQL, dan SQL Server via Arc.&lt;/p&gt;
&lt;p&gt;Agen AI terus-menerus memantau estate database Anda, menampilkan apa yang berubah, menjelaskan mengapa itu penting, dan menyarankan langkah selanjutnya.&lt;/p&gt;
&lt;h2 id="artinya-bagi-developer-net"&gt;Artinya bagi developer .NET&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Coba SQL MCP Server&lt;/strong&gt; jika Anda membangun agen AI — cara paling bersih memberi agen akses database.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Aktifkan Copilot di SSMS&lt;/strong&gt; jika belum — kemenangan produktivitas gratis.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tinjau indeks vektor&lt;/strong&gt; jika Anda melakukan RAG dan menjalankan penyimpan vektor terpisah.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lihat &lt;a href="https://www.microsoft.com/en-us/sql-server/blog/2026/03/18/advancing-agentic-ai-with-microsoft-databases-across-a-unified-data-estate/"&gt;pengumuman lengkap dari Shireesh Thota&lt;/a&gt; dan &lt;a href="https://aka.ms/database-hub"&gt;daftar untuk akses awal Database Hub&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps MCP Server Hadir di Microsoft Foundry: Apa Artinya untuk Agen AI Anda</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>Azure DevOps MCP Server kini tersedia di Microsoft Foundry. Hubungkan agen AI Anda langsung ke alur kerja DevOps — item kerja, repo, pipeline — dengan beberapa klik.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP (Model Context Protocol) sedang naik daun. Jika Anda mengikuti ekosistem agen AI, Anda mungkin sudah melihat server MCP bermunculan di mana-mana.&lt;/p&gt;
&lt;p&gt;Kini &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;Azure DevOps MCP Server tersedia di Microsoft Foundry&lt;/a&gt;, dan ini adalah salah satu integrasi yang membuat Anda berpikir tentang kemungkinan praktisnya.&lt;/p&gt;
&lt;h2 id="yang-sebenarnya-terjadi"&gt;Yang sebenarnya terjadi&lt;/h2&gt;
&lt;p&gt;Microsoft sudah merilis Azure DevOps MCP Server sebagai &lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;pratinjau publik&lt;/a&gt;. Yang baru adalah integrasi Foundry. Anda sekarang dapat menambahkan Azure DevOps MCP Server ke agen Foundry Anda langsung dari katalog alat.&lt;/p&gt;
&lt;h2 id="cara-menyiapkannya"&gt;Cara menyiapkannya&lt;/h2&gt;
&lt;p&gt;Penyiapannya cukup mudah:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Di agen Foundry Anda, buka &lt;strong&gt;Tambah Alat&lt;/strong&gt; &amp;gt; &lt;strong&gt;Katalog&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Cari &amp;ldquo;Azure DevOps&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Pilih Azure DevOps MCP Server (pratinjau) dan klik &lt;strong&gt;Buat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Masukkan nama organisasi Anda dan hubungkan&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="mengontrol-apa-yang-dapat-diakses-agen-anda"&gt;Mengontrol apa yang dapat diakses agen Anda&lt;/h2&gt;
&lt;p&gt;Anda dapat menentukan alat mana yang tersedia untuk agen Anda. Prinsip hak akses minimum, diterapkan ke agen AI Anda.&lt;/p&gt;
&lt;h2 id="mengapa-ini-menarik-untuk-tim-net"&gt;Mengapa ini menarik untuk tim .NET&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Asisten perencanaan sprint&lt;/strong&gt; — agen yang dapat menarik item kerja dan menyarankan kapasitas sprint&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bot code review&lt;/strong&gt; — agen yang memahami konteks PR&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Respons insiden&lt;/strong&gt; — agen yang membuat item kerja dan mengkorelasikan bug&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Orientasi developer&lt;/strong&gt; — jawaban nyata berdasarkan data proyek aktual&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;Lihat &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;pengumuman lengkap&lt;/a&gt; untuk detail lebih lanjut.&lt;/p&gt;</content:encoded></item><item><title>Dari Laptop ke Produksi: Deploy Agen AI ke Microsoft Foundry dengan Dua Perintah</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>Azure Developer CLI kini memiliki perintah 'azd ai agent' yang membawa agen AI Anda dari pengembangan lokal ke endpoint Foundry langsung dalam hitungan menit.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Anda tahu kesenjangan antara &amp;ldquo;berfungsi di mesin saya&amp;rdquo; dan &amp;ldquo;sudah di-deploy dan melayani traffic&amp;rdquo;? Untuk agen AI, kesenjangan itu sangat lebar.&lt;/p&gt;
&lt;p&gt;Azure Developer CLI baru saja menjadikan ini &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;urusan dua perintah&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="alur-kerja-azd-ai-agent-baru"&gt;Alur kerja &lt;code&gt;azd ai agent&lt;/code&gt; baru&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 ai agent init
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd up
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Itu saja. &lt;code&gt;azd ai agent init&lt;/code&gt; membuat scaffolding infrastruktur-sebagai-kode di repo Anda, dan &lt;code&gt;azd up&lt;/code&gt; menyediakan semua hal di Azure dan menerbitkan agen Anda.&lt;/p&gt;
&lt;h2 id="yang-terjadi-di-balik-layar"&gt;Yang terjadi di balik layar&lt;/h2&gt;
&lt;p&gt;Perintah &lt;code&gt;init&lt;/code&gt; menghasilkan template Bicep yang nyata dan dapat diperiksa di repo Anda — Foundry Resource, Foundry Project, konfigurasi deployment model, managed identity dengan RBAC.&lt;/p&gt;
&lt;h2 id="dev-inner-loop"&gt;Dev inner loop&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 ai agent run &lt;span class="c1"&gt;# jalankan agen secara lokal&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent invoke &lt;span class="c1"&gt;# kirim prompt uji&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;azd ai agent monitor --follow &lt;span class="c1"&gt;# stream log real-time&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="set-perintah-lengkap"&gt;Set perintah lengkap&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Perintah&lt;/th&gt;
&lt;th&gt;Yang dilakukan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent init&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Scaffold proyek agen Foundry dengan IaC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd up&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Provisioning sumber daya dan deploy agen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Kirim prompt ke agen remote atau lokal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent run&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Jalankan agen secara lokal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stream log real-time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd down&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Bersihkan semua sumber daya Azure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Lihat &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;panduan lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service Sudah GA: Yang Benar-benar Penting untuk Pengembang Agen .NET</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Foundry Agent Service Microsoft baru saja mencapai GA dengan jaringan privat, Voice Live, evaluasi produksi, dan runtime multi-model terbuka.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Mari jujur — membangun prototipe agen AI adalah bagian yang mudah. Bagian sulitnya adalah semua yang datang setelah itu.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service baru saja GA&lt;/a&gt;, dan rilis ini sangat fokus pada kesenjangan &amp;ldquo;semua yang datang setelah itu&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="dibangun-di-atas-responses-api"&gt;Dibangun di atas Responses API&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service generasi berikutnya dibangun di atas OpenAI Responses API. Arsitekturnya sengaja terbuka — Anda tidak terkunci pada satu penyedia model.&lt;/p&gt;
&lt;h2 id="jaringan-privat-hambatan-enterprise-dihilangkan"&gt;Jaringan privat: hambatan enterprise dihilangkan&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tanpa egress publik&lt;/strong&gt; — traffic agen tidak pernah menyentuh internet publik&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Injeksi container/subnet&lt;/strong&gt; ke jaringan Anda&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Konektivitas alat disertakan&lt;/strong&gt; — server MCP, Azure AI Search melalui jalur privat&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="autentikasi-mcp"&gt;Autentikasi MCP&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metode auth&lt;/th&gt;
&lt;th&gt;Kapan digunakan&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Berbasis kunci&lt;/td&gt;
&lt;td&gt;Akses bersama sederhana&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identitas Agen Entra&lt;/td&gt;
&lt;td&gt;Service-to-service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Identitas Terkelola Entra&lt;/td&gt;
&lt;td&gt;Isolasi per-proyek&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Passthrough identitas OAuth&lt;/td&gt;
&lt;td&gt;Akses yang didelegasikan pengguna&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="voice-live"&gt;Voice Live&lt;/h2&gt;
&lt;p&gt;Voice Live menggabungkan STT, LLM, dan TTS menjadi satu API terkelola.&lt;/p&gt;
&lt;h2 id="evaluasi"&gt;Evaluasi&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Evaluator siap pakai&lt;/strong&gt; — koherensi, relevansi, keterpancaran&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluator kustom&lt;/strong&gt; — logika bisnis Anda sendiri&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluasi berkelanjutan&lt;/strong&gt; — pengambilan sampel traffic produksi langsung&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Lihat &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;panduan quickstart&lt;/a&gt; dan &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;pengumuman GA&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>Respons Latar Belakang di Microsoft Agent Framework: Tidak Ada Lagi Kecemasan Timeout</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework kini memungkinkan Anda membongkar tugas AI yang berjalan lama dengan token kelanjutan. Begini cara respons latar belakang bekerja dan mengapa itu penting untuk agen .NET Anda.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Jika Anda pernah membangun sesuatu dengan model penalaran seperti o3 atau GPT-5.2, Anda tahu rasa sakitnya. Agen Anda mulai memproses tugas yang kompleks, klien menunggu, dan di suatu titik koneksi habis waktu.&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework baru saja merilis &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;respons latar belakang&lt;/a&gt; — dan sejujurnya, ini adalah salah satu fitur yang seharusnya ada sejak hari pertama.&lt;/p&gt;
&lt;h2 id="cara-token-kelanjutan-bekerja"&gt;Cara token kelanjutan bekerja&lt;/h2&gt;
&lt;p&gt;Alih-alih memblokir, Anda memulai tugas agen dan mendapatkan kembali &lt;strong&gt;token kelanjutan&lt;/strong&gt;. Anggap seperti klaim tiket di bengkel reparasi:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Kirim permintaan Anda dengan &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Jika agen mendukung pemrosesan latar belakang, Anda mendapat token kelanjutan&lt;/li&gt;
&lt;li&gt;Poll sesuai jadwal Anda hingga token kembali &lt;code&gt;null&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;AgentRunOptions&lt;/span&gt; &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;AllowBackgroundResponses&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&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&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="n"&gt;AgentSession&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;CreateSessionAsync&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="n"&gt;AgentResponse&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&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="s"&gt;&amp;#34;Write a detailed market analysis for the Q4 product launch.&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&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;while&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="kc"&gt;null&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&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="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Delay&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TimeSpan&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromSeconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2&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="n"&gt;options&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ContinuationToken&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="n"&gt;response&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;RunAsync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;options&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&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="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WriteLine&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Text&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;h2 id="kapan-sebenarnya-menggunakan-ini"&gt;Kapan sebenarnya menggunakan ini&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tugas penalaran kompleks&lt;/strong&gt; — analisis multi-langkah, penelitian mendalam&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pembuatan konten panjang&lt;/strong&gt; — laporan terperinci, dokumen multi-bagian&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Jaringan tidak dapat diandalkan&lt;/strong&gt; — klien mobile, deployment edge&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pola UX asinkron&lt;/strong&gt; — kirim tugas, lakukan hal lain, kembali untuk hasil&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lihat &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;dokumentasi lengkap&lt;/a&gt;.&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.112: Apa yang Benar-benar Perlu Diperhatikan Developer .NET</title><link>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</link><pubDate>Thu, 26 Mar 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</guid><description>VS Code 1.112 baru saja rilis dan penuh dengan peningkatan agen, debugger browser terintegrasi, sandboxing MCP, dan dukungan monorepo. Inilah yang sebenarnya penting jika kamu membangun dengan .NET.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Postingan ini diterjemahkan secara otomatis. Untuk versi aslinya, &lt;a href="https://thedotnetblog.com/id/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/"&gt;klik di sini&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.112 baru saja mendarat, dan jujur saja? Yang satu ini terasa berbeda jika kamu menghabiskan hari-harimu di dunia .NET. Ada banyak hal di &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;catatan rilis resmi&lt;/a&gt;, tapi biarkan aku menghemat scrolling dan fokus pada apa yang sebenarnya penting bagi kita.&lt;/p&gt;
&lt;h2 id="copilot-cli-menjadi-jauh-lebih-berguna"&gt;Copilot CLI menjadi jauh lebih berguna&lt;/h2&gt;
&lt;p&gt;Tema besar rilis ini adalah &lt;strong&gt;otonomi agen&lt;/strong&gt; — memberi Copilot lebih banyak ruang untuk bekerja tanpa kamu mengawasi setiap langkah.&lt;/p&gt;
&lt;h3 id="steering-pesan-dan-antrian"&gt;Steering pesan dan antrian&lt;/h3&gt;
&lt;p&gt;Kamu tahu momen saat Copilot CLI sedang di tengah-tengah tugas dan kamu menyadari lupa menyebutkan sesuatu? Sebelumnya, kamu harus menunggu. Sekarang kamu bisa mengirim pesan saat permintaan masih berjalan — baik untuk mengarahkan respons saat ini atau mengantri instruksi tindak lanjut.&lt;/p&gt;
&lt;h3 id="tingkat-izin"&gt;Tingkat izin&lt;/h3&gt;
&lt;p&gt;Ini yang paling bikin saya antusias. Sesi Copilot CLI sekarang mendukung tiga tingkat izin:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default Permissions&lt;/strong&gt; — alur biasa di mana alat meminta konfirmasi sebelum berjalan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass Approvals&lt;/strong&gt; — menyetujui segalanya secara otomatis dan mencoba ulang saat kesalahan&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — berjalan sepenuhnya otonom: menyetujui alat, menjawab pertanyaannya sendiri, dan terus berjalan sampai tugas selesai&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Kamu bisa mengaktifkan Autopilot dengan pengaturan &lt;code&gt;chat.autopilot.enabled&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="debug-aplikasi-web-tanpa-meninggalkan-vs-code"&gt;Debug aplikasi web tanpa meninggalkan VS Code&lt;/h2&gt;
&lt;p&gt;Browser terintegrasi sekarang mendukung &lt;strong&gt;debugging penuh&lt;/strong&gt;. Kamu bisa menetapkan breakpoint, melangkah melalui kode, dan memeriksa variabel — semua di dalam VS Code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&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="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;editor-browser&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="nt"&gt;&amp;#34;request&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;launch&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="nt"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Debug Blazor App&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="nt"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;https://localhost:5001&amp;#34;&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Untuk developer Blazor, ini adalah perubahan besar.&lt;/p&gt;
&lt;h2 id="sandboxing-server-mcp"&gt;Sandboxing server MCP&lt;/h2&gt;
&lt;p&gt;Jika kamu menggunakan server MCP, sekarang kamu bisa mem-sandbox-nya:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&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="nt"&gt;&amp;#34;servers&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&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="nt"&gt;&amp;#34;my-azure-tools&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&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="nt"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;node&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="nt"&gt;&amp;#34;args&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./mcp-server.js&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="nt"&gt;&amp;#34;sandboxEnabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="penemuan-kustomisasi-monorepo"&gt;Penemuan kustomisasi monorepo&lt;/h2&gt;
&lt;p&gt;Jika kamu bekerja di monorepo, dengan pengaturan &lt;code&gt;chat.useCustomizationsInParentRepositories&lt;/code&gt;, VS Code berjalan naik ke root &lt;code&gt;.git&lt;/code&gt; dan menemukan segalanya.&lt;/p&gt;
&lt;h2 id="troubleshoot-untuk-debugging-agen"&gt;/troubleshoot untuk debugging agen&lt;/h2&gt;
&lt;p&gt;Pernah menyiapkan instruksi atau skill kustom dan bertanya-tanya mengapa tidak terpilih? Aktifkan skill &lt;code&gt;/troubleshoot&lt;/code&gt; baru dengan:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&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="nt"&gt;&amp;#34;github.copilot.chat.agentDebugLog.enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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="nt"&gt;&amp;#34;github.copilot.chat.agentDebugLog.fileLogging.enabled&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="kesimpulan"&gt;Kesimpulan&lt;/h2&gt;
&lt;p&gt;VS Code 1.112 jelas mendorong keras pengalaman agen — lebih banyak otonomi, debugging yang lebih baik, keamanan yang lebih ketat. &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;Unduh VS Code 1.112&lt;/a&gt; atau perbarui dari dalam VS Code melalui &lt;strong&gt;Help &amp;gt; Check for Updates&lt;/strong&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>