<?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/hi/posts/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>hi</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/hi/posts/index.xml" rel="self" type="application/rss+xml"/><item><title>.NET 10 Ubuntu 26.04 LTS के साथ आया — क्या नया है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/</guid><description>Ubuntu 26.04 LTS (Resolute Raccoon) .NET 10 को फर्स्ट-क्लास टूलचेन के रूप में लेकर आया। Native AOT, Chiseled कंटेनर, Linux 7.0।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/dotnet-ubuntu-2604-resolute-raccoon-net10/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;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; आज लॉन्च हुआ, और हर Ubuntu LTS की तरह, यह नवीनतम .NET LTS — इस मामले में &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="net-10-द-commands-म-install-कर"&gt;.NET 10 दो commands में install करें&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="containers--noble-क--resolute-म-बदल"&gt;Containers: &lt;code&gt;-noble&lt;/code&gt; को &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-3ms-startup-14mb-binary"&gt;Native AOT: 3ms startup, 1.4MB binary&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;# 1.4MB native binary, 3ms startup&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Cloud-native workloads के लिए जहाँ cold-start time मायने रखता है — Functions, containers, serverless — यह एक असली game changer है।&lt;/p&gt;
&lt;h2 id="net-8-य-9-चहए"&gt;.NET 8 या 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;पूरी पोस्ट&lt;/a&gt; में cgroup v2, post-quantum cryptography और Linux 7.0 के बारे में अधिक जानकारी है।&lt;/p&gt;</content:encoded></item><item><title>Agent Framework में CodeAct: अपने एजेंट की लेटेंसी को आधा कैसे करें</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/</guid><description>CodeAct बहु-चरण टूल चेन को एक सैंडबॉक्स्ड कोड ब्लॉक में संकुचित करता है — लेटेंसी 52% और टोकन उपयोग 64% कम करता है।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल संस्करण के लिए &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/codeact-agent-framework-hyperlight-50-percent-faster/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;हर एजेंट प्रोजेक्ट में एक ऐसा पल आता है जब आप ट्रेस देखते हैं और सोचते हैं: &amp;ldquo;इसमें इतना समय क्यों लग रहा है?&amp;rdquo; मॉडल ठीक है। टूल काम कर रहे हैं। लेकिन एक ऐसे परिणाम के लिए सात राउंड ट्रिप हो रहे हैं जो एक बार में की जा सकती थी।&lt;/p&gt;
&lt;p&gt;यही वह समस्या है जिसे CodeAct हल करता है — और &lt;a href="https://devblogs.microsoft.com/agent-framework/codeact-with-hyperlight/"&gt;Agent Framework टीम ने नए &lt;code&gt;agent-framework-hyperlight&lt;/code&gt; पैकेज के माध्यम से अल्फा सपोर्ट जारी किया है&lt;/a&gt;।&lt;/p&gt;
&lt;h2 id="codeact-कय-ह"&gt;CodeAct क्या है?&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://arxiv.org/abs/2402.01030"&gt;CodeAct पैटर्न&lt;/a&gt; सुंदर रूप से सरल है: मॉडल को एक-एक करके टूल कॉल करने के बजाय, उसे एक &lt;code&gt;execute_code&lt;/code&gt; टूल दें और पूरी योजना को एक छोटे Python प्रोग्राम के रूप में व्यक्त करने दें।&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;तरीका&lt;/th&gt;
&lt;th&gt;समय&lt;/th&gt;
&lt;th&gt;टोकन&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;पारंपरिक&lt;/td&gt;
&lt;td&gt;27.81s&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.23s&lt;/td&gt;
&lt;td&gt;2,489&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;सुधार&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="सरकष-hyperlight-मइकर-vm"&gt;सुरक्षा: Hyperlight माइक्रो-VM&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;agent-framework-hyperlight&lt;/code&gt; पैकेज &lt;a href="https://github.com/hyperlight-dev/hyperlight"&gt;Hyperlight&lt;/a&gt; माइक्रो-VM का उपयोग करता है। प्रत्येक &lt;code&gt;execute_code&lt;/code&gt; कॉल को अपना नया माइक्रो-VM मिलता है। स्टार्टअप मिलीसेकंड में होता है। आइसोलेशन मूल रूप से मुफ्त है।&lt;/p&gt;
&lt;p&gt;आपके टूल होस्ट पर चलते रहते हैं। मॉडल द्वारा जेनरेट किया गया कोड सैंडबॉक्स में चलता है। यह सही विभाजन है।&lt;/p&gt;
&lt;h2 id="नयनतम-सटअप"&gt;न्यूनतम सेटअप&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="कब-codeact-उपयग-कर"&gt;कब CodeAct उपयोग करें&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CodeAct का उपयोग करें जब:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;कार्य में कई छोटी टूल कॉल हों (लुकअप, जॉइन, गणना)&lt;/li&gt;
&lt;li&gt;लेटेंसी और टोकन लागत महत्वपूर्ण हो&lt;/li&gt;
&lt;li&gt;मॉडल-जेनरेटेड कोड के लिए मजबूत आइसोलेशन चाहिए&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;पारंपरिक टूल-कॉलिंग रखें जब:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;एजेंट प्रति टर्न केवल एक-दो टूल कॉल करता हो&lt;/li&gt;
&lt;li&gt;प्रत्येक कॉल में अलग-अलग अनुमोदन की जरूरत हो&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="अभ-आजमए"&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;pip install agent-framework-hyperlight --pre
&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/agent-framework/codeact-with-hyperlight/"&gt;Agent Framework ब्लॉग की पूरी पोस्ट&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server अब .mcpb है — बिना किसी Runtime के इंस्टॉल करें</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/</guid><description>Azure MCP Server अब MCP Bundle (.mcpb) के रूप में उपलब्ध है — डाउनलोड करें, Claude Desktop में ड्रैग करें और हो गया। Node.js, Python या .NET की जरूरत नहीं।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-mcp-server-mcpb-no-runtime-install/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;क्या आप जानते हैं MCP सर्वर सेटअप में क्या परेशान करता था? एक runtime की जरूरत थी। npm version के लिए Node.js, pip/uvx के लिए Python, dotnet variant के लिए .NET SDK।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;Azure MCP Server ने अभी यह बदल दिया&lt;/a&gt;। यह अब &lt;code&gt;.mcpb&lt;/code&gt; — एक MCP Bundle — के रूप में उपलब्ध है और सेटअप drag-and-drop है।&lt;/p&gt;
&lt;h2 id="mcp-bundle-कय-ह"&gt;MCP Bundle क्या है?&lt;/h2&gt;
&lt;p&gt;इसे VS Code extension (&lt;code&gt;.vsix&lt;/code&gt;) या browser extension (&lt;code&gt;.crx&lt;/code&gt;) की तरह सोचें, लेकिन MCP servers के लिए। एक &lt;code&gt;.mcpb&lt;/code&gt; फाइल एक self-contained ZIP archive है जिसमें server binary और सभी dependencies शामिल हैं।&lt;/p&gt;
&lt;h2 id="कस-इसटल-कर"&gt;कैसे इंस्टॉल करें&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;1. अपने प्लेटफॉर्म के लिए bundle डाउनलोड करें&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/microsoft/mcp/releases?q=Azure.Mcp.Server"&gt;GitHub Releases page&lt;/a&gt; पर जाएं और अपने OS और architecture के लिए &lt;code&gt;.mcpb&lt;/code&gt; फाइल डाउनलोड करें।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. Claude Desktop में इंस्टॉल करें&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;सबसे आसान तरीका: Extensions settings page (&lt;code&gt;☰ → File → Settings → Extensions&lt;/code&gt;) खुलने पर &lt;code&gt;.mcpb&lt;/code&gt; फाइल को Claude Desktop window में drag और drop करें। Server details review करें, Install पर क्लिक करें, confirm करें।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Azure में authenticate करें&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;बस इतना। Azure MCP Server आपके मौजूदा Azure credentials का उपयोग करता है।&lt;/p&gt;
&lt;h2 id="कय-कर-सकत-ह"&gt;क्या कर सकते हैं&lt;/h2&gt;
&lt;p&gt;अपने AI client से सीधे 100+ Azure service tools तक पहुंच:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Cosmos DB, Storage, Key Vault, App Service, Foundry query और manage करें&lt;/li&gt;
&lt;li&gt;किसी भी task के लिए &lt;code&gt;az&lt;/code&gt; CLI commands generate करें&lt;/li&gt;
&lt;li&gt;Bicep और Terraform templates बनाएं&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="शरआत-करन-क-लए"&gt;शुरुआत करने के लिए&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Download&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;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-mcp-server-mcpb-support/"&gt;पूरी पोस्ट&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>GPT-5.5 आ गया Azure Foundry में — .NET डेवलपर्स को क्या जानना चाहिए</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/</guid><description>GPT-5.5 Microsoft Foundry में सभी के लिए उपलब्ध है। GPT-5 से 5.5 तक की प्रगति, वास्तव में क्या बेहतर हुआ और आज अपने एजेंट में इसका उपयोग कैसे शुरू करें।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/gpt-55-foundry-ga-what-dotnet-developers-need-to-know/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Microsoft ने अभी घोषणा की है कि &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 Microsoft Foundry में उपलब्ध है&lt;/a&gt;। अगर आप Azure पर एजेंट बना रहे हैं, यह वह अपडेट है जिसका आप इंतजार कर रहे थे।&lt;/p&gt;
&lt;h2 id="gpt-5-क-परगत"&gt;GPT-5 की प्रगति&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-5&lt;/strong&gt;: रीजनिंग और गति को एक सिस्टम में एकीकृत किया&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.4&lt;/strong&gt;: मजबूत मल्टी-स्टेप रीजनिंग, एंटरप्राइज के लिए एजेंटिक क्षमताएं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-5.5&lt;/strong&gt;: गहरा लॉन्ग-कॉन्टेक्स्ट रीजनिंग, अधिक विश्वसनीय एजेंटिक एक्सीक्यूशन, बेहतर टोकन दक्षता&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="वसतव-म-कय-बदल"&gt;वास्तव में क्या बदला&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;बेहतर एजेंटिक कोडिंग&lt;/strong&gt;: GPT-5.5 बड़े कोडबेस में कॉन्टेक्स्ट बनाए रखता है, आर्किटेक्चरल विफलताओं का निदान करता है और टेस्ट आवश्यकताओं का अनुमान लगाता है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;टोकन दक्षता&lt;/strong&gt;: कम टोकन और कम रिट्राई के साथ उच्च गुणवत्ता के आउटपुट। प्रोडक्शन में सीधे कम लागत और लेटेंसी।&lt;/p&gt;
&lt;h2 id="मलय-नरधरण"&gt;मूल्य निर्धारण&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;मॉडल&lt;/th&gt;
&lt;th&gt;इनपुट ($/M tokens)&lt;/th&gt;
&lt;th&gt;कैश्ड इनपुट&lt;/th&gt;
&lt;th&gt;आउटपुट ($/M tokens)&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="foundry-कय-मयन-रखत-ह"&gt;Foundry क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service आपको YAML में एजेंट परिभाषित करने या Microsoft Agent Framework, GitHub Copilot SDK, LangGraph, या OpenAI Agents SDK के साथ जोड़ने देता है — और उन्हें स्थायी फाइलसिस्टम, Microsoft Entra आइडेंटिटी और स्केल-टू-जीरो मूल्य निर्धारण के साथ एजेंट के रूप में चलाता है।&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;आप एक सहायक हैं।&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;मेराएजेंट&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;&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;पूरी घोषणा&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.118: Copilot CLI को सेशन नाम, मॉडल बैज और TypeScript 7.0 Nightly ऑप्ट-इन मिला</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/</guid><description>Visual Studio Code 1.118 Copilot CLI सुधारों पर केंद्रित रिलीज़ है — सेशन नामकरण, मॉडल बैज, ऑटो मॉडल सिलेक्शन और TypeScript 7.0 Nightly ऑप्ट-इन।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल संस्करण के लिए &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/vscode-1-118-copilot-cli-session-names-model-badge/"&gt;यहाँ क्लिक करें&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; एक छोटा, केंद्रित रिलीज़ है — मुख्यतः Copilot CLI सुधार।&lt;/p&gt;
&lt;h2 id="copilot-cli-सशन-क-असल-नम-मलत-ह"&gt;Copilot CLI: सेशन को असली नाम मिलते हैं&lt;/h2&gt;
&lt;p&gt;Copilot CLI SDK के सेशन टाइटल APIs अब सेशन नामों के स्रोत के रूप में उपयोग होते हैं। ऑटो-जेनरेटेड लेबल की बजाय SDK का असली नाम दिखता है।&lt;/p&gt;
&lt;h2 id="कबरड-शरटकट-स-तज-सशन-सवचग"&gt;कीबोर्ड शॉर्टकट से तेज़ सेशन स्विचिंग&lt;/h2&gt;
&lt;p&gt;Agents ऐप में अब &lt;code&gt;Ctrl+1&lt;/code&gt;, &lt;code&gt;Ctrl+2&lt;/code&gt; आदि से सेशन जल्दी बदले जा सकते हैं।&lt;/p&gt;
&lt;h2 id="चट-म-मडल-बज"&gt;चैट में मॉडल बैज&lt;/h2&gt;
&lt;p&gt;Copilot CLI की चैट पैनल में प्रतिक्रियाओं पर अब मॉडल बैज दिखता है।&lt;/p&gt;
&lt;h2 id="copilot-cli-म-ऑट-मडल-सलकशन"&gt;Copilot CLI में ऑटो मॉडल सिलेक्शन&lt;/h2&gt;
&lt;p&gt;ऑटो मॉडल सिलेक्शन अब Copilot CLI एजेंट में भी काम करता है।&lt;/p&gt;
&lt;h2 id="typescript-70-nightly-ऑपट-इन"&gt;TypeScript 7.0 Nightly ऑप्ट-इन&lt;/h2&gt;
&lt;p&gt;VS Code सेटिंग्स से सीधे TypeScript 7.0 नाइटली टेस्ट करने का विकल्प मिलता है। TypeScript 7.0 एक बड़ा रिलीज़ है (&lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-7-0-beta/"&gt;बीटा कुछ दिन पहले आया&lt;/a&gt;)।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_118"&gt;पूर्ण रिलीज़ नोट्स&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>आपका एजेंट चीजें कहाँ याद रखता है? चैट हिस्ट्री स्टोरेज का व्यावहारिक गाइड</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/</guid><description>सर्विस-मैनेज्ड या क्लाइंट-मैनेज्ड? लीनियर या ब्रांचिंग? यह आर्किटेक्चरल निर्णय तय करता है कि आपका AI एजेंट वास्तव में क्या कर सकता है — C# और Python कोड उदाहरणों के साथ।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/chat-history-storage-patterns-agent-framework/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;जब आप एक AI एजेंट बनाते हैं, तो अधिकांश ऊर्जा मॉडल, टूल्स और प्रॉम्प्ट पर लगाते हैं। &lt;em&gt;बातचीत का इतिहास कहाँ रहता है&lt;/em&gt; यह सवाल एक इम्प्लीमेंटेशन डिटेल लगता है — लेकिन यह सबसे महत्वपूर्ण आर्किटेक्चरल निर्णयों में से एक है जो आप लेंगे।&lt;/p&gt;
&lt;p&gt;यह निर्धारित करता है कि उपयोगकर्ता बातचीत को ब्रांच कर सकते हैं, जवाब पूर्ववत कर सकते हैं, रीस्टार्ट के बाद सेशन फिर शुरू कर सकते हैं, और आपका डेटा कभी आपके इन्फ्रास्ट्रक्चर से बाहर जाता है या नहीं। &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;Agent Framework टीम ने एक गहन विश्लेषण प्रकाशित किया है&lt;/a&gt;।&lt;/p&gt;
&lt;h2 id="द-बनयद-पटरन"&gt;दो बुनियादी पैटर्न&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;सर्विस-मैनेज्ड&lt;/strong&gt;: AI सर्विस बातचीत की स्थिति संग्रहीत करती है। आपका ऐप एक संदर्भ रखता है और सर्विस स्वचालित रूप से प्रत्येक अनुरोध में प्रासंगिक इतिहास शामिल करती है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;क्लाइंट-मैनेज्ड&lt;/strong&gt;: आपका ऐप पूरा इतिहास रखता है और प्रत्येक अनुरोध के साथ प्रासंगिक संदेश भेजता है। सर्विस स्टेटलेस है। आप सब नियंत्रित करते हैं।&lt;/p&gt;
&lt;h2 id="agent-framework-कस-अमरत-करत-ह"&gt;Agent Framework कैसे अमूर्त करता है&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;मेरा नाम 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;मेरा नाम क्या है?&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;h2 id="परदत-तवरत-सदरभ"&gt;प्रदाता त्वरित संदर्भ&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;प्रदाता&lt;/th&gt;
&lt;th&gt;स्टोरेज&lt;/th&gt;
&lt;th&gt;मॉडल&lt;/th&gt;
&lt;th&gt;संपीड़न&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;क्लाइंट&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;आप&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Foundry Agent Service&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;td&gt;लीनियर&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Responses API (डिफ़ॉल्ट)&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;td&gt;ब्रांचिंग&lt;/td&gt;
&lt;td&gt;सर्विस&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic Claude, Ollama&lt;/td&gt;
&lt;td&gt;क्लाइंट&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;आप&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="कस-चन"&gt;कैसे चुनें&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;ब्रांचिंग या &amp;ldquo;पूर्ववत&amp;rdquo; चाहिए?&lt;/strong&gt; → सर्विस-मैनेज्ड Responses API&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;डेटा संप्रभुता चाहिए?&lt;/strong&gt; → DB-बैक्ड प्रदाता के साथ क्लाइंट-मैनेज्ड&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;सिंपल चैटबॉट?&lt;/strong&gt; → लीनियर सर्विस-मैनेज्ड ठीक है&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;पूर्ण निर्णय ट्री के लिए &lt;a href="https://devblogs.microsoft.com/agent-framework/chat-history-storage-patterns-in-microsoft-agent-framework/"&gt;पूरी पोस्ट&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>Foundry Toolboxes: AI Agents के लिए एक Unified Endpoint</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/</guid><description>Microsoft Foundry ने Toolboxes को Public Preview में launch किया है — AI Agent tools को एकल MCP-compatible endpoint के माध्यम से manage और expose करने का एक तरीका।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/foundry-toolboxes-curate-manage-tools-ai-agents/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;एक problem है जो boring लगती है जब तक खुद face न करो: organization multiple AI agents बना रही है, हर एक को tools चाहिए, और हर team scratch से configure कर रही है। Same web search integration, same Azure AI Search config, same GitHub MCP server connection — लेकिन अलग repository में, अलग team द्वारा, अलग credentials के साथ, और कोई shared governance नहीं।&lt;/p&gt;
&lt;p&gt;Microsoft Foundry ने &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Toolboxes&lt;/a&gt; को Public Preview में launch किया, और यह उस problem का direct answer है।&lt;/p&gt;
&lt;h2 id="toolbox-कय-ह"&gt;Toolbox क्या है&lt;/h2&gt;
&lt;p&gt;Toolbox एक named, reusable bundle of tools है जो एक बार Foundry में define होता है और single MCP-compatible endpoint के through expose होता है। कोई भी agent runtime जो MCP बोलता है वो इसे consume कर सकता है — Foundry Agents में कोई lock-in नहीं।&lt;/p&gt;
&lt;p&gt;Promise simple है: &lt;strong&gt;build once, consume anywhere&lt;/strong&gt;। Tools define करो, authentication centrally configure करो (OAuth passthrough, Entra managed identity), endpoint publish करो। जिस agent को वो tools चाहिए वो endpoint से connect करे और सभी मिल जाएं।&lt;/p&gt;
&lt;h2 id="चर-pillars-आज-द-available"&gt;चार pillars (आज दो available)&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Pillar&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;th&gt;क्या करता है&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;Coming soon&lt;/td&gt;
&lt;td&gt;Manual search बिना approved tools खोजना&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;Available&lt;/td&gt;
&lt;td&gt;Tools को reusable bundle में group करना&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;Available&lt;/td&gt;
&lt;td&gt;Single MCP endpoint सभी tools expose करता है&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;Coming soon&lt;/td&gt;
&lt;td&gt;Centralized auth + सभी tool calls की observability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="practical-example"&gt;Practical Example&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;Documentation search करो और GitHub issues का जवाब दो&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;Public documentation search&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;Publish होने के बाद Foundry unified endpoint देता है। एक connection, सभी tools।&lt;/p&gt;
&lt;h2 id="foundry-agents-म-lock-in-नह"&gt;Foundry Agents में lock-in नहीं&lt;/h2&gt;
&lt;p&gt;Toolboxes Foundry में &lt;strong&gt;create और manage&lt;/strong&gt; होते हैं, लेकिन consumption surface open MCP protocol है। Microsoft Agent Framework या LangGraph के custom agents, GitHub Copilot और अन्य MCP-enabled IDEs, कोई भी MCP-speaking runtime इन्हें use कर सकता है।&lt;/p&gt;
&lt;h2 id="अभ-कय-important-ह"&gt;अभी क्यों important है&lt;/h2&gt;
&lt;p&gt;Multi-agent wave production में पहुंच रही है। हर नया agent duplicate configuration, stale credentials और inconsistent behavior की नई surface है। Build + Consume foundation centralization शुरू करने के लिए काफी है। जब Govern pillar आएगा, पूरी agent fleet के लिए fully observable, centrally controlled tool layer मिलेगी।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;यह अभी भी early है — Public Preview, Python SDK पहले, Discover और Govern अभी आने हैं। लेकिन model solid है और MCP-native design का मतलब है कि यह उन tools के साथ काम करता है जो already build हो रहे हैं। &lt;a href="https://devblogs.microsoft.com/foundry/introducing-toolboxes-in-foundry/"&gt;Official announcement&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Python, TypeScript और .NET में azd Hooks: Shell Scripts से मुक्ति</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/</guid><description>Azure Developer CLI अब Python, JavaScript, TypeScript या .NET में hooks लिखने की सुविधा देता है। माइग्रेशन स्क्रिप्ट के लिए Bash की ओर switch करने की जरूरत खत्म।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azd-hooks-python-javascript-typescript-dotnet/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;अगर आपने कभी पूरी तरह .NET में बना प्रोजेक्ट रखा हो और फिर भी azd hooks के लिए Bash scripts लिखनी पड़ी हों, तो वो दर्द आप समझते हैं। जब प्रोजेक्ट का बाकी सब कुछ C# है, तो pre-provisioning step के लिए shell syntax में क्यों जाएं?&lt;/p&gt;
&lt;p&gt;वो frustration अब officially solve हो गई है। Azure Developer CLI ने &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;hooks के लिए multi-language support launch&lt;/a&gt; किया है, और यह उतना ही अच्छा है जितना सुनाई देता है।&lt;/p&gt;
&lt;h2 id="hooks-कय-ह"&gt;Hooks क्या हैं&lt;/h2&gt;
&lt;p&gt;Hooks वो scripts हैं जो &lt;code&gt;azd&lt;/code&gt; lifecycle के key points पर run होती हैं — provisioning से पहले, deployment के बाद, और अन्य। ये &lt;code&gt;azure.yaml&lt;/code&gt; में define होती हैं और CLI को modify किए बिना custom logic inject करने देती हैं।&lt;/p&gt;
&lt;p&gt;पहले सिर्फ Bash और PowerShell support थे। अब &lt;strong&gt;Python, JavaScript, TypeScript या .NET&lt;/strong&gt; use कर सकते हैं — बाकी सब &lt;code&gt;azd&lt;/code&gt; automatically handle करता है।&lt;/p&gt;
&lt;h2 id="detection-कस-कम-करत-ह"&gt;Detection कैसे काम करती है&lt;/h2&gt;
&lt;p&gt;बस hook को एक file पर point करें और &lt;code&gt;azd&lt;/code&gt; extension से language infer करता है:&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;कोई extra config नहीं। अगर extension ambiguous हो तो &lt;code&gt;kind: python&lt;/code&gt; (या relevant language) explicitly specify कर सकते हैं।&lt;/p&gt;
&lt;h2 id="language-specific-details"&gt;Language-specific details&lt;/h2&gt;
&lt;h3 id="python"&gt;Python&lt;/h3&gt;
&lt;p&gt;Script के साथ (या किसी parent directory में) &lt;code&gt;requirements.txt&lt;/code&gt; या &lt;code&gt;pyproject.toml&lt;/code&gt; रखें। &lt;code&gt;azd&lt;/code&gt; automatically virtual environment बनाएगा, dependencies install करेगा और script run करेगा।&lt;/p&gt;
&lt;h3 id="javascript-और-typescript"&gt;JavaScript और TypeScript&lt;/h3&gt;
&lt;p&gt;Same pattern — script के पास &lt;code&gt;package.json&lt;/code&gt; रखें और &lt;code&gt;azd&lt;/code&gt; पहले &lt;code&gt;npm install&lt;/code&gt; run करेगा। TypeScript के लिए &lt;code&gt;npx tsx&lt;/code&gt; use होता है, बिना compile step और बिना &lt;code&gt;tsconfig.json&lt;/code&gt;।&lt;/p&gt;
&lt;h3 id="net"&gt;.NET&lt;/h3&gt;
&lt;p&gt;दो modes उपलब्ध:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Project mode&lt;/strong&gt;: Script के पास &lt;code&gt;.csproj&lt;/code&gt; हो तो &lt;code&gt;azd&lt;/code&gt; automatically &lt;code&gt;dotnet restore&lt;/code&gt; और &lt;code&gt;dotnet build&lt;/code&gt; run करता है।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Single-file mode&lt;/strong&gt;: .NET 10+ पर standalone &lt;code&gt;.cs&lt;/code&gt; files सीधे &lt;code&gt;dotnet run script.cs&lt;/code&gt; से run होती हैं। Project file की जरूरत नहीं।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="executor-specific-configuration"&gt;Executor-specific configuration&lt;/h2&gt;
&lt;p&gt;हर language optional &lt;code&gt;config&lt;/code&gt; block support करती है:&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="net-developers-क-लए-कय-मयन-रखत-ह"&gt;.NET developers के लिए क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;Hooks azd-based project में वो आखिरी जगह थी जो language switch करने पर मजबूर करती थी। अब पूरा deployment pipeline — app code से लेकर lifecycle hooks तक — एक ही language में रह सकता है। Existing .NET utilities hooks में reuse कर सकते हैं, shared libraries reference कर सकते हैं, और shell script maintenance से छुटकारा मिलता है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;ये उन changes में से एक है जो छोटे लगते हैं लेकिन azd के daily workflow से बहुत friction हटाते हैं। Hooks के लिए multi-language support अभी available है — full documentation के लिए &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-multi-language-hooks/"&gt;official post&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Windows App Dev CLI v0.3: टर्मिनल से F5 डीबग और एजेंट्स के लिए UI ऑटोमेशन</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>Windows App Development CLI v0.3 में winapp run (टर्मिनल से डीबग लॉन्च), winapp ui (UI ऑटोमेशन) और एक नया NuGet पैकेज आया है जो पैकेज्ड ऐप्स के साथ dotnet run को काम करने देता है।</description><content:encoded>&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित की गई है। मूल पोस्ट के लिए &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Visual Studio का F5 अनुभव शानदार है। लेकिन सिर्फ एक पैकेज्ड Windows ऐप को लॉन्च और डीबग करने के लिए VS खोलना — चाहे वो CI पाइपलाइन हो, ऑटोमेटेड वर्कफ्लो हो, या AI एजेंट टेस्ट चला रहा हो — बहुत ज्यादा है।&lt;/p&gt;
&lt;p&gt;Windows App Development CLI v0.3 अभी &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;लॉन्च हुई है&lt;/a&gt; और दो मुख्य फीचर्स के साथ इसका सीधा समाधान देती है: &lt;code&gt;winapp run&lt;/code&gt; और &lt;code&gt;winapp ui&lt;/code&gt;।&lt;/p&gt;
&lt;h2 id="winapp-run-कह-स-भ-f5"&gt;winapp run: कहीं से भी F5&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;winapp run&lt;/code&gt; एक अनपैकेज्ड ऐप फोल्डर और मैनिफेस्ट लेती है, और वो सब करती है जो VS डीबग लॉन्च में करता है: एक loose पैकेज रजिस्टर करना, ऐप लॉन्च करना और री-डिप्लॉय के बीच &lt;code&gt;LocalState&lt;/code&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;# ऐप बिल्ड करें, फिर पैकेज्ड ऐप की तरह चलाएं&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;WinUI, WPF, WinForms, Console, Avalonia और अधिक के लिए काम करता है। मोड्स डेवलपर्स और ऑटोमेटेड वर्कफ्लो दोनों के लिए बनाए गए हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--detach&lt;/code&gt;&lt;/strong&gt;: लॉन्च के तुरंत बाद टर्मिनल को कंट्रोल वापस करता है। CI के लिए आदर्श।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--unregister-on-exit&lt;/code&gt;&lt;/strong&gt;: ऐप बंद होने पर रजिस्टर्ड पैकेज हटाता है।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--debug-output&lt;/code&gt;&lt;/strong&gt;: &lt;code&gt;OutputDebugString&lt;/code&gt; संदेश और exceptions रियल-टाइम में कैप्चर करता है।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="नय-nuget-पकज-पकजड-ऐपस-क-लए-dotnet-run"&gt;नया NuGet पैकेज: पैकेज्ड ऐप्स के लिए dotnet run&lt;/h2&gt;
&lt;p&gt;.NET डेवलपर्स के लिए एक नया NuGet पैकेज है: &lt;code&gt;Microsoft.Windows.SDK.BuildTools.WinApp&lt;/code&gt;। इंस्टॉल के बाद &lt;code&gt;dotnet run&lt;/code&gt; पूरा इनर लूप संभालता है: बिल्ड, loose-layout पैकेज तैयार करना, Windows में रजिस्टर करना और लॉन्च — सब एक स्टेप में।&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;# या&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-ऑटमशन"&gt;winapp ui: कमांड लाइन से UI ऑटोमेशन&lt;/h2&gt;
&lt;p&gt;यह वो फीचर है जो एजेंटिक सीनेरियो खोलता है। &lt;code&gt;winapp ui&lt;/code&gt; टर्मिनल से किसी भी चल रहे Windows ऐप (WPF, WinForms, Win32, Electron, WinUI3) तक पूर्ण UI Automation एक्सेस देता है।&lt;/p&gt;
&lt;p&gt;क्या किया जा सकता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;सभी टॉप-लेवल विंडो सूचीबद्ध करें&lt;/li&gt;
&lt;li&gt;किसी भी विंडो के पूर्ण UI Automation ट्री को नेविगेट करें&lt;/li&gt;
&lt;li&gt;नाम, टाइप या ऑटोमेशन ID से एलिमेंट खोजें&lt;/li&gt;
&lt;li&gt;क्लिक, invoke और मान सेट करें&lt;/li&gt;
&lt;li&gt;स्क्रीनशॉट लें&lt;/li&gt;
&lt;li&gt;एलिमेंट दिखने का इंतजार करें — टेस्ट सिंक्रोनाइजेशन के लिए आदर्श&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;winapp ui&lt;/code&gt; और &lt;code&gt;winapp run&lt;/code&gt; को मिलाकर टर्मिनल से पूरा build → लॉन्च → वेरिफाई वर्कफ्लो बनाया जा सकता है। एक एजेंट ऐप चला सकता है, UI स्थिति देख सकता है, प्रोग्रामेटिकली इंटरेक्ट कर सकता है और परिणाम validate कर सकता है।&lt;/p&gt;
&lt;h2 id="अनय-नई-सवधए"&gt;अन्य नई सुविधाएं&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp unregister&lt;/code&gt;&lt;/strong&gt;: काम पूरा होने पर sideloaded पैकेज हटाएं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;winapp manifest add-alias&lt;/code&gt;&lt;/strong&gt;: टर्मिनल से नाम से ऐप लॉन्च करने के लिए alias जोड़ें।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tab completion&lt;/strong&gt;: PowerShell के लिए एक कमांड से completion सेटअप करें।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="कस-परपत-कर"&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;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;# या&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 पब्लिक प्रीव्यू में है। पूरी डॉक्यूमेंटेशन के लिए &lt;a href="https://github.com/microsoft/WinAppCli"&gt;GitHub रिपॉजिटरी&lt;/a&gt; देखें और सभी विवरण के लिए &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;मूल घोषणा&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>azd + GitHub Copilot: AI-सहायता से प्रोजेक्ट सेटअप और स्मार्ट एरर समाधान</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/</guid><description>Azure Developer CLI अब GitHub Copilot के साथ इंटीग्रेट होता है — टर्मिनल छोड़े बिना प्रोजेक्ट इंफ्रास्ट्रक्चर जनरेट करें और डिप्लॉयमेंट एरर ठीक करें।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल अंग्रेजी संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azd-copilot-integration-ai-setup-troubleshooting/"&gt;यहाँ क्लिक करें&lt;/a&gt;।&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;क्या आप उस पल को जानते हैं जब आप Azure पर एक मौजूदा ऐप डिप्लॉय करना चाहते हैं और एक खाली &lt;code&gt;azure.yaml&lt;/code&gt; देखकर सोचते हैं कि Express API के लिए Container Apps या App Service में से क्या चुनें? वह पल अब बहुत छोटा हो गया है।&lt;/p&gt;
&lt;p&gt;Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) अब GitHub Copilot के साथ दो तरीकों से इंटीग्रेट होता है: &lt;code&gt;azd init&lt;/code&gt; के दौरान AI-असिस्टेड प्रोजेक्ट स्कैफोल्डिंग, और डिप्लॉयमेंट फेल होने पर इंटेलिजेंट एरर ट्रबलशूटिंग। दोनों फीचर पूरी तरह टर्मिनल में रहते हैं।&lt;/p&gt;
&lt;h2 id="azd-init-म-copilot-क-सथ-सटअप"&gt;azd init में Copilot के साथ सेटअप&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; चलाने पर अब &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo; विकल्प मिलता है। इसे चुनें और Copilot आपके कोडबेस का विश्लेषण करके &lt;code&gt;azure.yaml&lt;/code&gt;, इंफ्रास्ट्रक्चर टेम्प्लेट और Bicep मॉड्यूल जनरेट करता है — आपके असली कोड के आधार पर।&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;azd init
# चुनें: &amp;#34;Set up with GitHub Copilot (Preview)&amp;#34;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;आवश्यकताएँ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;azd 1.23.11 या नया&lt;/strong&gt; — &lt;code&gt;azd version&lt;/code&gt; से जाँचें या &lt;code&gt;azd update&lt;/code&gt; से अपडेट करें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;सक्रिय GitHub Copilot सब्सक्रिप्शन&lt;/strong&gt; (Individual, Business या 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; लॉगिन माँगेगा&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;यह दोनों दिशाओं में काम करता है। नए प्रोजेक्ट के लिए? Copilot शुरू से सही Azure सर्विस कॉन्फिगर करने में मदद करता है। मौजूदा ऐप डिप्लॉय करना है? Copilot को उस पर पॉइंट करें — कोड रिस्ट्रक्चर किए बिना कॉन्फिगरेशन जनरेट हो जाएगी।&lt;/p&gt;
&lt;h3 id="असल-म-कय-हत-ह"&gt;असल में क्या होता है&lt;/h3&gt;
&lt;p&gt;मान लीजिए आपके पास PostgreSQL डिपेंडेंसी वाला Node.js Express API है। Container Apps या App Service में मैन्युअली फैसला करने और Bicep लिखने की बजाय, Copilot आपका स्टैक डिटेक्ट करके जनरेट करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;सही &lt;code&gt;language&lt;/code&gt;, &lt;code&gt;host&lt;/code&gt; और &lt;code&gt;build&lt;/code&gt; सेटिंग वाला &lt;code&gt;azure.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Azure Container Apps के लिए Bicep मॉड्यूल&lt;/li&gt;
&lt;li&gt;Azure Database for PostgreSQL के लिए Bicep मॉड्यूल&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;और कुछ भी बदलने से पहले प्री-फ्लाइट चेक चलाता है — git वर्किंग डायरेक्टरी साफ है या नहीं, MCP सर्वर टूल कंसेंट। आपको पता होता है कि क्या बदलेगा।&lt;/p&gt;
&lt;h2 id="copilot-स-एरर-टरबलशटग"&gt;Copilot से एरर ट्रबलशूटिंग&lt;/h2&gt;
&lt;p&gt;डिप्लॉयमेंट एरर अपरिहार्य हैं। गुम पैरामीटर, परमिशन इश्यू, SKU उपलब्धता — और एरर मैसेज वह नहीं बताता जो आप जानना चाहते हैं: &lt;em&gt;कैसे ठीक करें&lt;/em&gt;।&lt;/p&gt;
&lt;p&gt;बिना Copilot: एरर कॉपी करें → डॉक्स सर्च करें → Stack Overflow के तीन अप्रासंगिक जवाब पढ़ें → &lt;code&gt;az&lt;/code&gt; CLI कमांड चलाएँ → दोबारा कोशिश करें। Copilot के साथ यह लूप टूट जाता है। कोई भी &lt;code&gt;azd&lt;/code&gt; कमांड फेल होने पर तुरंत चार विकल्प मिलते हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Explain&lt;/strong&gt; — क्या गलत हुआ, सरल भाषा में&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guidance&lt;/strong&gt; — ठीक करने के लिए स्टेप-बाय-स्टेप निर्देश&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose and Guide&lt;/strong&gt; — पूर्ण विश्लेषण + Copilot फिक्स लागू करता है (आपकी मंजूरी से) + वैकल्पिक रिट्राई&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skip&lt;/strong&gt; — खुद संभालें&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;मुख्य बात: Copilot के पास आपके प्रोजेक्ट, फेल कमांड और एरर डिटेल का संदर्भ पहले से है। सुझाव &lt;em&gt;आपकी स्थिति&lt;/em&gt; के लिए विशिष्ट हैं।&lt;/p&gt;
&lt;h3 id="डफलट-वयवहर-सट-कर"&gt;डिफ़ॉल्ट व्यवहार सेट करें&lt;/h3&gt;
&lt;p&gt;हमेशा एक ही विकल्प चुनते हैं? इंटरेक्टिव प्रॉम्प्ट स्किप करें:&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;मान: &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;। ऑटो-फिक्स और रिट्राई भी चालू कर सकते हैं:&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;कभी भी इंटरेक्टिव मोड पर वापस:&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="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; से नवीनतम संस्करण लें और अगले प्रोजेक्ट में &lt;code&gt;azd init&lt;/code&gt; आज़माएँ।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-copilot-integration/"&gt;मूल घोषणा यहाँ पढ़ें&lt;/a&gt;।&lt;/p&gt;</content:encoded></item><item><title>Node.js के लिए C# में नेटिव ऐडऑन लिखना .NET Native AOT के साथ</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/</guid><description>C# Dev Kit टीम ने C++ Node.js ऐडऑन को .NET Native AOT से बदला — परिणाम क्लीनर, सुरक्षित है और केवल .NET SDK की जरूरत है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह लेख स्वचालित रूप से अनुवादित किया गया है। मूल अंग्रेज़ी संस्करण के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/nodejs-addons-csharp-native-aot/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;यहाँ एक परिदृश्य है जो मुझे पसंद है: एक टीम जो .NET टूलिंग पर काम करती थी, उसके पास C++ में लिखे Native Node.js ऐडऑन थे जो &lt;code&gt;node-gyp&lt;/code&gt; के माध्यम से कंपाइल होते थे। यह काम करता था। लेकिन इसके लिए हर डेवलपर की मशीन पर Python इंस्टॉल होना जरूरी था — Python का पुराना वर्जन, जो सिर्फ एक ऐसे पैकेज को बिल्ड करने के लिए था जिसे टीम का कोई भी सीधे नहीं छूता।&lt;/p&gt;
&lt;p&gt;तो उन्होंने एक बहुत उचित सवाल पूछा: हमारे पास पहले से .NET SDK इंस्टॉल है, तो हम C++ क्यों लिख रहे हैं?&lt;/p&gt;
&lt;p&gt;जवाब था Native AOT, और परिणाम वास्तव में सुंदर है। C# Dev Kit टीम के Drew Noakes ने बताया कि उन्होंने यह कैसे किया।&lt;/p&gt;
&lt;h2 id="बनयद-वचर"&gt;बुनियादी विचार&lt;/h2&gt;
&lt;p&gt;Node.js नेटिव ऐडऑन एक शेयर्ड लाइब्रेरी है (Windows पर &lt;code&gt;.dll&lt;/code&gt;, Linux पर &lt;code&gt;.so&lt;/code&gt;, macOS पर &lt;code&gt;.dylib&lt;/code&gt;) जिसे Node.js रनटाइम पर लोड कर सकता है। इंटरफेस को &lt;a href="https://nodejs.org/api/n-api.html"&gt;N-API&lt;/a&gt; कहा जाता है — एक स्थिर, ABI-संगत C API। N-API को परवाह नहीं है कि लाइब्रेरी किस भाषा से बनी है, बस यह कि वह सही सिंबल एक्सपोर्ट करे।&lt;/p&gt;
&lt;p&gt;.NET Native AOT ठीक यही कर सकता है। यह आपके C# कोड को आगे से नेटिव शेयर्ड लाइब्रेरी में कंपाइल करता है। यही पूरी चाल है।&lt;/p&gt;
&lt;h2 id="परजकट-सटअप"&gt;प्रोजेक्ट सेटअप&lt;/h2&gt;
&lt;p&gt;प्रोजेक्ट फाइल न्यूनतम है:&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; SDK को &lt;code&gt;dotnet publish&lt;/code&gt; पर शेयर्ड लाइब्रेरी बनाने के लिए कहता है।&lt;/p&gt;
&lt;h2 id="एटर-पइट-एकसपरट-करन"&gt;एंट्री पॉइंट एक्सपोर्ट करना&lt;/h2&gt;
&lt;p&gt;Node.js आपकी लाइब्रेरी से &lt;code&gt;napi_register_module_v1&lt;/code&gt; एक्सपोर्ट करने की उम्मीद करता है। C# में, &lt;code&gt;[UnmanagedCallersOnly]&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="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;&lt;code&gt;u8&lt;/code&gt; सफ़िक्स UTF-8 स्ट्रिंग लिटरल के साथ &lt;code&gt;ReadOnlySpan&amp;lt;byte&amp;gt;&lt;/code&gt; बनाता है, जो बिना किसी एन्कोडिंग आवंटन के सीधे N-API को पास होता है।&lt;/p&gt;
&lt;h2 id="typescript-स-कल-करन"&gt;TypeScript से कॉल करना&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;dotnet publish&lt;/code&gt; आपकी प्लेटफ़ॉर्म-विशिष्ट नेटिव लाइब्रेरी बनाता है। इसे &lt;code&gt;.node&lt;/code&gt; में रीनेम करें और स्टैंडर्ड &lt;code&gt;require()&lt;/code&gt; से उपयोग करें:&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;बस इतना। TypeScript से C# तक, बिना Python, बिना C++ के।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;C# Dev Kit टीम ने Python/C++ ओवरहेड को क्लीन C# कोड से बदला। यह पैटर्न देखने के बाद जटिल नहीं है, और यह Native AOT का एक बेहतरीन उदाहरण है।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/writing-nodejs-addons-with-dotnet-native-aot/"&gt;.NET ब्लॉग पर मूल पोस्ट पढ़ें&lt;/a&gt;।&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.117: Agents को अपनी Git Branch मिल रही है — और मैं इसके साथ हूँ</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/</guid><description>VS Code 1.117 में agent sessions के लिए worktree isolation, persistent Autopilot mode, और subagent support आई है। Agentic coding workflow अब और भी वास्तविक हो गई है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/vscode-1-117-agents-autopilot-worktrees/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;ldquo;AI assistant&amp;rdquo; और &amp;ldquo;AI teammate&amp;rdquo; के बीच की रेखा लगातार पतली होती जा रही है। VS Code 1.117 अभी आया है और &lt;a href="https://code.visualstudio.com/updates/v1_117"&gt;full release notes&lt;/a&gt; भरे पड़े हैं, लेकिन यहाँ की कहानी साफ है: agents आपके dev workflow में first-class citizens बनते जा रहे हैं।&lt;/p&gt;
&lt;p&gt;यहाँ वो है जो वाकई मायने रखता है।&lt;/p&gt;
&lt;h2 id="autopilot-mode-आखरकर-आपक-preference-यद-रखत-ह"&gt;Autopilot mode आखिरकार आपकी preference याद रखता है&lt;/h2&gt;
&lt;p&gt;पहले, हर नई session शुरू करने पर Autopilot को फिर से enable करना पड़ता था। परेशान करने वाला। अब आपका permission mode sessions के पार persist होता है, और आप default configure कर सकते हैं।&lt;/p&gt;
&lt;p&gt;Agent Host तीन session configs support करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default&lt;/strong&gt; — tools चलने से पहले confirmation माँगते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass&lt;/strong&gt; — सब कुछ auto-approve करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — पूरी तरह autonomous, अपने सवालों के खुद जवाब देता है और चलता रहता है&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;अगर आप migrations, Docker, और CI के साथ एक नया .NET project scaffold कर रहे हैं — एक बार Autopilot set करें और भूल जाएं। वह preference बनी रहती है।&lt;/p&gt;
&lt;h2 id="agent-sessions-क-लए-worktree-और-git-isolation"&gt;Agent sessions के लिए Worktree और git isolation&lt;/h2&gt;
&lt;p&gt;यह बड़ी बात है। Agent sessions अब पूरी worktree और git isolation support करती हैं। इसका मतलब है जब कोई agent किसी task पर काम करता है, उसे अपनी branch और working directory मिलती है। आपकी main branch untouched रहती है।&lt;/p&gt;
&lt;p&gt;इससे भी बेहतर — Copilot CLI इन worktree sessions के लिए meaningful branch names generate करता है। अब &lt;code&gt;agent-session-abc123&lt;/code&gt; नहीं। आपको कुछ ऐसा मिलता है जो वास्तव में बताता है agent क्या कर रहा है।&lt;/p&gt;
&lt;p&gt;Multiple feature branches चलाने वाले या एक लंबे scaffolding task के दौरान bugs fix करने वाले .NET डेवलपर्स के लिए, यह game changer है। आपका एक agent एक worktree में API controllers बना सकता है जबकि आप दूसरे में service layer issue debug कर रहे हैं। कोई conflicts नहीं। कोई stashing नहीं। कोई mess नहीं।&lt;/p&gt;
&lt;h2 id="subagents-और-agent-teams"&gt;Subagents और agent teams&lt;/h2&gt;
&lt;p&gt;Agent Host Protocol अब subagents support करता है। एक agent किसी task के हिस्सों को handle करने के लिए दूसरे agents spin up कर सकता है। इसे delegation की तरह सोचें — आपका main agent coordinate करता है, और specialized agents टुकड़े handle करते हैं।&lt;/p&gt;
&lt;p&gt;यह early है, लेकिन .NET workflows के लिए potential स्पष्ट है। कल्पना करें एक agent आपके EF Core migrations handle करे जबकि दूसरा integration tests setup करे। हम पूरी तरह वहाँ नहीं हैं, लेकिन अभी protocol support land होने का मतलब है tooling जल्दी आएगी।&lt;/p&gt;
&lt;h2 id="agents-input-भजन-पर-terminal-output-automatically-include-हत-ह"&gt;Agents input भेजने पर terminal output automatically include होता है&lt;/h2&gt;
&lt;p&gt;छोटा लेकिन meaningful। जब कोई agent terminal को input भेजता है, terminal output अब automatically context में include हो जाता है। पहले, agent को बस यह देखने के लिए एक extra turn लेना पड़ता था कि क्या हुआ।&lt;/p&gt;
&lt;p&gt;अगर आपने कभी किसी agent को &lt;code&gt;dotnet build&lt;/code&gt; चलाते, fail होते, और फिर error देखने के लिए सिर्फ एक और round-trip लेते देखा है — वह friction खत्म हो गया। यह output तुरंत देखता है और react करता है।&lt;/p&gt;
&lt;h2 id="macos-पर-self-updating-agents-app"&gt;macOS पर self-updating Agents app&lt;/h2&gt;
&lt;p&gt;macOS पर standalone Agents app अब self-update करती है। अब manually नए versions download नहीं करने होंगे। यह बस current रहती है।&lt;/p&gt;
&lt;h2 id="जनन-लयक-छट-बत"&gt;जानने लायक छोटी बातें&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;package.json hovers&lt;/strong&gt; अब installed version और latest available दोनों दिखाते हैं। Useful है अगर आप .NET projects के साथ npm tooling manage करते हैं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;JSDoc&lt;/strong&gt; comments में &lt;strong&gt;Images&lt;/strong&gt; hovers और completions में सही render होती हैं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot CLI sessions&lt;/strong&gt; अब indicate करती हैं कि वे VS Code द्वारा बनाई गईं या externally — handy जब आप terminals के बीच jump कर रहे हों।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Copilot CLI, Claude Code, और Gemini CLI&lt;/strong&gt; shell types के रूप में recognize होते हैं। Editor जानता है आप क्या चला रहे हैं।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;VS Code 1.117 कोई flashy feature dump नहीं है। यह infrastructure है। Worktree isolation, persistent permissions, subagent protocols — ये उस workflow के building blocks हैं जहाँ agents बिना आपके code पर कदम रखे real, parallel tasks handle करते हैं।&lt;/p&gt;
&lt;p&gt;अगर आप .NET से build कर रहे हैं और अभी तक agentic workflow में नहीं उतरे हैं, तो honestly, अब शुरू करने का समय है।&lt;/p&gt;</content:encoded></item><item><title>Azure पर आपके AI प्रयोग पैसे बर्बाद कर रहे हैं — इसे ठीक करने का तरीका यहाँ है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/</guid><description>Azure पर AI workloads तेज़ी से महंगे हो सकते हैं। आइए बात करें कि विकास को धीमा किए बिना लागत को नियंत्रण में रखने के लिए वास्तव में क्या काम करता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/cloud-cost-optimization-ai-workloads-azure/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप अभी Azure पर AI-powered apps बना रहे हैं, तो आपने शायद कुछ नोटिस किया होगा: आपका cloud bill पहले जैसा नहीं दिखता। सिर्फ बड़ा नहीं — अजीब। उछल-कूद करने वाला। अनुमान लगाना मुश्किल।&lt;/p&gt;
&lt;p&gt;Microsoft ने हाल ही में &lt;a href="https://azure.microsoft.com/en-us/blog/cloud-cost-optimization-principles-that-still-matter/"&gt;cloud cost optimization principles पर एक शानदार लेख&lt;/a&gt; publish किया है, और सच में, इसका timing बेहतर नहीं हो सकता था। क्योंकि AI workloads ने costs के मामले में खेल बदल दिया है।&lt;/p&gt;
&lt;h2 id="ai-workloads-कय-अलग-ह"&gt;AI Workloads क्यों अलग हैं&lt;/h2&gt;
&lt;p&gt;यहाँ बात यह है। पारंपरिक .NET workloads अपेक्षाकृत predictable होती हैं। आप अपना App Service tier जानते हैं, अपना SQL DTUs जानते हैं, मासिक खर्च का अनुमान काफी सटीक लगा सकते हैं। AI workloads? उतना नहीं।&lt;/p&gt;
&lt;p&gt;आप multiple models test कर रहे हैं यह देखने के लिए कि कौन-सा fit है। Fine-tuning के लिए GPU-backed infrastructure spin up कर रहे हैं। Azure OpenAI को API calls कर रहे हैं जहाँ token consumption, prompt length और user behavior के आधार पर बहुत अलग-अलग होती है। हर experiment में असली पैसे लगते हैं, और सही approach पर पहुँचने से पहले आप दर्जनों experiments कर सकते हैं।&lt;/p&gt;
&lt;p&gt;यही unpredictability लागत अनुकूलन को critical बनाती है — बाद में सोचने की बात नहीं, बल्कि पहले दिन से।&lt;/p&gt;
&lt;h2 id="management-बनम-optimization--अतर-जन"&gt;Management बनाम Optimization — अंतर जानें&lt;/h2&gt;
&lt;p&gt;लेख से एक distinction जो मुझे लगता है developers अक्सर नज़रअंदाज़ करते हैं: cost &lt;em&gt;management&lt;/em&gt; और cost &lt;em&gt;optimization&lt;/em&gt; में फ़र्क है।&lt;/p&gt;
&lt;p&gt;Management tracking और reporting है। आप Azure Cost Management में budgets set करते हैं, alerts मिलते हैं, dashboards देखते हैं। यह तो बस शुरुआत है।&lt;/p&gt;
&lt;p&gt;Optimization वह है जहाँ आप वास्तव में decisions लेते हैं। क्या आपको सच में S3 tier चाहिए, या S1 आपका load handle कर लेगा? क्या वह always-on compute instance weekends पर idle बैठी है? क्या आप training jobs के लिए spot instances उपयोग कर सकते हैं?&lt;/p&gt;
&lt;p&gt;.NET developers के रूप में, हम code पर ध्यान देते हैं और infrastructure decisions &amp;ldquo;ops team&amp;rdquo; पर छोड़ देते हैं। लेकिन अगर आप Azure पर deploy कर रहे हैं, तो वे decisions आपकी भी हैं।&lt;/p&gt;
&lt;h2 id="ज-वसतव-म-कम-करत-ह"&gt;जो वास्तव में काम करता है&lt;/h2&gt;
&lt;p&gt;लेख और अपने अनुभव के आधार पर, यहाँ वह है जो वास्तव में फ़र्क डालता है:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;जानें आप क्या खर्च कर रहे हैं और कहाँ।&lt;/strong&gt; अपने resources को tag करें। गंभीरता से। अगर आप यह नहीं बता सकते कि कौन-सा project या experiment आपका budget खा रहा है, तो आप कुछ भी optimize नहीं कर सकते। उचित tagging के साथ Azure Cost Management आपका सबसे अच्छा दोस्त है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Experiment करने से पहले guardrails set करें।&lt;/strong&gt; Dev/test environments में महंगे SKUs को restrict करने के लिए Azure Policy उपयोग करें। अपने Azure OpenAI deployments पर spending limits set करें। Bill आने तक इंतज़ार न करें कि किसी ने weekend पर GPU cluster चलता छोड़ दिया।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;लगातार rightsize करें।&lt;/strong&gt; वह VM जो आपने prototyping के दौरान चुनी थी? वह production के लिए शायद गलत है। Azure Advisor recommendations देता है — उन्हें वास्तव में देखें। मासिक review करें, सालाना नहीं।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Lifecycle के बारे में सोचें।&lt;/strong&gt; Dev resources को spin down होना चाहिए। Test environments को 24/7 चलने की ज़रूरत नहीं। Auto-shutdown policies उपयोग करें। AI workloads के लिए विशेष रूप से, serverless options पर विचार करें जहाँ आप execution के हिसाब से pay करते हैं बजाय compute को warm रखने के।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Value मापें, सिर्फ cost नहीं।&lt;/strong&gt; यह भूलना आसान है। एक ऐसा model जिसकी cost ज़्यादा है लेकिन काफी बेहतर results देता है, सही choice हो सकता है। लक्ष्य कम से कम खर्च करना नहीं है — बल्कि समझदारी से खर्च करना है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Cloud cost optimization एक बार की सफाई नहीं है। यह एक आदत है। और AI workloads के साथ खर्च पहले से कम predictable होता जा रहा है, इस आदत को जल्दी बनाने से बाद में तकलीफदेह surprises से बचाव होता है।&lt;/p&gt;
&lt;p&gt;अगर आप Azure पर build करने वाले .NET developer हैं, तो अपने cloud bill को वैसे ही treat करना शुरू करें जैसे आप अपना code treat करते हैं — नियमित रूप से review करें, जब messy हो जाए तो refactor करें, और कभी भी यह जाने बिना deploy न करें कि इसकी लागत क्या होगी।&lt;/p&gt;</content:encoded></item><item><title>Foundry का RFT सस्ता और स्मार्ट हो गया — यहाँ जानिए क्या बदला</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/</guid><description>Microsoft Foundry ने इस महीने तीन RFT updates ship किए: o4-mini के लिए global training, नए GPT-4.1 model graders, और एक best practices guide जो आपके debugging के घंटे बचाएगी।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/foundry-fine-tuning-april-2026-rft-graders/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप fine-tuned models पर निर्भर .NET apps बना रहे हैं, तो इस महीने के Foundry updates पर ध्यान देने लायक हैं। Reinforcement Fine-Tuning अब और accessible और काफी सस्ती हो गई है।&lt;/p&gt;
&lt;p&gt;पूरी जानकारी &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-foundry-finetune-april-2026/"&gt;official announcement&lt;/a&gt; में है, लेकिन यहाँ practical breakdown है।&lt;/p&gt;
&lt;h2 id="o4-mini-क-लए-global-training"&gt;o4-mini के लिए Global Training&lt;/h2&gt;
&lt;p&gt;o4-mini reasoning-heavy और agentic workloads के लिए go-to model है। बड़ी खबर: अब आप Standard training की तुलना में कम per-token training rates के साथ 13+ Azure regions से fine-tuning jobs launch कर सकते हैं। वही infrastructure, वही quality, व्यापक पहुँच।&lt;/p&gt;
&lt;p&gt;अगर आपकी team geographies में फैली हुई है, तो यह मायने रखता है। अब आप training के लिए कुछ ही regions तक सीमित नहीं हैं।&lt;/p&gt;
&lt;p&gt;Global training job शुरू करने के लिए REST API call यहाँ है:&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;curl -X POST &lt;span class="s2"&gt;&amp;#34;https://&amp;lt;your-resource&amp;gt;.openai.azure.com/openai/fine_tuning/jobs?api-version=2025-04-01-preview&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;Content-Type: application/json&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -H &lt;span class="s2"&gt;&amp;#34;api-key: &lt;/span&gt;&lt;span class="nv"&gt;$AZURE_OPENAI_API_KEY&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d &lt;span class="s1"&gt;&amp;#39;{
&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;#34;model&amp;#34;: &amp;#34;o4-mini&amp;#34;,
&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;#34;training_file&amp;#34;: &amp;#34;&amp;lt;your-training-file-id&amp;gt;&amp;#34;,
&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;#34;method&amp;#34;: {
&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;#34;type&amp;#34;: &amp;#34;reinforcement&amp;#34;,
&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;#34;reinforcement&amp;#34;: {
&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;#34;grader&amp;#34;: {
&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;#34;type&amp;#34;: &amp;#34;string_check&amp;#34;,
&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;#34;name&amp;#34;: &amp;#34;answer-check&amp;#34;,
&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;#34;input&amp;#34;: &amp;#34;{{sample.output_text}}&amp;#34;,
&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;#34;reference&amp;#34;: &amp;#34;{{item.reference_answer}}&amp;#34;,
&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;#34;operation&amp;#34;: &amp;#34;eq&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&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; }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&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;#34;hyperparameters&amp;#34;: {
&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;#34;n_epochs&amp;#34;: 2,
&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;#34;compute_multiplier&amp;#34;: 1.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&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;#34;trainingType&amp;#34;: &amp;#34;globalstandard&amp;#34;
&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;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;वह &lt;code&gt;trainingType: globalstandard&lt;/code&gt; flag ही मुख्य अंतर है।&lt;/p&gt;
&lt;h2 id="नए-model-graders-gpt-41-family"&gt;नए Model Graders: GPT-4.1 Family&lt;/h2&gt;
&lt;p&gt;Graders वह reward signal define करते हैं जिसके आधार पर आपका model optimize करता है। अब तक, model-based graders models के एक छोटे set तक सीमित थे। अब आपको तीन नए विकल्प मिलते हैं: GPT-4.1, GPT-4.1-mini, और GPT-4.1-nano।&lt;/p&gt;
&lt;p&gt;Deterministic graders की बजाय model graders कब use करें? जब आपका task output open-ended हो, जब आपको कई dimensions में partial credit scoring चाहिए, या जब आप ऐसे agentic workflows बना रहे हों जहाँ tool-call correctness semantic context पर निर्भर करती है।&lt;/p&gt;
&lt;p&gt;बात यह है — tiering strategy practical है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-nano&lt;/strong&gt; शुरुआती iterations के लिए। कम cost, fast feedback loops।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1-mini&lt;/strong&gt; जब आपका grading rubric stable हो और आपको higher fidelity चाहिए।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GPT-4.1&lt;/strong&gt; production grading या complex rubrics के लिए जहाँ हर scoring decision मायने रखती है।&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;आप एक ही RFT job में grader types भी mix कर सकते हैं। &amp;ldquo;correct answer&amp;rdquo; dimension के लिए string-match और reasoning quality evaluate करने के लिए model grader। यह flexibility ही इसे real workloads के लिए उपयोगी बनाती है।&lt;/p&gt;
&lt;h2 id="rft-data-format-क-समसय"&gt;RFT Data Format की समस्या&lt;/h2&gt;
&lt;p&gt;यह लोगों को अटकाती है। RFT data format SFT से अलग है। हर row का आखिरी message User या Developer role का होना चाहिए — Assistant का नहीं। Expected answer एक top-level key जैसे &lt;code&gt;reference_answer&lt;/code&gt; में जाता है जिसे grader directly reference करता है।&lt;/p&gt;
&lt;p&gt;अगर आप supervised fine-tuning कर रहे हैं और RFT पर switch करना चाहते हैं, तो आपको अपना training data restructure करना होगा। यह step skip न करें वरना आपके jobs silently fail होंगे।&lt;/p&gt;
&lt;h2 id="net-developers-क-लए-यह-कय-मयन-रखत-ह"&gt;.NET Developers के लिए यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;अगर आप Azure OpenAI SDK के ज़रिए .NET apps से fine-tuned models call कर रहे हैं, तो सस्ती training का मतलब है कि आप अधिक aggressively iterate कर सकते हैं। Model grader options का मतलब है कि आप nuanced tasks के लिए fine-tune कर सकते हैं — सिर्फ exact-match scenarios नहीं। और &lt;a href="https://github.com/microsoft-foundry/fine-tuning/blob/main/Demos/Agentic_RFT_PrivatePreview/RFT_Best_Practice.md"&gt;GitHub&lt;/a&gt; पर best practices guide आपका real debugging time बचाएगी।&lt;/p&gt;
&lt;p&gt;छोटे से शुरू करें। दस से सौ samples। Simple grader। Loop validate करें। फिर scale करें।&lt;/p&gt;</content:encoded></item><item><title>Docker Sandbox, Copilot Agents को आपकी मशीन को जोखिम में डाले बिना Code Refactor करने देता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/</guid><description>Docker Sandbox, GitHub Copilot agents को refactoring के लिए एक सुरक्षित microVM देता है — कोई permission prompt नहीं, host को कोई खतरा नहीं। यहाँ जानें यह बड़े पैमाने पर .NET modernization के लिए सब कुछ कैसे बदलता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/copilot-docker-sandbox-agentic-refactoring/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आपने Copilot के agent mode का उपयोग छोटे edits से परे किसी काम के लिए किया है, तो आप वह तकलीफ जानते हैं। हर file write, हर terminal command — एक और permission prompt। अब कल्पना करें कि यह 50 projects में चलाना हो। मज़ेदार नहीं।&lt;/p&gt;
&lt;p&gt;Azure team ने &lt;a href="https://devblogs.microsoft.com/all-things-azure/best-of-both-worlds-for-agentic-refactoring-github-copilot-microvms-via-docker-sandbox/"&gt;GitHub Copilot agents के लिए Docker Sandbox&lt;/a&gt; के बारे में एक post publish किया है, और सच में, यह सबसे practical agentic tooling improvements में से एक है जो मैंने देखी है। यह microVMs का उपयोग करता है ताकि Copilot को एक पूरी तरह से isolated environment मिल सके जहाँ यह खुलकर काम कर सके — packages install करना, builds चलाना, tests execute करना — आपके host system को छुए बिना।&lt;/p&gt;
&lt;h2 id="docker-sandbox-वसतव-म-कय-दत-ह"&gt;Docker Sandbox वास्तव में क्या देता है&lt;/h2&gt;
&lt;p&gt;Core idea सरल है: एक पूर्ण Linux environment के साथ एक lightweight microVM spin up करें, अपना workspace उसमें sync करें, और Copilot agent को उसके अंदर freely काम करने दें। जब यह हो जाए, changes sync back हो जाती हैं।&lt;/p&gt;
&lt;p&gt;यहाँ वह है जो इसे सिर्फ &amp;ldquo;container में चीज़ें चलाने&amp;rdquo; से अधिक बनाता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Bidirectional workspace sync&lt;/strong&gt; जो absolute paths को preserve करता है। आपकी project structure sandbox के अंदर बिल्कुल एक जैसी दिखती है। Path-related build failures नहीं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Private Docker daemon&lt;/strong&gt; जो microVM के अंदर चलता है। Agent containers build और run कर सकता है बिना कभी आपके host के Docker socket को mount किए। Security के लिए यह बहुत बड़ी बात है।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;HTTP/HTTPS filtering proxies&lt;/strong&gt; जो control करते हैं कि agent network पर क्या reach कर सकता है। आप तय करते हैं कि कौन-से registries और endpoints allowed हैं। Sandbox के अंदर एक rogue &lt;code&gt;npm install&lt;/code&gt; से supply chain attacks? Blocked।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;YOLO mode&lt;/strong&gt; — हाँ, यही वे इसे कहते हैं। Agent बिना permission prompts के चलता है क्योंकि यह literally आपके host को नुकसान नहीं पहुँचा सकता। हर destructive action contained है।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="net-developers-क-कय-परवह-करन-चहए"&gt;.NET Developers को क्यों परवाह करनी चाहिए&lt;/h2&gt;
&lt;p&gt;उस modernization work के बारे में सोचें जिसका सामना इतनी सारी teams कर रही हैं। आपके पास 30 projects का एक .NET Framework solution है, और आपको इसे .NET 9 पर move करना है। वह सैकड़ों file changes हैं — project files, namespace updates, API replacements, NuGet migrations।&lt;/p&gt;
&lt;p&gt;Docker Sandbox के साथ, आप एक Copilot agent को किसी project पर point कर सकते हैं, उसे microVM के अंदर freely refactor करने दे सकते हैं, validate करने के लिए &lt;code&gt;dotnet build&lt;/code&gt; और &lt;code&gt;dotnet test&lt;/code&gt; चला सकते हैं, और केवल वे changes accept कर सकते हैं जो वास्तव में काम करती हैं। इस जोखिम के बिना कि experimenting करते समय यह आपके local dev environment को accidentally बर्बाद कर दे।&lt;/p&gt;
&lt;p&gt;Post में &lt;strong&gt;parallel agents की एक fleet&lt;/strong&gt; चलाने का भी वर्णन है — प्रत्येक अपने sandbox में — जो एक साथ अलग-अलग projects से निपटती हैं। बड़े .NET solutions या microservice architectures के लिए, यह बहुत बड़ा समय बचाने वाला है। एक agent per service, सभी isolated होकर चल रहे हैं, सभी independently validate हो रहे हैं।&lt;/p&gt;
&lt;h2 id="security-पकष-मयन-रखत-ह"&gt;Security पक्ष मायने रखता है&lt;/h2&gt;
&lt;p&gt;यहाँ वह बात है जो ज़्यादातर लोग छोड़ देते हैं: जब आप एक AI agent को arbitrary commands execute करने देते हैं, तो आप उस पर अपनी पूरी machine का भरोसा कर रहे हैं। Docker Sandbox उस model को पलट देता है। Agent को एक throwaway environment के अंदर पूरी autonomy मिलती है। Network proxy सुनिश्चित करता है कि यह केवल approved sources से pull कर सकता है। आपका host filesystem, Docker daemon, और credentials अछूते रहते हैं।&lt;/p&gt;
&lt;p&gt;Compliance requirements वाली teams के लिए — और ज़्यादातर enterprise .NET shops की यही स्थिति है — यह &amp;ldquo;हम agentic AI उपयोग नहीं कर सकते&amp;rdquo; और &amp;ldquo;हम इसे safely adopt कर सकते हैं&amp;rdquo; के बीच का अंतर है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Docker Sandbox agentic coding के मूलभूत tension को हल करता है: agents को उपयोगी होने के लिए स्वतंत्रता चाहिए, लेकिन आपकी host machine पर स्वतंत्रता खतरनाक है। MicroVMs आपको दोनों देते हैं। अगर आप कोई बड़े पैमाने का .NET refactoring या modernization plan कर रहे हैं, तो इसे अभी set up करना उचित है। Copilot की code intelligence को एक safe execution environment के साथ मिलाना ठीक वही है जिसका production teams इंतज़ार कर रही थीं।&lt;/p&gt;</content:encoded></item><item><title>Terminal की देखभाल बंद करें: Aspire का Detached Mode Workflow बदल देता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>Aspire 13.2 आपको AppHost को background में चलाने और अपना terminal वापस लेने देता है। नए CLI commands और agent support के साथ मिलाकर, यह उतना बड़ा deal है जितना सुनने में लगता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;हर बार जब आप Aspire AppHost चलाते हैं, तो आपका terminal चला जाता है। बंद। कब्ज़ा हो जाता है जब तक आप Ctrl+C से बाहर नहीं निकलते। एक quick command चलानी है? दूसरा tab खोलिए। Logs चेक करने हैं? एक और tab। यह एक छोटी सी रुकावट है जो जल्दी बड़ी हो जाती है।&lt;/p&gt;
&lt;p&gt;Aspire 13.2 इसे ठीक करता है। James Newton-King ने &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;पूरी जानकारी लिखी है&lt;/a&gt;, और सच कहूँ तो, यह उन features में से एक है जो तुरंत आपके काम करने का तरीका बदल देती है।&lt;/p&gt;
&lt;h2 id="detached-mode-एक-command-terminal-वपस"&gt;Detached mode: एक command, terminal वापस&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;यह &lt;code&gt;aspire run --detach&lt;/code&gt; का shorthand है। आपका AppHost background में boot होता है और आपको तुरंत terminal वापस मिल जाता है। कोई extra tab नहीं। कोई terminal multiplexer नहीं। बस आपका prompt, काम के लिए तैयार।&lt;/p&gt;
&lt;h2 id="ज-चल-रह-ह-उस-manage-करन"&gt;जो चल रहा है उसे manage करना&lt;/h2&gt;
&lt;p&gt;यहाँ बात यह है — background में चलाना तभी उपयोगी है जब आप वाकई manage कर सकें कि क्या चल रहा है। Aspire 13.2 इसके लिए CLI commands का पूरा सेट लेकर आता है:&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;# सभी running AppHosts की list&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;# किसी specific AppHost की state देखें&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;# किसी running AppHost के logs stream करें&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;# किसी specific AppHost को रोकें&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;इससे Aspire CLI एक proper process manager बन जाता है। आप कई AppHosts शुरू कर सकते हैं, उनकी status चेक कर सकते हैं, उनके logs tail कर सकते हैं, और उन्हें बंद कर सकते हैं — सब एक ही terminal session से।&lt;/p&gt;
&lt;h2 id="isolated-mode-क-सथ-मलए"&gt;Isolated mode के साथ मिलाएं&lt;/h2&gt;
&lt;p&gt;Detached mode naturally isolated mode के साथ काम करता है। क्या आप बिना port conflicts के background में एक ही project के दो instances चलाना चाहते हैं?&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;हर एक को random ports, अलग secrets, और अपना lifecycle मिलता है। दोनों देखने के लिए &lt;code&gt;aspire ps&lt;/code&gt; का उपयोग करें, जिसे बंद करना हो उसके लिए &lt;code&gt;aspire stop&lt;/code&gt; का।&lt;/p&gt;
&lt;h2 id="coding-agents-क-लए-यह-कय-बड-बत-ह"&gt;Coding agents के लिए यह क्यों बड़ी बात है&lt;/h2&gt;
&lt;p&gt;यहीं चीज़ें वाकई दिलचस्प हो जाती हैं। आपके terminal में काम करने वाला एक coding agent अब यह कर सकता है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;aspire start&lt;/code&gt; से app शुरू करें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aspire describe&lt;/code&gt; से उसकी state query करें&lt;/li&gt;
&lt;li&gt;समस्याएं diagnose करने के लिए &lt;code&gt;aspire logs&lt;/code&gt; से logs चेक करें&lt;/li&gt;
&lt;li&gt;काम हो जाने पर &lt;code&gt;aspire stop&lt;/code&gt; से बंद करें&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;बिना terminal session खोए। Detached mode से पहले, एक agent जो आपका AppHost चलाता वह अपने ही terminal से lock out हो जाता। अब वह शुरू कर सकता है, observe कर सकता है, iterate कर सकता है, और cleanup कर सकता है — बिल्कुल वैसे जैसा आप एक autonomous agent से चाहते हैं।&lt;/p&gt;
&lt;p&gt;Aspire team ने इसी पर ध्यान दिया। &lt;code&gt;aspire agent init&lt;/code&gt; चलाने से एक Aspire skill file setup होती है जो agents को ये commands सिखाती है। तो Copilot का coding agent जैसे tools out of the box ही आपके Aspire workloads manage कर सकते हैं।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Detached mode एक simple flag के रूप में छुपा हुआ workflow upgrade है। आप terminals के बीच context-switch करना बंद कर देते हैं, agents खुद को block करना बंद कर देते हैं, और नए CLI commands आपको यह देखने की असली visibility देते हैं कि क्या चल रहा है। यह practical है, यह clean है, और यह daily development loop को ध्यान देने योग्य रूप से smooth बनाता है।&lt;/p&gt;
&lt;p&gt;सभी details के लिए &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;पूरा पोस्ट&lt;/a&gt; पढ़ें और &lt;code&gt;aspire update --self&lt;/code&gt; से Aspire 13.2 प्राप्त करें।&lt;/p&gt;</content:encoded></item><item><title>.NET MAUI Maps में Pin Clustering आखिरकार आया — एक Property, Zero परेशानी</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/</guid><description>.NET MAUI 11 Preview 3 Map control में native pin clustering जोड़ता है। एक property, अलग clustering groups, और tap handling — सब built in।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/maui-maps-pin-clustering-finally/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;आप उस moment को जानते हैं जब आप सौ pins वाला map load करते हैं और पूरी चीज़ एक unreadable blob बन जाती है? हाँ, यही तब तक .NET MAUI Maps का experience था। अब नहीं।&lt;/p&gt;
&lt;p&gt;David Ortinau ने &lt;a href="https://devblogs.microsoft.com/dotnet/pin-clustering-in-dotnet-maui-maps/"&gt;अभी announce किया&lt;/a&gt; कि .NET MAUI 11 Preview 3 Android और iOS/Mac Catalyst पर out of the box pin clustering ship करता है। और सबसे अच्छी बात — इसे enable करना बेहद simple है।&lt;/p&gt;
&lt;h2 id="एक-property-सबक-control-कर"&gt;एक property सबको control करे&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;बस इतना। Nearby pins count badge के साथ clusters में group हो जाते हैं। Zoom in करें और वे expand होते हैं। Zoom out करें और वे collapse होते हैं। वह behavior जो users किसी भी modern map से expect करते हैं — और अब आपको यह एक single property से मिलता है।&lt;/p&gt;
&lt;h2 id="सवततर-clustering-groups"&gt;स्वतंत्र clustering groups&lt;/h2&gt;
&lt;p&gt;यहाँ यह interesting हो जाता है। सभी pins को एक साथ cluster नहीं होना चाहिए। Coffee shops और parks अलग-अलग चीज़ें हैं, और आपके map को यह पता होना चाहिए।&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ClusteringIdentifier&lt;/code&gt; property आपको pins को independent groups में अलग करने देती है:&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;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;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;Occidental Square&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.6064&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.3325&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;parks&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;Same identifier वाले pins एक साथ cluster होते हैं। अलग-अलग identifiers independent clusters बनाते हैं भले ही वे geographically करीब हों। कोई identifier नहीं? Default group। साफ़ और predictable।&lt;/p&gt;
&lt;h2 id="cluster-taps-handle-करन"&gt;Cluster taps handle करना&lt;/h2&gt;
&lt;p&gt;जब कोई user cluster tap करता है, तो आपको &lt;code&gt;ClusterClicked&lt;/code&gt; event मिलती है जिसमें आपको जो चाहिए वह सब होता है:&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;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;names&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;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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// Default zoom-to-cluster behavior suppress करने के लिए:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// e.Handled = 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;p&gt;Event args आपको &lt;code&gt;Pins&lt;/code&gt; (cluster में pins), &lt;code&gt;Location&lt;/code&gt; (geographic center), और &lt;code&gt;Handled&lt;/code&gt; (default zoom override करने के लिए &lt;code&gt;true&lt;/code&gt; set करें) देते हैं। Simple, practical, exactly वही जो आप expect करते।&lt;/p&gt;
&lt;h2 id="platform-स-जड-जरर-बत"&gt;Platform से जुड़ी ज़रूरी बातें&lt;/h2&gt;
&lt;p&gt;Android पर, clustering एक custom grid-based algorithm का उपयोग करती है जो zoom changes पर recalculate होती है — कोई external dependencies नहीं। iOS और Mac Catalyst पर, यह MapKit का native &lt;code&gt;MKClusterAnnotation&lt;/code&gt; support leverage करता है, जिसका मतलब है smooth, platform-native animations।&lt;/p&gt;
&lt;p&gt;यह उन cases में से एक है जहाँ MAUI team ने सही call किया — जहाँ समझ में आए वहाँ platform पर lean करो।&lt;/p&gt;
&lt;h2 id="यह-कय-मयन-रखत-ह"&gt;यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;.NET MAUI में Pin clustering सबसे ज़्यादा requested features में से एक रही है (&lt;a href="https://github.com/dotnet/maui/issues/11811"&gt;issue #11811&lt;/a&gt;), और इसकी वजह है। हर app जो map पर locations दिखाती है — delivery tracking, store locators, real estate — इसकी ज़रूरत होती है। पहले आपको इसे खुद बनाना पड़ता था या किसी third-party library को लाना पड़ता था। अब यह built in है।&lt;/p&gt;
&lt;p&gt;हम .NET developers के लिए जो cross-platform mobile apps बना रहे हैं, यह उस तरह का quality-of-life improvement है जो MAUI को map-heavy scenarios के लिए genuinely practical choice बनाता है।&lt;/p&gt;
&lt;h2 id="शरआत-कर"&gt;शुरुआत करें&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://dotnet.microsoft.com/download/dotnet/11.0"&gt;.NET 11 Preview 3&lt;/a&gt; install करें और .NET MAUI workload update करें। &lt;a href="https://github.com/dotnet/maui-samples/tree/main/10.0/UserInterface/Views/Map/MapDemo/WorkingWithMaps"&gt;Maps sample&lt;/a&gt; में एक नया Clustering page है जिसे आप तुरंत try कर सकते हैं।&lt;/p&gt;
&lt;p&gt;जाएं, इसके साथ कुछ बनाएं — और अपने maps को finally सांस लेने दें।&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Tools अब Visual Studio 2022 में बिल्ट-इन हैं — कोई Extension ज़रूरी नहीं</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/</guid><description>Azure MCP tools अब Visual Studio 2022 में Azure development workload के हिस्से के रूप में आते हैं। 230 से अधिक tools, 45 Azure services, और कोई extension इंस्टॉल नहीं करना।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-mcp-tools-built-into-visual-studio-2022/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप Visual Studio में अलग extension के ज़रिए Azure MCP tools use करते रहे हैं, तो आप उस झंझट से परिचित हैं — VSIX install करो, restart करो, उम्मीद करो कि टूटे नहीं, version mismatches manage करो। वो friction अब खत्म हो गई।&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;घोषणा की&lt;/a&gt; कि Azure MCP tools अब सीधे Visual Studio 2022 में Azure development workload के हिस्से के रूप में आते हैं। कोई extension नहीं। कोई VSIX नहीं। कोई restart dance नहीं।&lt;/p&gt;
&lt;h2 id="इसक-वसतव-म-कय-मतलब-ह"&gt;इसका वास्तव में क्या मतलब है&lt;/h2&gt;
&lt;p&gt;Visual Studio 2022 version 17.14.30 से शुरू होकर, Azure MCP Server Azure development workload के साथ bundled आता है। अगर आपके पास पहले से वो workload installed है, तो बस GitHub Copilot Chat में उसे toggle on करना है और आप तैयार हैं।&lt;/p&gt;
&lt;p&gt;45 Azure services में 230 से अधिक tools — सीधे chat window से accessible। अपने storage accounts list करें, ASP.NET Core app deploy करें, App Service issues diagnose करें, Log Analytics query करें — बिना browser tab खोले।&lt;/p&gt;
&lt;h2 id="यह-जतन-लगत-ह-उसस-जयद-मयन-कय-रखत-ह"&gt;यह जितना लगता है उससे ज़्यादा मायने क्यों रखता है&lt;/h2&gt;
&lt;p&gt;Developer tooling की असली बात यह है: हर extra step friction है, और friction adoption को मार देती है। MCP को एक अलग extension के रूप में रखने का मतलब था version mismatches, installation failures, और एक और चीज़ जो update रखनी होगी। इसे workload में बेक करने का मतलब है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Visual Studio Installer के ज़रिए &lt;strong&gt;एकल update path&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Extension और IDE के बीच &lt;strong&gt;कोई version drift नहीं&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;हमेशा current&lt;/strong&gt; — MCP Server VS के regular releases के साथ update होता है&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure पर standardize करने वाली teams के लिए यह बड़ी बात है। Workload एक बार install करें, tools enable करें, और वे हर session के लिए वहाँ मौजूद हैं।&lt;/p&gt;
&lt;h2 id="इसस-आप-कय-कर-सकत-ह"&gt;इससे आप क्या कर सकते हैं&lt;/h2&gt;
&lt;p&gt;Tools Copilot Chat के ज़रिए पूरे development lifecycle को cover करते हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;सीखें&lt;/strong&gt; — Azure services, best practices, architecture patterns के बारे में पूछें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Design और develop करें&lt;/strong&gt; — service recommendations पाएं, app code configure करें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Deploy करें&lt;/strong&gt; — resources provision करें और IDE से सीधे deploy करें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Troubleshoot करें&lt;/strong&gt; — logs query करें, resource health check करें, production issues diagnose करें&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;एक quick example — Copilot Chat में यह type करें:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;List my storage accounts in my current subscription.
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Copilot पर्दे के पीछे Azure MCP tools call करता है, आपके subscriptions query करता है, और names, locations, और SKUs के साथ एक formatted list return करता है। कोई portal ज़रूरी नहीं।&lt;/p&gt;
&lt;h2 id="इस-कस-enable-कर"&gt;इसे कैसे enable करें&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Visual Studio 2022 &lt;strong&gt;17.14.30&lt;/strong&gt; या उससे ऊपर update करें&lt;/li&gt;
&lt;li&gt;सुनिश्चित करें कि &lt;strong&gt;Azure development&lt;/strong&gt; workload installed है&lt;/li&gt;
&lt;li&gt;GitHub Copilot Chat खोलें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Select tools&lt;/strong&gt; button (दो wrenches icon) पर क्लिक करें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure MCP Server&lt;/strong&gt; को toggle on करें&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;बस इतना। यह sessions के बीच enabled रहता है।&lt;/p&gt;
&lt;h2 id="एक-धयन-दन-यगय-बत"&gt;एक ध्यान देने योग्य बात&lt;/h2&gt;
&lt;p&gt;Tools default रूप से disabled हैं — आपको opt in करना होगा। VS 2026-specific tools VS 2022 में उपलब्ध नहीं हैं। Tool availability आपके Azure subscription permissions पर भी निर्भर करती है, जैसे portal में होती है।&lt;/p&gt;
&lt;h2 id="बड-तसवर"&gt;बड़ी तस्वीर&lt;/h2&gt;
&lt;p&gt;यह एक स्पष्ट trend का हिस्सा है: MCP developer IDEs में cloud tools surface करने का मानक तरीका बनता जा रहा है। हम पहले ही &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;Azure MCP Server 2.0 stable release&lt;/a&gt; और VS Code तथा अन्य editors में MCP integrations देख चुके हैं। इसे Visual Studio के workload system में built in होना स्वाभाविक प्रगति है।&lt;/p&gt;
&lt;p&gt;हम .NET developers जो Visual Studio में काम करते हैं, उनके लिए यह Azure portal पर context-switch करने का एक और कारण हटाता है। और सच में, जितना कम tab-switching, उतना बेहतर।&lt;/p&gt;</content:encoded></item><item><title>.NET April 2026 Servicing — Security Patches जो आपको आज Apply करने चाहिए</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/</guid><description>April 2026 servicing release, .NET 10, .NET 9, .NET 8 और .NET Framework में 6 CVEs patch करती है — जिसमें दो remote code execution vulnerabilities शामिल हैं।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/dotnet-april-2026-servicing-security-patches/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;.NET और .NET Framework के लिए &lt;a href="https://devblogs.microsoft.com/dotnet/dotnet-and-dotnet-framework-april-2026-servicing-updates/"&gt;April 2026 servicing updates&lt;/a&gt; आ गए हैं, और इसमें security fixes हैं जिन्हें आप जल्द apply करना चाहेंगे। छह CVEs patch किए गए हैं, जिनमें दो remote code execution (RCE) vulnerabilities शामिल हैं।&lt;/p&gt;
&lt;h2 id="कय-patch-कय-गय-ह"&gt;क्या Patch किया गया है&lt;/h2&gt;
&lt;p&gt;यहाँ quick summary है:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;CVE&lt;/th&gt;
&lt;th&gt;प्रकार&lt;/th&gt;
&lt;th&gt;प्रभावित करता है&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;Security Feature Bypass&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;Remote Code Execution&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;Remote Code Execution&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;Denial of Service&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;Denial of Service&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;Denial of Service&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;p&gt;दोनों RCE CVEs (CVE-2026-32178 और CVE-2026-33116) .NET versions की सबसे broad range को affect करते हैं और इन्हें priority देनी चाहिए।&lt;/p&gt;
&lt;h2 id="updated-versions"&gt;Updated Versions&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;p&gt;सभी usual channels पर available हैं — &lt;a href="https://dotnet.microsoft.com/download/dotnet/10.0"&gt;dotnet.microsoft.com&lt;/a&gt;, MCR पर container images, और Linux package managers।&lt;/p&gt;
&lt;h2 id="कय-कर"&gt;क्या करें&lt;/h2&gt;
&lt;p&gt;अपने projects और CI/CD pipelines को latest patch versions पर update करें। अगर आप containers चला रहे हैं, तो latest images pull करें। अगर आप .NET Framework पर हैं, तो corresponding patches के लिए &lt;a href="https://learn.microsoft.com/dotnet/framework/release-notes/release-notes"&gt;.NET Framework release notes&lt;/a&gt; देखें।&lt;/p&gt;
&lt;p&gt;Production में .NET 10 चला रहे लोगों के लिए (यह current release है), 10.0.6 एक mandatory update है। वही .NET 9.0.15 और .NET 8.0.26 के लिए भी लागू होता है अगर आप उन LTS tracks पर हैं। दो RCE vulnerabilities ऐसी चीज़ नहीं हैं जिन्हें आप टालें।&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 में MongoDB EF Core और Azure Data Lake — दो Integrations जो आज़माने लायक हैं</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/</guid><description>Aspire 13.2 में MongoDB Entity Framework Core और Azure Data Lake Storage integrations जुड़े हैं, जिनमें zero-config health checks और service discovery है। यहाँ देखें ये व्यवहार में कैसे दिखते हैं।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/aspire-132-mongodb-efcore-data-lake/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Aspire 13.2 अभी &lt;a href="https://devblogs.microsoft.com/aspire/aspire-new-database-integrations/"&gt;दो नए database integrations&lt;/a&gt; के साथ आया है जो आपका ध्यान आकर्षित करने के लायक हैं: MongoDB Entity Framework Core और Azure Data Lake Storage। अगर आप Aspire app में EF Core के साथ MongoDB उपयोग करना चाहते थे, या proper service discovery के साथ data lake workloads wire up करने की ज़रूरत थी, तो यह release दोनों deliver करती है।&lt;/p&gt;
&lt;h2 id="mongodb-meets-ef-core-in-aspire"&gt;MongoDB meets EF Core in Aspire&lt;/h2&gt;
&lt;p&gt;यह वो है जिसके बारे में मैं सबसे ज़्यादा excited हूँ। Aspire ने काफी समय से MongoDB को support किया है, लेकिन यह हमेशा raw driver था — कोई EF Core नहीं, कोई &lt;code&gt;DbContext&lt;/code&gt; नहीं, documents के खिलाफ कोई LINQ queries नहीं। अब आपको MongoDB के साथ पूरा EF Core experience मिलता है, plus Aspire के automatic health checks और service discovery।&lt;/p&gt;
&lt;p&gt;इसे setup करना typical Aspire pattern है। अपने 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;फिर अपने consuming project में, EF Core integration जोड़ें:&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;और अपना &lt;code&gt;DbContext&lt;/code&gt; register करें:&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;वहाँ से, यह standard EF Core है। अपनी entities define करें, अपने &lt;code&gt;DbContext&lt;/code&gt; को किसी भी दूसरे provider की तरह उपयोग करें। Integration connection pooling, OpenTelemetry traces और health checks को behind the scenes handle करता है।&lt;/p&gt;
&lt;p&gt;.NET developers के लिए जो raw driver के साथ MongoDB उपयोग कर रहे थे और manually connection strings wire up कर रहे थे, यह एक अच्छा quality-of-life upgrade है। आपको Aspire की service discovery खोए बिना पूरा EF Core abstraction मिलता है।&lt;/p&gt;
&lt;h2 id="azure-data-lake-storage-परट-म-शमल-हई"&gt;Azure Data Lake Storage पार्टी में शामिल हुई&lt;/h2&gt;
&lt;p&gt;दूसरा बड़ा addition एक &lt;a href="https://aspire.dev/integrations/cloud/azure/azure-storage-datalake/"&gt;Azure Data Lake Storage (ADLS) integration&lt;/a&gt; है। अगर आप data pipelines, ETL processes, या analytics platforms बना रहे हैं, तो अब आप Data Lake resources को उसी तरह wire up कर सकते हैं जैसे आप किसी दूसरी Aspire dependency को करते हैं।&lt;/p&gt;
&lt;p&gt;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;Consuming project में:&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;कोई manual connection string management नहीं, कोई credential hunting नहीं। Aspire resources provision करता है और उन्हें inject करता है। जो लोग cloud-native .NET apps बना रहे हैं जो operational data और analytics workloads दोनों को handle करती हैं, उनके लिए यह data lake को Aspire model में एक first-class citizen जैसा महसूस कराता है।&lt;/p&gt;
&lt;h2 id="छट-fixes-ज-मयन-रखत-ह"&gt;छोटे fixes जो मायने रखते हैं&lt;/h2&gt;
&lt;p&gt;Headline features के अलावा, कुछ quality-of-life improvements भी हैं जो ध्यान देने योग्य हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;MongoDB connection string fix&lt;/strong&gt; — database name से पहले forward slash अब सही तरीके से handle होता है। अगर आप इसके आसपास काम कर रहे थे, तो आप वह workaround हटा सकते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL Server exports&lt;/strong&gt; — &lt;code&gt;Aspire.Hosting.SqlServer&lt;/code&gt; अब finer-grained control के लिए additional server configuration options export करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Emulator updates&lt;/strong&gt; — ServiceBus emulator 2.0.0, App Configuration emulator 1.0.2, और CosmosDB का preview emulator अब readiness check शामिल करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Managed Redis&lt;/strong&gt; — अब default रूप से &lt;code&gt;rediss://&lt;/code&gt; (Redis Secure) है, इसलिए connections out of the box encrypted हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;वह आखिरी वाला subtle लेकिन important है — default रूप से encrypted Redis का मतलब है production में configure करने के लिए एक कम चीज़।&lt;/p&gt;
&lt;h2 id="अत-म"&gt;अंत में&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 एक incremental release है, लेकिन MongoDB EF Core और Data Lake integrations real gaps भरते हैं। अगर आप Aspire में MongoDB के साथ proper EF Core support का इंतज़ार कर रहे थे, या Data Lake को first-class dependency बनाने की ज़रूरत थी, तो &lt;a href="https://get.aspire.dev"&gt;13.2 पर upgrade करें&lt;/a&gt; और इन्हें आज़माएं। &lt;code&gt;aspire add&lt;/code&gt; command आपको ज़रूरत की सब कुछ scaffold कर देती है।&lt;/p&gt;
&lt;p&gt;अधिक details के लिए &lt;a href="https://aspire.dev/whats-new/aspire-13-2/#-integrations-updates"&gt;full release notes&lt;/a&gt; पढ़ें, और पूरी list के लिए &lt;a href="https://aspire.dev/integrations/gallery/"&gt;integration gallery&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>azd update — आपके सभी Package Managers को एक Command से संभालें</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>Azure Developer CLI में अब एक universal update command है जो काम करती है चाहे आपने इसे कैसे भी install किया हो — winget, Homebrew, Chocolatey, या install script।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;आपने वो &amp;ldquo;azd का नया version उपलब्ध है&amp;rdquo; message ज़रूर देखा होगा जो हर कुछ हफ्तों में pop up होता है? वो जिसे आप dismiss कर देते हैं क्योंकि आपको याद नहीं कि आपने &lt;code&gt;azd&lt;/code&gt; winget से install किया था, Homebrew से, या उस curl script से जो आपने छह महीने पहले चलाई थी? हाँ, यह finally ठीक हो गया।&lt;/p&gt;
&lt;p&gt;Microsoft ने &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;&lt;code&gt;azd update&lt;/code&gt;&lt;/a&gt; ship किया है — एक single command जो Azure Developer CLI को latest version में update करती है चाहे आपने इसे originally कैसे भी install किया हो। Windows, macOS, Linux — कोई फर्क नहीं। एक command।&lt;/p&gt;
&lt;h2 id="यह-कस-कम-करत-ह"&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;azd update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;बस इतना ही। अगर आप नए features का early access चाहते हैं, तो आप daily insiders build पर switch कर सकते हैं:&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;Command आपकी current installation method detect करती है और under the hood appropriate update mechanism use करती है। अब &amp;ldquo;रुको, इस machine पर मैंने winget use किया था या choco?&amp;rdquo; नहीं।&lt;/p&gt;
&lt;h2 id="छट-स-catch"&gt;छोटी सी catch&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd update&lt;/code&gt; version 1.23.x से शुरू होकर ship होती है। अगर आप पुराने version पर हैं, तो आपको अपनी original installation method से एक आखिरी manual update करनी होगी। उसके बाद, &lt;code&gt;azd update&lt;/code&gt; सब कुछ forward में handle करेगा।&lt;/p&gt;
&lt;p&gt;&lt;code&gt;azd version&lt;/code&gt; से अपना current version check करें। अगर आपको fresh install की ज़रूरत है, &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;install docs&lt;/a&gt; में सब है।&lt;/p&gt;
&lt;h2 id="यह-कय-मयन-रखत-ह"&gt;यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;यह एक छोटा quality-of-life improvement है, लेकिन उन लोगों के लिए जो daily basis पर Azure पर AI agents और Aspire apps deploy करने के लिए &lt;code&gt;azd&lt;/code&gt; use करते हैं, current रहने का मतलब है कम &amp;ldquo;यह bug तो latest version में already fix हो गया था&amp;rdquo; moments। एक कम चीज़ जिसके बारे में सोचना पड़े।&lt;/p&gt;
&lt;p&gt;अधिक context के लिए &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;पूरी announcement&lt;/a&gt; और Jon Gallant का &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;deeper dive&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps Server अप्रैल 2026 पैच — PR Completion फिक्स और Security अपडेट</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/</guid><description>Azure DevOps Server को Patch 3 मिला है जिसमें PR completion विफलताओं का फिक्स, बेहतर sign-out validation, और GitHub Enterprise Server PAT कनेक्शन की बहाली शामिल है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-devops-server-april-2026-patch/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;self-hosted Azure DevOps Server चला रही teams के लिए एक ज़रूरी सूचना: Microsoft ने &lt;a href="https://devblogs.microsoft.com/devops/april-patches-for-azure-devops-server/"&gt;अप्रैल 2026 के लिए Patch 3&lt;/a&gt; release किया है जिसमें तीन targeted fixes हैं।&lt;/p&gt;
&lt;h2 id="कय-ठक-कय-गय"&gt;क्या ठीक किया गया&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pull request completion failures&lt;/strong&gt; — work item auto-completion के दौरान एक null reference exception से PR merges fail हो सकती थीं। अगर आपको random PR completion errors आती थीं, तो संभवतः यही कारण था&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sign-out redirect validation&lt;/strong&gt; — sign-out के दौरान संभावित malicious redirects को रोकने के लिए बेहतर validation। यह एक security fix है जिसे जल्दी लागू करना उचित है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Enterprise Server PAT connections&lt;/strong&gt; — GitHub Enterprise Server में Personal Access Token connections बनाना टूटा हुआ था, अब यह ठीक हो गया है&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="update-कस-कर"&gt;Update कैसे करें&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://aka.ms/devopsserverpatch3"&gt;Patch 3&lt;/a&gt; download करें और installer चलाएं। यह verify करने के लिए कि patch लागू हुआ है:&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;अगर आप Azure DevOps Server on-premises चला रहे हैं, तो Microsoft दृढ़ता से सुरक्षा और विश्वसनीयता दोनों के लिए नवीनतम patch पर रहने की सलाह देता है। पूरी जानकारी के लिए &lt;a href="https://learn.microsoft.com/azure/devops/server/release-notes/azuredevopsserver?view=azure-devops#azure-devops-server-patch-3-release-date-april-14-2026"&gt;release notes&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Azure Smart Tier GA हुआ — Lifecycle Rules के बिना स्वचालित Blob Storage लागत अनुकूलन</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/</guid><description>Azure Blob Storage smart tier अब generally available है, जो वास्तविक access patterns के आधार पर objects को hot, cool, और cold tiers के बीच स्वचालित रूप से ले जाता है — कोई lifecycle rules ज़रूरी नहीं।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-smart-tier-blob-storage-ga/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आपने कभी Azure Blob Storage lifecycle policies tune करने में समय बिताया है और फिर देखा है कि access patterns बदलने पर वे ध्वस्त हो जाती हैं, तो यह खबर आपके लिए है। Microsoft ने Azure Blob और Data Lake Storage के लिए &lt;a href="https://azure.microsoft.com/en-us/blog/optimize-object-storage-costs-automatically-with-smart-tier-now-generally-available/"&gt;smart tier की general availability की घोषणा की&lt;/a&gt; — यह एक fully managed tiering capability है जो वास्तविक उपयोग के आधार पर objects को hot, cool, और cold tiers के बीच स्वचालित रूप से ले जाती है।&lt;/p&gt;
&lt;h2 id="smart-tier-वसतव-म-कय-करत-ह"&gt;Smart tier वास्तव में क्या करता है&lt;/h2&gt;
&lt;p&gt;अवधारणा सीधी है: smart tier आपके storage account में हर object के last access time का लगातार मूल्यांकन करता है। बार-बार access होने वाला data hot में रहता है, 30 दिनों बाद निष्क्रिय data cool में चला जाता है, और फिर 60 दिनों बाद cold में। जब data फिर से access होता है, तो वो तुरंत hot पर वापस आ जाता है। चक्र फिर से शुरू होता है।&lt;/p&gt;
&lt;p&gt;Configure करने के लिए कोई lifecycle rules नहीं। Access pattern predictions नहीं। कोई manual tuning नहीं।&lt;/p&gt;
&lt;p&gt;Preview के दौरान, Microsoft ने बताया कि &lt;strong&gt;smart-tier-managed capacity का 50% से अधिक हिस्सा actual access patterns के आधार पर स्वचालित रूप से cooler tiers में चला गया&lt;/strong&gt;। बड़े storage accounts के लिए यह एक सार्थक cost reduction है।&lt;/p&gt;
&lt;h2 id="net-developers-क-लए-यह-कय-मयन-रखत-ह"&gt;.NET developers के लिए यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;अगर आप ऐसी applications बना रहे हैं जो logs, telemetry, analytics data, या किसी भी तरह का growing data estate generate करती हैं — और सच में, कौन नहीं बना रहा — तो storage costs तेज़ी से बढ़ती हैं। पारंपरिक approach थी lifecycle management policies लिखना, उन्हें test करना, और फिर जब app के access patterns बदलें तो फिर से tune करना। Smart tier उस पूरे workflow को हटा देता है।&lt;/p&gt;
&lt;p&gt;कुछ व्यावहारिक scenarios जहाँ यह मदद करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Application telemetry और logs&lt;/strong&gt; — debugging के समय hot, कुछ हफ्तों बाद शायद ही access&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data pipelines और ETL outputs&lt;/strong&gt; — processing के दौरान भारी access, फिर mostly cold&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;User-generated content&lt;/strong&gt; — recent uploads hot हैं, पुराना content धीरे-धीरे ठंडा होता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Backup और archival data&lt;/strong&gt; — compliance के लिए कभी-कभी access, mostly idle&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="इस-setup-करन"&gt;इसे Setup करना&lt;/h2&gt;
&lt;p&gt;Smart tier enable करना एक बार का configuration है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;नए accounts&lt;/strong&gt;: storage account creation के दौरान smart tier को default access tier के रूप में चुनें (zonal redundancy ज़रूरी है)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;मौजूदा accounts&lt;/strong&gt;: अपने current default से blob access tier को smart tier में switch करें&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;128 KiB से छोटे objects hot में रहते हैं और monitoring fee नहीं लगती। बाकी सब के लिए, आप standard hot/cool/cold capacity rates pay करते हैं बिना tier transition charges, early deletion fees, या data retrieval costs के। Per object एक monthly monitoring fee orchestration को cover करती है।&lt;/p&gt;
&lt;h2 id="ज-tradeoff-जनन-चहए"&gt;जो tradeoff जाननी चाहिए&lt;/h2&gt;
&lt;p&gt;Smart tier के tiering rules static हैं (30 दिन → cool, 90 दिन → cold)। अगर आपको custom thresholds चाहिए — जैसे किसी specific workload के लिए 7 दिनों में cool पर जाना — तो lifecycle rules अभी भी सही तरीका है। और दोनों को mix न करें: smart-tier-managed objects पर lifecycle rules use करने से बचें, क्योंकि वे conflict कर सकते हैं।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;यह क्रांतिकारी नहीं है, लेकिन यह एक real operational सिरदर्द हल करता है। अगर आप बढ़ते blob storage accounts manage करते हैं और lifecycle policies maintain करते-करते थक गए हैं, तो &lt;a href="https://learn.microsoft.com/en-us/azure/storage/blobs/access-tiers-smart"&gt;smart tier enable करें&lt;/a&gt; और Azure को यह handle करने दें। यह आज लगभग सभी zonal public cloud regions में उपलब्ध है।&lt;/p&gt;</content:encoded></item><item><title>Azure पर अपने AI Agents को कहाँ Host करें? एक Practical Decision Guide</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/</guid><description>Azure AI agents host करने के छह तरीके offer करता है — raw containers से लेकर fully managed Foundry Hosted Agents तक। यहाँ जानें कि अपने .NET workload के लिए सही कौन सा है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-ai-agent-hosting-options-guide/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप अभी .NET के साथ AI agents build कर रहे हैं, तो आपने शायद एक बात notice की होगी: Azure पर उन्हें host करने के &lt;em&gt;बहुत&lt;/em&gt; तरीके हैं। Container Apps, AKS, Functions, App Service, Foundry Agents, Foundry Hosted Agents — और ये सब तब तक reasonable लगते हैं जब तक आपको actually एक चुनना नहीं पड़ता। Microsoft ने हाल ही में &lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;Azure AI agent hosting का एक comprehensive guide&lt;/a&gt; publish किया है जो इसे clear करता है, और मैं इसे एक practical .NET developer perspective से break down करना चाहता हूँ।&lt;/p&gt;
&lt;h2 id="एक-नजर-म-छह-options"&gt;एक नज़र में छह options&lt;/h2&gt;
&lt;p&gt;यहाँ बताया गया है कि मैं इस landscape को कैसे summarize करूँगा:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Option&lt;/th&gt;
&lt;th&gt;सबसे अच्छा&lt;/th&gt;
&lt;th&gt;आप manage करते हैं&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;K8s complexity के बिना full container control&lt;/td&gt;
&lt;td&gt;Observability, state, lifecycle&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;Enterprise compliance, multi-cluster, custom networking&lt;/td&gt;
&lt;td&gt;सब कुछ (यही तो point है)&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;Event-driven, short-running agent tasks&lt;/td&gt;
&lt;td&gt;ज़्यादा नहीं — true serverless&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;Simple HTTP agents, predictable traffic&lt;/td&gt;
&lt;td&gt;Deployment, scaling config&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;Code-optional agents via portal/SDK&lt;/td&gt;
&lt;td&gt;लगभग कुछ नहीं&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;Custom framework agents with managed infra&lt;/td&gt;
&lt;td&gt;केवल आपका agent code&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;पहले चार general-purpose compute हैं — आप उन पर agents चला &lt;em&gt;सकते&lt;/em&gt; हैं, लेकिन वे इसके लिए design नहीं किए गए। अंतिम दो agent-native हैं: वे conversations, tool calls, और agent lifecycles को first-class concepts के रूप में समझते हैं।&lt;/p&gt;
&lt;h2 id="foundry-hosted-agents--net-agent-developers-क-लए-sweet-spot"&gt;Foundry Hosted Agents — .NET agent developers के लिए sweet spot&lt;/h2&gt;
&lt;p&gt;यहाँ जो मेरा ध्यान खींचा। Foundry Hosted Agents बीच में sit करते हैं: आपको अपना code चलाने की flexibility मिलती है (Semantic Kernel, Agent Framework, LangGraph — जो भी) लेकिन platform infrastructure, observability, और conversation management handle करता है।&lt;/p&gt;
&lt;p&gt;मुख्य piece है &lt;strong&gt;Hosting Adapter&lt;/strong&gt; — एक thin abstraction layer जो आपके agent framework को Foundry platform से bridge करता है। Microsoft Agent Framework के लिए, यह इस तरह दिखता है:&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;azure.ai.agentserver.agentframework&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;from_agent_framework&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;ChatAgent&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;chat_client&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;AzureAIAgentClient&lt;/span&gt;&lt;span class="p"&gt;(&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="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;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_local_time&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="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&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;from_agent_framework&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;)&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&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;यही आपकी पूरी hosting story है। Adapter protocol translation, server-sent events के ज़रिये streaming, conversation history, और OpenTelemetry tracing handle करता है — सब automatically। कोई custom middleware नहीं, कोई manual plumbing नहीं।&lt;/p&gt;
&lt;h2 id="deploy-करन-genuinely-simple-ह"&gt;Deploy करना genuinely simple है&lt;/h2&gt;
&lt;p&gt;मैंने पहले Container Apps पर agents deploy किए हैं और यह काम करता है, लेकिन आप state management और observability के लिए काफी glue code लिखते हैं। Hosted Agents और &lt;code&gt;azd&lt;/code&gt; के साथ, deployment है:&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;# AI agent extension install करें&lt;/span&gt;
&lt;/span&gt;&lt;/span&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;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Template से init करें&lt;/span&gt;
&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;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Build, push, deploy — हो गया&lt;/span&gt;
&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;वह single &lt;code&gt;azd up&lt;/code&gt; आपका container build करता है, उसे ACR में push करता है, Foundry project provision करता है, model endpoints deploy करता है, और आपका agent start करता है। पाँच steps एक command में।&lt;/p&gt;
&lt;h2 id="built-in-conversation-management"&gt;Built-in conversation management&lt;/h2&gt;
&lt;p&gt;यही production में सबसे ज़्यादा समय बचाता है। अपना conversation state store बनाने की बजाय, Hosted Agents इसे natively handle करते हैं:&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="c1"&gt;# एक persistent conversation बनाएं&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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="c1"&gt;# पहला turn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&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;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;agent_reference&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;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MyAgent&amp;#34;&lt;/span&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;agent_reference&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="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Remember: my favorite number is 42.&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="c1"&gt;# दूसरा turn — context preserve होता है&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;response2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&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;extra_body&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;agent_reference&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;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;MyAgent&amp;#34;&lt;/span&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;agent_reference&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="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Multiply my favorite number by 10.&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;कोई Redis नहीं। कोई Cosmos DB session store नहीं। Message serialization के लिए कोई custom middleware नहीं। Platform बस इसे handle कर लेता है।&lt;/p&gt;
&lt;h2 id="मर-decision-framework"&gt;मेरा decision framework&lt;/h2&gt;
&lt;p&gt;सभी छह options को देखने के बाद, यह मेरा quick mental model है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;क्या आपको zero infrastructure चाहिए?&lt;/strong&gt; → Foundry Agents (portal/SDK, no containers)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;क्या आपके पास custom agent code है लेकिन managed hosting चाहिए?&lt;/strong&gt; → Foundry Hosted Agents&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;क्या आपको event-driven, short-lived agent tasks चाहिए?&lt;/strong&gt; → Azure Functions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;क्या आपको K8s के बिना maximum container control चाहिए?&lt;/strong&gt; → Container Apps&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;क्या आपको strict compliance और multi-cluster चाहिए?&lt;/strong&gt; → AKS&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;क्या आपके पास predictable traffic वाला simple HTTP agent है?&lt;/strong&gt; → App Service&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Semantic Kernel या Microsoft Agent Framework के साथ build करने वाले ज़्यादातर .NET developers के लिए, Hosted Agents likely सही starting point है। आपको scale-to-zero, built-in OpenTelemetry, conversation management, और framework flexibility मिलती है — Kubernetes manage किए बिना या अपनी observability stack wire up किए बिना।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Azure पर agent hosting landscape तेज़ी से mature हो रहा है। अगर आप आज एक नया AI agent project शुरू कर रहे हैं, तो habit से Container Apps या AKS पर जाने से पहले Foundry Hosted Agents को seriously consider करें। Managed infrastructure real time बचाती है, और hosting adapter pattern आपको अपना framework choice रखने देता है।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/all-things-azure/hostedagent/"&gt;Microsoft का पूरा guide&lt;/a&gt; और working examples के लिए &lt;a href="https://github.com/microsoft-foundry/foundry-samples/tree/main/samples/python/hosted-agents"&gt;Foundry Samples repo&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>.NET में Agent Skills अब काफी लचीली हो गई हैं</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/</guid><description>Microsoft Agent Framework अब skills बनाने के तीन तरीके support करता है — files, classes, और inline code — सभी एक single provider के ज़रिए compose होते हैं। यह क्यों मायने रखता है और हर एक को कैसे use करें।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/agent-skills-dotnet-three-authoring-patterns/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप Microsoft Agent Framework के साथ agents बना रहे हैं, तो आप यह drill जानते हैं: skills define करें, उन्हें provider में wire करें, और agent को decide करने दें कि कौन-सी invoke करनी है। नया यह है कि आप उन skills को &lt;em&gt;कैसे&lt;/em&gt; बनाते हैं — और flexibility में जो उछाल आई है वह काफी बड़ी है।&lt;/p&gt;
&lt;p&gt;ताज़ा update agent skills के लिए तीन अलग authoring patterns introduce करता है: &lt;strong&gt;file-based&lt;/strong&gt;, &lt;strong&gt;class-based&lt;/strong&gt;, और &lt;strong&gt;inline code-defined&lt;/strong&gt;। तीनों एक single &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt; में plug होते हैं, यानी आप बिना किसी routing logic या special glue code के mix और match कर सकते हैं। चलिए हर एक को walk through करते हैं और देखते हैं कि आप उसे कब choose करेंगे।&lt;/p&gt;
&lt;h2 id="file-based-skills-शरआत-बद"&gt;File-based skills: शुरुआती बिंदु&lt;/h2&gt;
&lt;p&gt;File-based skills बिल्कुल वैसी ही हैं जैसी सुनाई देती हैं — disk पर एक directory जिसमें &lt;code&gt;SKILL.md&lt;/code&gt; file, optional scripts, और reference documents हों। अपने agent को नई capabilities देने का यह सबसे सीधा तरीका है:&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;&lt;code&gt;SKILL.md&lt;/code&gt; frontmatter skill का name और description declare करता है, और instructions section agent को बताता है कि scripts और references कैसे use करें:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-markdown" data-lang="markdown"&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;name: onboarding-guide
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;description: &amp;gt;-
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; Walk new hires through their first-week setup checklist.
&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="gu"&gt;## Instructions
&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;1.&lt;/span&gt; Ask for the employee&amp;#39;s name and start date.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;2.&lt;/span&gt; Run &lt;span class="sb"&gt;`scripts/check-provisioning.py`&lt;/span&gt; to verify accounts.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;3.&lt;/span&gt; Walk through &lt;span class="sb"&gt;`references/onboarding-checklist.md`&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;4.&lt;/span&gt; Follow up on incomplete items.
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;फिर script execution के लिए &lt;code&gt;SubprocessScriptRunner.RunAsync&lt;/code&gt; के साथ wire up करें:&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;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;AIAgent&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;AzureOpenAIClient&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;Uri&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="k"&gt;new&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 class="n"&gt;GetResponsesClient&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 class="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;ChatClientAgentOptions&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;Name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;HRAgent&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;ChatOptions&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="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;You are a helpful HR 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;AIContextProviders&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;skillsProvider&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;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;deploymentName&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;Agent skill को automatically discover करता है और account status check करने की ज़रूरत पड़ने पर provisioning script invoke करता है। साफ और सरल।&lt;/p&gt;
&lt;h2 id="class-based-skills-nuget-क-जरए-ship-कर"&gt;Class-based skills: NuGet के ज़रिए ship करें&lt;/h2&gt;
&lt;p&gt;Teams के लिए यहाँ दिलचस्प बात है। Class-based skills &lt;code&gt;AgentClassSkill&amp;lt;T&amp;gt;&lt;/code&gt; से derive होती हैं और &lt;code&gt;[AgentSkillResource]&lt;/code&gt; और &lt;code&gt;[AgentSkillScript]&lt;/code&gt; जैसे attributes use करती हैं ताकि framework reflection के ज़रिए सब कुछ discover कर सके:&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kd"&gt;protected&lt;/span&gt; &lt;span class="kd"&gt;override&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;Instructions&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Read&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;available&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;plans&lt;/span&gt; &lt;span class="n"&gt;resource&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="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Confirm&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;plan&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;wants&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="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;enroll&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;complete&lt;/span&gt; &lt;span class="n"&gt;enrollment&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;&amp;#34;&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;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; [AgentSkillResource(&amp;#34;available-plans&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; [Description(&amp;#34;Plan options with monthly pricing.&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;public&lt;/span&gt; &lt;span class="kt"&gt;string&lt;/span&gt; &lt;span class="n"&gt;AvailablePlans&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;##&lt;/span&gt; &lt;span class="n"&gt;Available&lt;/span&gt; &lt;span class="n"&gt;Plans&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;2026&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;Health&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="n"&gt;HMO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Premium&lt;/span&gt; &lt;span class="n"&gt;PPO&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;45&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&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;Dental&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Standard&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;Enhanced&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;25&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&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;Vision&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Basic&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="m"&gt;8&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;month&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;&amp;#34;&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;
&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="na"&gt; [Description(&amp;#34;Enrolls employee in the specified benefit plan.&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;यहाँ खूबसूरती यह है कि एक team इसे NuGet package के रूप में package कर सकती है। आप इसे अपने project में add करें, builder में drop करें, और यह आपकी file-based skills के साथ बिना किसी coordination के काम करता है:&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;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;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;p&gt;दोनों skills agent के system prompt में दिखाई देती हैं। Agent conversation के आधार पर decide करता है कि कौन-सी use करनी है — कोई routing code नहीं चाहिए।&lt;/p&gt;
&lt;h2 id="inline-skills-तवरत-bridge"&gt;Inline skills: त्वरित bridge&lt;/h2&gt;
&lt;p&gt;वह पल जब आप जानते हैं कि दूसरी team ठीक वही skill बना रही है जो आपको चाहिए, लेकिन वह एक sprint के लिए ship नहीं होगी? &lt;code&gt;AgentInlineSkill&lt;/code&gt; आपका bridge है:&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;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="m"&gt;1.&lt;/span&gt; &lt;span class="n"&gt;Ask&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;employee&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;not&lt;/span&gt; &lt;span class="n"&gt;provided&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="m"&gt;2.&lt;/span&gt; &lt;span class="n"&gt;Use&lt;/span&gt; &lt;span class="n"&gt;calculate&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;balance&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;balance&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="m"&gt;3.&lt;/span&gt; &lt;span class="n"&gt;Present&lt;/span&gt; &lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="n"&gt;and&lt;/span&gt; &lt;span class="n"&gt;remaining&lt;/span&gt; &lt;span class="n"&gt;days&lt;/span&gt; &lt;span class="n"&gt;clearly&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;&amp;#34;&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 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;totalDays&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="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;daysUsed&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;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="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;totalDays&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="n"&gt;daysUsed&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;totalDays&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;daysUsed&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;इसे दूसरों की तरह ही builder में add करें:&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;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;p&gt;जब NuGet package आखिरकार ship होगा, तो आप inline skill को class-based से swap कर देते हैं। Agent को फ़र्क नहीं पड़ता।&lt;/p&gt;
&lt;p&gt;लेकिन inline skills सिर्फ bridge के लिए नहीं हैं। ये तब भी सही choice हैं जब आपको runtime पर dynamically skills generate करनी हों — config से load की गई हर business unit के लिए एक skill सोचें — या जब किसी script को local state पर close करना हो जो किसी DI container में नहीं जाती।&lt;/p&gt;
&lt;h2 id="script-approval-human-in-the-loop"&gt;Script approval: human-in-the-loop&lt;/h2&gt;
&lt;p&gt;Production agents बनाने वाले हम .NET developers के लिए, यह वह हिस्सा है जो deployment conversations को actually unblock करता है। कुछ scripts के real consequences होते हैं — किसी को benefits में enroll करना, production infra query करना। &lt;code&gt;UseScriptApproval&lt;/code&gt; on करें और agent किसी भी script execute करने से पहले रुक जाता है:&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;p&gt;जब agent कोई script run करना चाहता है, तो वह approval request return करता है। आपकी app decision collect करती है — approve या reject — और agent उसी के अनुसार continue करता है। Regulated environments में, यही फ़र्क है &amp;ldquo;हम इसे deploy कर सकते हैं&amp;rdquo; और &amp;ldquo;legal ने मना कर दिया&amp;rdquo; के बीच।&lt;/p&gt;
&lt;h2 id="यह-combination-कय-मयन-रखत-ह"&gt;यह combination क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;असली power कोई एक authoring pattern नहीं है — यह composition है। आप:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;छोटे से शुरू कर सकते हैं&lt;/strong&gt; file-based skill से, instructions पर iterate करें, और बिना C# लिखे ship करें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Reusable skills ship कर सकते हैं&lt;/strong&gt; NuGet packages के रूप में जिन्हें दूसरी teams एक line से add कर सकती हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Gaps को bridge कर सकते हैं&lt;/strong&gt; inline skills से जब आपको &lt;em&gt;अभी&lt;/em&gt; कुछ चाहिए&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shared skill directories को filter कर सकते हैं&lt;/strong&gt; predicates से ताकि आपका agent सिर्फ वही load करे जो उसे चाहिए&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Human oversight add कर सकते हैं&lt;/strong&gt; उन scripts के लिए जो production systems को touch करती हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ये सभी &lt;code&gt;AgentSkillsProviderBuilder&lt;/code&gt; के ज़रिए compose होते हैं। कोई special routing नहीं, कोई conditional logic नहीं, कोई skill type checks नहीं।&lt;/p&gt;
&lt;h2 id="wrapping-up"&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;.NET में Agent skills के पास अब एक genuinely flexible authoring model है। चाहे आप file-based skills से prototype sketch करने वाले solo developer हों या NuGet के ज़रिए packaged capabilities ship करने वाली enterprise team, patterns fit हैं। और script approval mechanism इसे उन environments के लिए production-ready बनाता है जहाँ आपको वह human checkpoint चाहिए।&lt;/p&gt;
&lt;p&gt;पूरे walkthrough के लिए &lt;a href="https://devblogs.microsoft.com/agent-framework/agent-skills-in-net-three-ways-to-author-one-provider-to-run-them/"&gt;original announcement&lt;/a&gt;, Microsoft Learn पर &lt;a href="https://learn.microsoft.com/en-us/agent-framework/agents/skills"&gt;Agent Skills documentation&lt;/a&gt;, और hands-on होने के लिए &lt;a href="https://github.com/microsoft/agent-framework/tree/main/dotnet/samples/02-agents/AgentSkills"&gt;.NET samples on GitHub&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Azure MCP Server 2.0 आया — Self-Hosted Agentic Cloud Automation यहाँ है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/</guid><description>Azure MCP Server 2.0 stable हो गया है self-hosted remote deployments, 57 Azure services में 276 tools, और enterprise-grade security के साथ — .NET developers के लिए क्या मायने रखता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-mcp-server-2-self-hosted-agentic-cloud/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप हाल ही में MCP और Azure के साथ कुछ build कर रहे हैं, तो आप शायद जानते हैं कि local experience अच्छी तरह काम करती है। लेकिन जब आपको यह setup team भर में share करना हो? वहाँ चीजें complicated हो जाती थीं।&lt;/p&gt;
&lt;p&gt;अब नहीं। Azure MCP Server &lt;a href="https://devblogs.microsoft.com/azure-sdk/announcing-azure-mcp-server-2-0-stable-release/"&gt;2.0 stable हो गया&lt;/a&gt;, और headline feature वही है जो enterprise teams ने माँगी थी: &lt;strong&gt;self-hosted remote MCP server support&lt;/strong&gt;।&lt;/p&gt;
&lt;h2 id="azure-mcp-server-कय-ह"&gt;Azure MCP Server क्या है?&lt;/h2&gt;
&lt;p&gt;Azure MCP Server &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro"&gt;Model Context Protocol&lt;/a&gt; specification implement करता है और Azure capabilities को structured, discoverable tools के रूप में expose करता है। Numbers खुद बोलते हैं: &lt;strong&gt;57 Azure services में 276 MCP tools&lt;/strong&gt;।&lt;/p&gt;
&lt;h2 id="बड-बत-self-hosted-remote-deployments"&gt;बड़ी बात: self-hosted remote deployments&lt;/h2&gt;
&lt;p&gt;Real team scenario में आपको चाहिए:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developers और internal agent systems के लिए shared access&lt;/li&gt;
&lt;li&gt;Centralized configuration&lt;/li&gt;
&lt;li&gt;Enterprise network और policy boundaries&lt;/li&gt;
&lt;li&gt;CI/CD pipelines में integration&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 यह सब address करता है। Auth के लिए दो options:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Managed Identity&lt;/strong&gt; — &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;On-Behalf-Of (OBO) flow&lt;/strong&gt; — user के actual permissions के साथ&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="security-hardening"&gt;Security hardening&lt;/h2&gt;
&lt;p&gt;2.0 release में जोड़ा गया:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stronger endpoint validation&lt;/li&gt;
&lt;li&gt;Query-oriented tools में injection patterns के खिलाफ protection&lt;/li&gt;
&lt;li&gt;Dev environments के लिए tighter isolation controls&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="getting-started"&gt;Getting started&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; — source code, docs&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; — containerized deployment&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/download/vscode"&gt;VS Code Extension&lt;/a&gt;&lt;/strong&gt; — IDE integration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://aka.ms/azmcp/self-host"&gt;Self-hosting guide&lt;/a&gt;&lt;/strong&gt; — 2.0 का flagship feature&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Azure MCP Server 2.0 enterprise teams के लिए MCP को real agentic workflows के लिए ready बनाता है।&lt;/p&gt;</content:encoded></item><item><title>.NET Aspire 13.2 आपके AI Agent का सबसे अच्छा दोस्त बनना चाहता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>Aspire 13.2 agentic development पर पूरी तरह दांव लगाता है — structured CLI output, isolated runs, auto-healing environments, और full OpenTelemetry data ताकि आपके AI agents वास्तव में आपके apps build, run और observe कर सकें।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;क्या आप जानते हैं वह moment जब आपका AI coding agent कुछ solid code लिखता है, आप excited हो जाते हैं, और फिर वह चीज़ चलाने की कोशिश में सब बिखर जाता है? Port conflicts, phantom processes, गलत environment variables — अचानक आपका agent features बनाने की जगह startup issues troubleshoot करने में tokens जला रहा है।&lt;/p&gt;
&lt;p&gt;Aspire team ने &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;एक thoughtful post&lt;/a&gt; छोड़ी है इसी problem के बारे में, और उनका जवाब compelling है: Aspire 13.2 सिर्फ humans के लिए नहीं, बल्कि AI agents के लिए भी design किया गया है।&lt;/p&gt;
&lt;h2 id="aspire-as-agent-infrastructure"&gt;Aspire as agent infrastructure&lt;/h2&gt;
&lt;p&gt;यहाँ है Aspire 13.2 agentic development के लिए क्या लाता है:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Typed code में पूरा stack।&lt;/strong&gt; AppHost पूरी topology define करता है — compilable TypeScript या C# में:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="kr"&gt;from&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;./.modules/aspire.js&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;createBuilder&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;postgres&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addPostgres&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;pg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;addDatabase&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;catalog&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;cache&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addRedis&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cache&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kr"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addNodeApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./api&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;src/index.ts&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withHttpEndpoint&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;PORT&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;postgres&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cache&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;addViteApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./frontend&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;withReference&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;waitFor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;api&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;builder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;build&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;एक command सब कुछ के लिए।&lt;/strong&gt; &lt;code&gt;docker compose up&lt;/code&gt;, &lt;code&gt;npm run dev&lt;/code&gt;, और database startup scripts juggle करने के बजाय, सब कुछ बस &lt;code&gt;aspire start&lt;/code&gt; है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Parallel agents के लिए isolated mode।&lt;/strong&gt; &lt;code&gt;--isolated&lt;/code&gt; के साथ, हर Aspire run को अपने random ports और separate user secrets मिलते हैं।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Telemetry के माध्यम से agent की नज़र।&lt;/strong&gt; Aspire CLI development के दौरान full OpenTelemetry data expose करता है — traces, metrics, structured logs।&lt;/p&gt;
&lt;h2 id="bowling-bumper-analogy"&gt;Bowling bumper analogy&lt;/h2&gt;
&lt;p&gt;Aspire team एक बढ़िया analogy उपयोग करती है: Aspire को AI agents के लिए bowling lane bumpers के रूप में सोचें। अगर agent perfect नहीं है, तो bumpers उसे gutter balls फेंकने से रोकते हैं।&lt;/p&gt;
&lt;h2 id="शरआत-करन"&gt;शुरुआत करना&lt;/h2&gt;
&lt;p&gt;Aspire में नए हैं? &lt;a href="https://get.aspire.dev"&gt;get.aspire.dev&lt;/a&gt; से CLI install करें। पहले से Aspire use कर रहे हैं? &lt;code&gt;aspire update --self&lt;/code&gt; चलाएं। &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;पूरी post&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>Agentic Platform Engineering हकीकत बन रही है — Git-APE दिखाता है कैसे</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/</guid><description>Microsoft का Git-APE project agentic platform engineering को व्यवहार में लाता है — GitHub Copilot agents और Azure MCP का उपयोग करके natural-language requests को validated cloud infrastructure में बदलता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/agentic-platform-engineering-git-ape/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Platform engineering उन terms में से एक रही है जो conference talks में बहुत अच्छी लगती है, लेकिन आमतौर पर इसका मतलब होता है &amp;ldquo;हमने एक internal portal और एक Terraform wrapper बनाया।&amp;rdquo; असली वादा — self-service infrastructure जो वास्तव में safe, governed और fast हो — हमेशा कुछ कदम दूर रही है।&lt;/p&gt;
&lt;p&gt;Azure team ने अभी &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;अपनी agentic platform engineering series का Part 2 प्रकाशित किया&lt;/a&gt;, और यह पूरी तरह hands-on implementation के बारे में है। वे इसे &lt;strong&gt;Git-APE&lt;/strong&gt; कहते हैं (हाँ, acronym जानबूझकर है), और यह एक open-source project है जो GitHub Copilot agents plus Azure MCP servers का उपयोग करके natural-language requests को validated, deployed infrastructure में बदलता है।&lt;/p&gt;
&lt;h2 id="git-ape-वसतव-म-कय-करत-ह"&gt;Git-APE वास्तव में क्या करता है&lt;/h2&gt;
&lt;p&gt;मूल विचार: developers को Terraform modules सीखने, portal UIs navigate करने, या platform team को tickets file करने की बजाय, वे एक Copilot agent से बात करते हैं। Agent intent को समझता है, Infrastructure-as-Code generate करता है, उसे policies के खिलाफ validate करता है, और deploy करता है — सब VS Code के अंदर।&lt;/p&gt;
&lt;p&gt;यहाँ setup है:&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;VS Code में workspace खोलें, और agent configuration files GitHub Copilot द्वारा auto-discovered हो जाती हैं। आप agent के साथ directly interact करते हैं:&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;Agent Azure services के साथ interact करने के लिए Azure MCP Server का उपयोग करता है। VS Code settings में MCP configuration specific capabilities enable करता है:&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;azureMcp.serverMode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;namespace&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;azureMcp.enabledServices&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="s2"&gt;&amp;#34;deploy&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bestpractices&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;group&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="s2"&gt;&amp;#34;subscription&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;functionapp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;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="s2"&gt;&amp;#34;sql&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;monitor&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 class="nt"&gt;&amp;#34;azureMcp.readOnly&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&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="यह-कय-मयन-रखत-ह"&gt;यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;जो लोग Azure पर build कर रहे हैं, उनके लिए यह platform engineering की conversation को &amp;ldquo;हम एक portal कैसे बनाएं&amp;rdquo; से &amp;ldquo;हम अपने guardrails को APIs के रूप में कैसे describe करें&amp;rdquo; की ओर shift करता है। जब आपके platform का interface एक AI agent हो, तो आपके constraints और policies की गुणवत्ता ही product बन जाती है।&lt;/p&gt;
&lt;p&gt;Part 1 blog ने theory रखी: well-described APIs, control schemas, और explicit guardrails platforms को agent-ready बनाते हैं। Part 2 actual tooling ship करके साबित करता है कि यह काम करता है। Agent अंधाधुंध resources generate नहीं करता — यह best practices के खिलाफ validate करता है, naming conventions का सम्मान करता है, और आपके organization की policies लागू करता है।&lt;/p&gt;
&lt;p&gt;Clean-up भी उतनी ही आसान है:&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="मर-रय"&gt;मेरी राय&lt;/h2&gt;
&lt;p&gt;सच कहूँ तो — यह specific tool से ज़्यादा pattern के बारे में है। Git-APE खुद एक demo/reference architecture है। लेकिन underlying idea — agents आपके platform का interface, MCP protocol, GitHub Copilot host — यही वह जगह है जहाँ enterprise developer experience जा रही है।&lt;/p&gt;
&lt;p&gt;अगर आप एक platform team हैं जो देख रहे हैं कि अपने internal tooling को agent-friendly कैसे बनाएं, तो इससे बेहतर कोई starting point नहीं है। और अगर आप एक .NET developer हैं जो सोच रहे हैं कि यह आपकी दुनिया से कैसे जुड़ता है: Azure MCP Server और GitHub Copilot agents किसी भी Azure workload के साथ काम करते हैं। आपकी ASP.NET Core API, आपका .NET Aspire stack, आपके containerized microservices — यह सब एक agentic deployment flow का target हो सकता है।&lt;/p&gt;
&lt;h2 id="अत-म"&gt;अंत में&lt;/h2&gt;
&lt;p&gt;Git-APE agentic platform engineering का एक प्रारंभिक लेकिन ठोस रूप है। &lt;a href="https://github.com/Azure/git-ape"&gt;repo&lt;/a&gt; clone करें, demo आज़माएं, और सोचना शुरू करें कि आपके platform की APIs और policies को एक agent द्वारा safely उपयोग किए जाने के लिए कैसा दिखना होगा।&lt;/p&gt;
&lt;p&gt;walkthrough और video demos के लिए &lt;a href="https://devblogs.microsoft.com/all-things-azure/putting-agentic-platform-engineering-to-the-test/"&gt;पूरा post&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>Aspire का Isolated Mode Parallel Development के लिए Port Conflict के nightmare को ठीक करता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>Aspire 13.2 --isolated mode लेकर आता है: random ports, अलग secrets, और एक ही AppHost के कई instances चलाने पर शून्य collisions। AI agents, worktrees, और parallel workflows के लिए perfect।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आपने कभी एक ही project के दो instances एक साथ चलाने की कोशिश की है, तो आप इस दर्द को जानते हैं। Port 8080 already in use है। Port 17370 लिया हुआ है। कुछ terminate करो, restart करो, environment variables juggle करो — यह productivity killer है।&lt;/p&gt;
&lt;p&gt;यह समस्या बेहतर नहीं हो रही, बल्कि बदतर हो रही है। AI agents independently काम करने के लिए git worktrees बनाते हैं। Background agents अलग environments spin up करते हैं। Developers feature branches के लिए एक ही repo को दो बार checkout करते हैं। इन सभी scenarios में एक ही दीवार आती है: एक ही app के दो instances एक ही ports पर लड़ रहे हैं।&lt;/p&gt;
&lt;p&gt;Aspire 13.2 इसे एक single flag से ठीक करता है। Aspire team के James Newton-King ने &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;पूरी जानकारी लिखी है&lt;/a&gt;, और यह उन features में से एक है जिसके बारे में आप सोचते हैं &amp;ldquo;यह पहले क्यों नहीं था&amp;rdquo;।&lt;/p&gt;
&lt;h2 id="fix---isolated"&gt;Fix: &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;बस इतना ही। हर run को मिलता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Random ports&lt;/strong&gt; — instances के बीच कोई collision नहीं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Isolated user secrets&lt;/strong&gt; — connection strings और API keys हर instance के लिए अलग रहते हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;कोई manual port reassignment नहीं। कोई environment variable juggling नहीं। हर run को automatically एक fresh, collision-free environment मिलता है।&lt;/p&gt;
&lt;h2 id="real-scenarios-जह-यह-चमकत-ह"&gt;Real scenarios जहाँ यह चमकता है&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Multiple checkouts।&lt;/strong&gt; एक directory में feature branch है और दूसरे में bugfix:&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;दोनों बिना conflicts के चलते हैं। Dashboard दिखाता है कि क्या चल रहा है और कहाँ।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;VS Code में background agents।&lt;/strong&gt; जब Copilot Chat का background agent आपके code पर independently काम करने के लिए एक git worktree बनाता है, तो उसे आपका Aspire AppHost चलाना पड़ सकता है। &lt;code&gt;--isolated&lt;/code&gt; के बिना, यह आपके primary worktree के साथ port collision है। इसके साथ, दोनों instances बस काम करते हैं।&lt;/p&gt;
&lt;p&gt;&lt;code&gt;aspire agent init&lt;/code&gt; के साथ ship होने वाली Aspire skill automatically agents को worktrees में काम करते समय &lt;code&gt;--isolated&lt;/code&gt; use करने का निर्देश देती है। तो Copilot का background agent इसे out of the box handle करना चाहिए।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Development के साथ-साथ integration tests।&lt;/strong&gt; Features build करते हुए एक live AppHost के against tests चलाने की ज़रूरत है? Isolated mode हर context को अपने ports और config देता है।&lt;/p&gt;
&lt;h2 id="यह-under-the-hood-कस-कम-करत-ह"&gt;यह under the hood कैसे काम करता है&lt;/h2&gt;
&lt;p&gt;जब आप &lt;code&gt;--isolated&lt;/code&gt; pass करते हैं, तो CLI run के लिए एक unique instance ID generate करता है। यह दो behaviors drive करता है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Port randomization&lt;/strong&gt; — आपके AppHost config में defined predictable ports को bind करने की बजाय, isolated mode सब कुछ के लिए random available ports pick करता है — dashboard, service endpoints, सब कुछ। Service discovery automatically adjust होती है, इसलिए services एक-दूसरे को ढूंढ लेती हैं चाहे वे किसी भी port पर land करें।&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Secret isolation&lt;/strong&gt; — हर isolated run को अपना user secrets store मिलता है, instance ID से keyed। एक run के connection strings और API keys दूसरे में leak नहीं होते।&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;आपके code में कोई बदलाव नहीं चाहिए। Aspire की service discovery endpoints को runtime पर resolve करती है, इसलिए सब कुछ सही से connect होता है चाहे port assignment कुछ भी हो।&lt;/p&gt;
&lt;h2 id="इस-कब-use-कर"&gt;इसे कब use करें&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;--isolated&lt;/code&gt; तब use करें जब एक ही AppHost के कई instances एक साथ चला रहे हों — चाहे वह parallel development हो, automated tests हों, AI agents हों, या git worktrees हों। Single-instance development के लिए जहाँ आप predictable ports पसंद करते हैं, regular &lt;code&gt;aspire run&lt;/code&gt; अभी भी ठीक काम करता है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Isolated mode एक छोटी feature है जो एक असली, तेज़ी से common होती समस्या को हल करती है। जैसे-जैसे AI-assisted development हमें अधिक parallel workflows की तरफ धकेलता है — multiple agents, multiple worktrees, multiple contexts — ports पर लड़ाई के बिना बस एक और instance spin up करने की क्षमता ज़रूरी है।&lt;/p&gt;
&lt;p&gt;सभी technical details के लिए &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;पूरा पोस्ट&lt;/a&gt; पढ़ें और 13.2 आज़माने के लिए &lt;code&gt;aspire update --self&lt;/code&gt; से update करें।&lt;/p&gt;</content:encoded></item><item><title>Azure Functions पर अपने MCP Servers को Foundry Agents से कनेक्ट करें — यहाँ जानिए कैसे</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/</guid><description>अपना MCP server एक बार बनाएं, Azure Functions पर deploy करें, और Microsoft Foundry agents से proper auth के साथ connect करें। आपके tools हर जगह काम करते हैं — VS Code, Cursor, और अब enterprise AI agents।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/foundry-agents-mcp-servers-azure-functions/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP ecosystem के बारे में मुझे एक बात बहुत पसंद है: आप अपना server एक बार बनाते हैं, और यह हर जगह काम करता है। VS Code, Visual Studio, Cursor, ChatGPT — हर MCP client आपके tools discover और use कर सकता है। अब Microsoft उस list में एक और consumer जोड़ रहा है: Foundry agents।&lt;/p&gt;
&lt;p&gt;Azure SDK team की Lily Ma ने &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;एक practical guide publish की है&lt;/a&gt; जो Azure Functions पर deploy किए गए MCP servers को Microsoft Foundry agents से connect करने के बारे में है। अगर आपके पास पहले से एक MCP server है, तो यह pure value-add है — कोई rebuilding की ज़रूरत नहीं।&lt;/p&gt;
&lt;h2 id="यह-combination-कय-समझ-म-आत-ह"&gt;यह combination क्यों समझ में आता है&lt;/h2&gt;
&lt;p&gt;Azure Functions आपको scalable infrastructure, built-in auth, और MCP servers host करने के लिए serverless billing देता है। Microsoft Foundry आपको AI agents देता है जो reason, plan, और actions ले सकते हैं। दोनों को connect करने का मतलब है कि आपके custom tools — database query करना, business API call करना, validation logic चलाना — ऐसी capabilities बन जाती हैं जिन्हें enterprise AI agents autonomously discover और use कर सकते हैं।&lt;/p&gt;
&lt;p&gt;मुख्य बात: आपका MCP server वैसा ही रहता है। आप बस Foundry को एक और consumer के रूप में जोड़ रहे हैं। वही tools जो आपके VS Code setup में काम करते हैं, अब एक AI agent को power करते हैं जिससे आपकी team या customers interact करते हैं।&lt;/p&gt;
&lt;h2 id="authentication-क-वकलप"&gt;Authentication के विकल्प&lt;/h2&gt;
&lt;p&gt;यहीं पर यह post वास्तव में value add करती है। आपके scenario के अनुसार चार auth methods:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Key-based&lt;/strong&gt; (default)&lt;/td&gt;
&lt;td&gt;Development या Entra auth के बिना servers&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;Managed identities के साथ production&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;Production जहाँ हर user individually authenticate करता है&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Unauthenticated&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Dev/testing या केवल public data&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Production के लिए, agent identity के साथ Microsoft Entra recommended path है। OAuth identity passthrough तब है जब user context मायने रखता है — agent users को sign in के लिए prompt करता है, और हर request user का अपना token carry करती है।&lt;/p&gt;
&lt;h2 id="इस-कस-सट-कर"&gt;इसे कैसे सेट करें&lt;/h2&gt;
&lt;p&gt;High-level flow:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;अपना MCP server Azure Functions पर deploy करें&lt;/strong&gt; — &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;.NET&lt;/a&gt;, Python, TypeScript, और Java के लिए samples उपलब्ध हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;अपने function app पर built-in MCP authentication enable करें&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;अपना endpoint URL पाएं&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;Foundry में MCP server को tool के रूप में जोड़ें&lt;/strong&gt; — portal में अपना agent navigate करें, एक नया MCP tool जोड़ें, endpoint और credentials दें&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;फिर Agent Builder playground में एक ऐसा prompt भेजकर test करें जो आपके किसी tool को trigger करे।&lt;/p&gt;
&lt;h2 id="मर-नजरय"&gt;मेरा नज़रिया&lt;/h2&gt;
&lt;p&gt;यहाँ composability की कहानी वाकई मज़बूत हो रही है। अपना MCP server एक बार .NET (या Python, TypeScript, Java) में बनाएं, Azure Functions पर deploy करें, और हर MCP-compatible client इसे use कर सकता है — coding tools, chat apps, और अब enterprise AI agents। यह एक &amp;ldquo;एक बार लिखो, हर जगह use करो&amp;rdquo; pattern है जो वास्तव में काम करता है।&lt;/p&gt;
&lt;p&gt;.NET developers के लिए विशेष रूप से, &lt;a href="https://github.com/Azure-Samples/remote-mcp-functions-dotnet"&gt;Azure Functions MCP extension&lt;/a&gt; इसे straightforward बनाता है। आप अपने tools को Azure Functions के रूप में define करें, deploy करें, और आपके पास Azure Functions की सभी security और scaling के साथ एक production-grade MCP server है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;अगर आपके पास Azure Functions पर चलने वाले MCP tools हैं, तो उन्हें Foundry agents से connect करना एक quick win है — आपके custom tools server में कोई code changes किए बिना proper auth के साथ enterprise AI capabilities बन जाते हैं।&lt;/p&gt;
&lt;p&gt;हर authentication method के step-by-step निर्देशों के लिए &lt;a href="https://devblogs.microsoft.com/azure-sdk/give-your-foundry-agent-custom-tools-with-mcp-servers-on-azure-functions/"&gt;पूरी guide&lt;/a&gt; पढ़ें, और production setups के लिए &lt;a href="https://learn.microsoft.com/azure/azure-functions/functions-mcp-foundry-tools?tabs=entra%2Cmcp-extension%2Cfoundry"&gt;detailed docs&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>GitHub Copilot का Modernization Assessment सबसे अच्छा Migration Tool है जिसे आप अभी तक Use नहीं कर रहे</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/</guid><description>GitHub Copilot का modernization extension केवल code changes suggest नहीं करता — यह actionable issues, Azure target comparisons, और collaborative workflow के साथ एक पूरी migration assessment तैयार करता है। यहाँ जानें क्यों assessment document ही सब कुछ की कुंजी है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/dotnet-modernization-assessment-github-copilot/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;एक legacy .NET Framework app को modern .NET पर migrate करना उन कामों में से एक है जो सब जानते हैं करना चाहिए, लेकिन कोई शुरू नहीं करना चाहता। यह कभी सिर्फ &amp;ldquo;target framework बदलो&amp;rdquo; नहीं होता। APIs गायब हो गई हैं, packages अब exist नहीं करते, hosting models बिल्कुल अलग तरह से काम करते हैं, और हज़ारों छोटे decisions हैं — क्या containerize करना है, क्या rewrite करना है, और क्या छोड़ना है।&lt;/p&gt;
&lt;p&gt;Jeffrey Fritz ने &lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;GitHub Copilot के modernization assessment का विस्तृत विश्लेषण&lt;/a&gt; publish किया है, और सच में? .NET के लिए यह सबसे अच्छा migration tooling है जो मैंने देखा है। Code generation की वजह से नहीं — वह तो अब baseline है। बल्कि उस assessment document की वजह से जो यह तैयार करता है।&lt;/p&gt;
&lt;h2 id="यह-सरफ-code-suggestion-engine-नह-ह"&gt;यह सिर्फ Code Suggestion Engine नहीं है&lt;/h2&gt;
&lt;p&gt;VS Code extension एक &lt;strong&gt;Assess → Plan → Execute&lt;/strong&gt; model follow करता है। Assessment phase आपके पूरे codebase का विश्लेषण करती है और एक structured document तैयार करती है जो सब कुछ capture करती है: क्या बदलने की ज़रूरत है, कौन-से Azure resources provision करने हैं, कौन-सा deployment model उपयोग करना है। Infrastructure-as-code, containerization, deployment manifests — सब कुछ assessment के findings से निकलता है।&lt;/p&gt;
&lt;p&gt;Assessment आपके project में &lt;code&gt;.github/modernize/assessment/&lt;/code&gt; के अंतर्गत store होती है। हर run एक independent report तैयार करता है, इसलिए आप एक history बनाते हैं और track कर सकते हैं कि जैसे-जैसे आप issues fix करते हैं आपकी migration posture कैसे evolve होती है।&lt;/p&gt;
&lt;h2 id="शर-करन-क-द-तरक"&gt;शुरू करने के दो तरीके&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Recommended Assessment&lt;/strong&gt; — fast path। Curated domains (Java/.NET Upgrade, Cloud Readiness, Security) में से चुनें और configuration को छुए बिना meaningful results प्राप्त करें। यह देखने के लिए excellent है कि आपकी app कहाँ खड़ी है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom Assessment&lt;/strong&gt; — targeted path। ठीक वही configure करें जो analyze करना है: target compute (App Service, AKS, Container Apps), target OS, containerization analysis। Migration approaches की side-by-side तुलना के लिए multiple Azure targets चुनें।&lt;/p&gt;
&lt;p&gt;वह comparison view सच में उपयोगी है। App Service के लिए 3 mandatory issues वाली एक app के लिए AKS पर 7 हो सकती हैं। दोनों देखने से migration path commit करने से पहले hosting decision drive करने में मदद मिलती है।&lt;/p&gt;
&lt;h2 id="issue-breakdown-actionable-ह"&gt;Issue Breakdown Actionable है&lt;/h2&gt;
&lt;p&gt;हर issue एक criticality level के साथ आती है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mandatory&lt;/strong&gt; — ठीक करना ज़रूरी है या migration fail होगी&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Potential&lt;/strong&gt; — migration को affect कर सकती है, human judgment ज़रूरी है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Optional&lt;/strong&gt; — recommended improvements, migration block नहीं करेंगी&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;और हर issue affected files और line numbers से link करती है, बताती है कि क्या गलत है और आपके target platform के लिए यह क्यों मायने रखता है, concrete remediation steps देती है (सिर्फ &amp;ldquo;यह ठीक करो&amp;rdquo; नहीं), और official documentation के links include करती है।&lt;/p&gt;
&lt;p&gt;आप individual issues developers को सौंप सकते हैं और उनके पास act करने के लिए सब कुछ है। यही फ़र्क है एक ऐसे tool में जो आपको &amp;ldquo;एक problem है&amp;rdquo; बताता है और एक जो आपको बताता है कि इसे कैसे solve करना है।&lt;/p&gt;
&lt;h2 id="covered-upgrade-paths"&gt;Covered Upgrade Paths&lt;/h2&gt;
&lt;p&gt;.NET के लिए specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET Framework → .NET 10&lt;/li&gt;
&lt;li&gt;ASP.NET → ASP.NET Core&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;हर upgrade path में detection rules हैं जो जानती हैं कि कौन-से APIs हटाए गए, कौन-से patterns का कोई direct equivalent नहीं है, और किन security issues पर ध्यान देना है।&lt;/p&gt;
&lt;p&gt;Multiple apps manage करने वाली teams के लिए, एक CLI भी है जो multi-repo batch assessments support करती है — सभी repos clone करें, सभी assess करें, per-app reports और एक aggregated portfolio view प्राप्त करें।&lt;/p&gt;
&lt;h2 id="मर-रय"&gt;मेरी राय&lt;/h2&gt;
&lt;p&gt;अगर आप legacy .NET Framework apps पर बैठे हैं (और सच में, ज़्यादातर enterprise teams ऐसी ही हैं), तो यही &lt;em&gt;वह&lt;/em&gt; tool है जिससे शुरू करना चाहिए। Assessment document अकेले समय के लायक है — यह एक अस्पष्ट &amp;ldquo;हमें modernize करना चाहिए&amp;rdquo; को स्पष्ट, prioritized work items की एक concrete list में बदलता है जिनके आगे बढ़ने के clear paths हैं।&lt;/p&gt;
&lt;p&gt;Collaborative workflow भी smart है: assessments export करें, अपनी team के साथ share करें, बिना re-run किए import करें। Architecture reviews जहाँ decision-makers वे नहीं हैं जो tools चला रहे हैं? Covered।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;GitHub Copilot का modernization assessment .NET migration को एक डरावने, undefined project से एक structured, trackable process में बदलता है। अपना current status देखने के लिए recommended assessment से शुरू करें, फिर Azure targets की तुलना करने और अपना migration plan बनाने के लिए custom assessments उपयोग करें।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/dotnet/your-migrations-source-of-truth-the-modernization-assessment/"&gt;पूरा walkthrough&lt;/a&gt; पढ़ें और अपने codebase पर इसे आज़माने के लिए &lt;a href="https://aka.ms/ghcp-appmod/vscode-ext"&gt;VS Code extension&lt;/a&gt; लें।&lt;/p&gt;</content:encoded></item><item><title>MCP Apps को Fluent API मिला — .NET में तीन Steps में Rich AI Tool UIs बनाएं</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/</guid><description>Azure Functions पर MCP Apps के लिए नया fluent configuration API आपको किसी भी .NET MCP tool को कुछ ही lines of code में views, permissions, और CSP policies के साथ एक full app में बदलने देता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/mcp-fluent-api-azure-functions-dotnet/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP tools AI agents को capabilities देने के लिए बेहतरीन हैं। लेकिन क्या होगा अगर आपके tool को user को कुछ दिखाना हो — एक dashboard, एक form, एक interactive visualization? यहीं MCP Apps काम आते हैं, और उन्हें build करना अब बहुत आसान हो गया है।&lt;/p&gt;
&lt;p&gt;Azure SDK team की Lilian Kasem ने &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;.NET Azure Functions पर MCP Apps के लिए नया fluent configuration API introduce किया&lt;/a&gt;, और यह उस तरह का developer experience improvement है जो आपको सोचने पर मजबूर करता है कि यह हमेशा से इतना simple क्यों नहीं था।&lt;/p&gt;
&lt;h2 id="mcp-apps-कय-ह"&gt;MCP Apps क्या हैं?&lt;/h2&gt;
&lt;p&gt;MCP Apps Model Context Protocol को extend करते हैं जिससे tools अपने खुद के UI views, static assets, और security controls carry कर सकें। सिर्फ text return करने की बजाय, आपका MCP tool full HTML experiences render कर सकता है — interactive dashboards, data visualizations, configuration forms — सब AI agents द्वारा invokable और MCP clients द्वारा users को present किए जाने योग्य।&lt;/p&gt;
&lt;p&gt;पहले की दिक्कत यह थी कि यह सब manually wire करने के लिए MCP spec को गहराई से जानना ज़रूरी था: &lt;code&gt;ui://&lt;/code&gt; URIs, special mime types, tools और resources के बीच metadata coordination। मुश्किल नहीं, लेकिन झंझटी।&lt;/p&gt;
&lt;h2 id="fluent-api-तन-steps-म"&gt;Fluent API तीन steps में&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Step 1: अपना function define करें।&lt;/strong&gt; बस एक standard Azure Functions MCP tool:&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;Step 2: इसे MCP App में promote करें।&lt;/strong&gt; अपने program 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;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;Step 3: अपना HTML view जोड़ें।&lt;/strong&gt; &lt;code&gt;assets/hello-app.html&lt;/code&gt; बनाएं जिसमें आपको जो भी UI चाहिए।&lt;/p&gt;
&lt;p&gt;बस। Fluent API सारी MCP spec plumbing handle करता है — synthetic resource function generate करना, सही mime type set करना, वह metadata inject करना जो आपके tool को उसके view से connect करता है।&lt;/p&gt;
&lt;h2 id="api-surface-अचछ-तरह-design-कय-गय-ह"&gt;API surface अच्छी तरह design किया गया है&lt;/h2&gt;
&lt;p&gt;कुछ चीज़ें जो मुझे वाकई पसंद हैं:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;View sources flexible हैं।&lt;/strong&gt; आप disk पर files से HTML serve कर सकते हैं, या self-contained deployments के लिए resources directly अपनी assembly में embed कर सकते हैं:&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;app&lt;/span&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="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;assets/my-view.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="n"&gt;app&lt;/span&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="n"&gt;McpViewSource&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;FromEmbeddedResource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;MyApp.Resources.view.html&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;&lt;strong&gt;CSP composable है।&lt;/strong&gt; आप explicitly उन origins को allowlist करते हैं जिनकी आपके app को ज़रूरत है, least-privilege principles follow करते हुए। &lt;code&gt;WithCsp&lt;/code&gt; को कई बार call करें और origins accumulate होते हैं:&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="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;ConnectTo&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://api.example.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;LoadResourcesFrom&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://cdn.example.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;AllowFrame&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://youtube.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;Visibility control।&lt;/strong&gt; आप किसी tool को केवल LLM को, केवल host UI को, या दोनों को visible बना सकते हैं। एक ऐसा tool चाहते हैं जो सिर्फ UI render करे और model द्वारा call नहीं होना चाहिए? आसान:&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="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;WithVisibility&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;McpVisibility&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;)&lt;/span&gt; &lt;span class="c1"&gt;// UI-only, model से छुपा हुआ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="शरआत-कर"&gt;शुरुआत करें&lt;/h2&gt;
&lt;p&gt;Preview package जोड़ें:&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;अगर आप पहले से Azure Functions के साथ MCP tools build कर रहे हैं, तो यह बस एक package update है। &lt;a href="https://learn.microsoft.com/azure/azure-functions/scenario-mcp-apps?tabs=bash%2Clinux&amp;amp;pivots=programming-language-csharp"&gt;MCP Apps quickstart&lt;/a&gt; शुरुआत के लिए सबसे अच्छी जगह है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;MCP Apps AI tooling space में सबसे exciting developments में से एक हैं — ऐसे tools जो सिर्फ &lt;em&gt;काम नहीं करते&lt;/em&gt; बल्कि users को &lt;em&gt;कुछ दिखा भी सकते हैं&lt;/em&gt;। Fluent API protocol की complexity हटाता है और आपको उस पर focus करने देता है जो मायने रखता है: आपके tool की logic और उसका UI।&lt;/p&gt;
&lt;p&gt;Complete API reference और examples के लिए &lt;a href="https://devblogs.microsoft.com/azure-sdk/mcp-as-easy-as-1-2-3-introducing-the-fluent-api-for-mcp-apps/"&gt;पूरी post&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>Microsoft Foundry March 2026 — GPT-5.4, Agent Service GA, और वह SDK Refresh जो सब कुछ बदल देता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/</guid><description>Microsoft Foundry का March 2026 update बहुत बड़ा है: Agent Service GA हुआ, GPT-5.4 reliable reasoning लाया, azure-ai-projects SDK सभी languages में stable हुआ, और Fireworks AI open models Azure पर लाया।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/microsoft-foundry-march-2026-whats-new/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Monthly &amp;ldquo;What&amp;rsquo;s New in Microsoft Foundry&amp;rdquo; posts आमतौर पर incremental improvements और कभी-कभी एक headline feature का mix होती हैं। &lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;March 2026 edition&lt;/a&gt;? यह basically सब headline features हैं। Foundry Agent Service GA हो गया, GPT-5.4 production के लिए ship हुआ, SDK का एक major stable release आया, और Fireworks AI Azure पर open model inference लाया। आइए breakdown करें कि .NET developers के लिए क्या मायने रखता है।&lt;/p&gt;
&lt;h2 id="foundry-agent-service-production-ready-ह"&gt;Foundry Agent Service production-ready है&lt;/h2&gt;
&lt;p&gt;यही सबसे बड़ी खबर है। Next-gen agent runtime generally available है — OpenAI Responses API पर बना, OpenAI agents के साथ wire-compatible, और multiple providers के models के लिए open। अगर आप आज Responses API के साथ build कर रहे हैं, तो Foundry पर migrate करने से आपकी existing agent logic के ऊपर enterprise security, private networking, Entra RBAC, full tracing, और evaluation मिलता है।&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;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;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&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;project_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;AZURE_AI_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;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_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;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&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;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&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;model&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;AZURE_AI_MODEL_DEPLOYMENT_NAME&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="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;Key additions: end-to-end private networking, MCP auth expansion (OAuth passthrough सहित), speech-to-speech agents के लिए Voice Live preview, और 6 नए regions में hosted agents।&lt;/p&gt;
&lt;h2 id="gpt-54--raw-intelligence-स-जयद-reliability"&gt;GPT-5.4 — raw intelligence से ज़्यादा reliability&lt;/h2&gt;
&lt;p&gt;GPT-5.4 स्मार्ट होने के बारे में नहीं है। यह ज़्यादा reliable होने के बारे में है। Long interactions पर stronger reasoning, बेहतर instruction adherence, कम mid-workflow failures, और integrated computer use capabilities। Production agents के लिए, वह reliability benchmark scores से कहीं ज़्यादा मायने रखती है।&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Pricing (per M tokens)&lt;/th&gt;
&lt;th&gt;Best For&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;Production agents, coding, document workflows&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;Deep analysis, scientific reasoning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-5.4 Mini&lt;/td&gt;
&lt;td&gt;Cost-effective&lt;/td&gt;
&lt;td&gt;Classification, extraction, lightweight tool calls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Smart approach एक routing strategy है: GPT-5.4 Mini high-volume, low-latency work handle करे जबकि GPT-5.4 reasoning-heavy requests लेता है।&lt;/p&gt;
&lt;h2 id="sdk-आखरकर-stable-ह"&gt;SDK आखिरकार stable है&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azure-ai-projects&lt;/code&gt; SDK सभी languages में stable releases के साथ ship हुआ — Python 2.0.0, JS/TS 2.0.0, Java 2.0.0, और .NET 2.0.0 (April 1)। &lt;code&gt;azure-ai-agents&lt;/code&gt; dependency चली गई — सब कुछ &lt;code&gt;AIProjectClient&lt;/code&gt; के अंदर रहता है। &lt;code&gt;pip install azure-ai-projects&lt;/code&gt; से install करें और package &lt;code&gt;openai&lt;/code&gt; और &lt;code&gt;azure-identity&lt;/code&gt; को direct dependencies के रूप में bundle करता है।&lt;/p&gt;
&lt;p&gt;.NET developers के लिए, इसका मतलब है full Foundry surface के लिए एक single NuGet package। अब अलग-अलग agent SDKs को juggle नहीं करना।&lt;/p&gt;
&lt;h2 id="fireworks-ai-azure-पर-open-models-लत-ह"&gt;Fireworks AI Azure पर open models लाता है&lt;/h2&gt;
&lt;p&gt;शायद सबसे architecturally interesting addition: Fireworks AI जो daily 13+ trillion tokens ~180K requests/second पर process करता है, अब Foundry के ज़रिए available है। Launch पर DeepSeek V3.2, gpt-oss-120b, Kimi K2.5, और MiniMax M2.5।&lt;/p&gt;
&lt;p&gt;असली कहानी है &lt;strong&gt;bring-your-own-weights&lt;/strong&gt; — serving stack बदले बिना कहीं से भी quantized या fine-tuned weights upload करें। Serverless pay-per-token या provisioned throughput के ज़रिए deploy करें।&lt;/p&gt;
&lt;h2 id="अनय-highlights"&gt;अन्य highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Phi-4 Reasoning Vision 15B&lt;/strong&gt; — charts, diagrams, और document layouts के लिए multimodal reasoning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Evaluations GA&lt;/strong&gt; — Azure Monitor में piped continuous production monitoring के साथ out-of-the-box evaluators&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Priority Processing&lt;/strong&gt; (Preview) — latency-sensitive workloads के लिए dedicated compute lane&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Voice Live&lt;/strong&gt; — speech-to-speech runtime जो directly Foundry agents से connect होता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tracing GA&lt;/strong&gt; — sort और filter के साथ end-to-end agent trace inspection&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PromptFlow deprecation&lt;/strong&gt; — January 2027 तक Microsoft Framework Workflows पर migration&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;March 2026 Foundry के लिए एक turning point है। Agent Service GA, सभी languages में stable SDKs, reliable production agents के लिए GPT-5.4, और Fireworks AI के ज़रिए open model inference — platform serious workloads के लिए तैयार है।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/whats-new-in-microsoft-foundry-mar-2026/"&gt;Full roundup&lt;/a&gt; पढ़ें और &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;अपना पहला agent build करें&lt;/a&gt; शुरुआत के लिए।&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server — AI एजेंट्स को डेटाबेस एक्सेस देने का सही तरीका</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/</guid><description>Data API builder का SQL MCP Server AI एजेंट्स को सुरक्षित, निर्धारित डेटाबेस एक्सेस देता है — बिना schema उजागर किए या NL2SQL पर निर्भर हुए। RBAC, caching, multi-database support — सब कुछ built-in।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/sql-mcp-server-data-api-builder/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;सच बात करें तो: आज उपलब्ध अधिकांश database MCP servers डरावने हैं। वे एक natural language query लेते हैं, तुरंत SQL generate करते हैं, और उसे आपके production data पर चला देते हैं। क्या गलत हो सकता है? (सब कुछ। सब कुछ गलत हो सकता है।)&lt;/p&gt;
&lt;p&gt;Azure SQL टीम ने अभी &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;SQL MCP Server पेश किया&lt;/a&gt;, और यह एक मौलिक रूप से अलग दृष्टिकोण अपनाता है। Data API builder (DAB) 2.0 की एक feature के रूप में बना, यह AI एजेंट्स को database operations तक structured, निर्धारित access देता है — NL2SQL के बिना, आपका schema उजागर किए बिना, और हर कदम पर पूरे RBAC के साथ।&lt;/p&gt;
&lt;h2 id="nl2sql-कय-नह"&gt;NL2SQL क्यों नहीं?&lt;/h2&gt;
&lt;p&gt;यह सबसे दिलचस्प design निर्णय है। Models निर्धारित नहीं होते, और complex queries में सूक्ष्म त्रुटियाँ पैदा होने की सबसे अधिक संभावना होती है। जो queries उपयोगकर्ता AI से generate करवाना चाहते हैं, वही non-deterministic तरीके से produce होने पर सबसे अधिक जाँच की माँग करती हैं।&lt;/p&gt;
&lt;p&gt;इसके बजाय, SQL MCP Server एक &lt;strong&gt;NL2DAB&lt;/strong&gt; दृष्टिकोण अपनाता है। एजेंट Data API builder की entity abstraction layer और built-in query builder के साथ काम करता है ताकि accurate, well-formed T-SQL निर्धारित रूप से produce की जा सके। उपयोगकर्ता के लिए परिणाम वही रहता है, लेकिन hallucinated JOINs या accidental data exposure का जोखिम नहीं रहता।&lt;/p&gt;
&lt;h2 id="सत-tools-सत-स-नह"&gt;सात tools, सात सौ नहीं&lt;/h2&gt;
&lt;p&gt;SQL MCP Server database के आकार चाहे जो हो, ठीक सात DML tools expose करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;describe_entities&lt;/code&gt; — उपलब्ध entities और operations खोजें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;create_record&lt;/code&gt; — rows insert करें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;read_records&lt;/code&gt; — tables और views query करें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;update_record&lt;/code&gt; — rows modify करें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;delete_record&lt;/code&gt; — rows हटाएं&lt;/li&gt;
&lt;li&gt;&lt;code&gt;execute_entity&lt;/code&gt; — stored procedures चलाएं&lt;/li&gt;
&lt;li&gt;&lt;code&gt;aggregate_records&lt;/code&gt; — aggregation queries&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;यह समझदारी है क्योंकि context windows एजेंट की सोचने की जगह हैं। सैकड़ों tool definitions से भर देने पर reasoning के लिए कम जगह बचती है। सात fixed tools एजेंट को &lt;em&gt;navigate करने&lt;/em&gt; की बजाय &lt;em&gt;सोचने&lt;/em&gt; पर केंद्रित रखते हैं।&lt;/p&gt;
&lt;p&gt;प्रत्येक tool को individually enable या disable किया जा सकता है:&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="s2"&gt;&amp;#34;runtime&amp;#34;&lt;/span&gt;&lt;span class="err"&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;mcp&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;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;path&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;/mcp&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;dml-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;describe-entities&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;create-record&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;read-records&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;update-record&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;delete-record&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;execute-entity&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;aggregate-records&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="तन-commands-म-शरआत"&gt;तीन commands में शुरुआत&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 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --database-type mssql &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --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 &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --source dbo.Customers &lt;span class="se"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --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;p&gt;बस, आपका SQL MCP Server आपकी Customers table expose कर के चल पड़ा। Entity abstraction layer का मतलब है कि आप नाम और columns को alias कर सकते हैं, प्रत्येक role के लिए fields सीमित कर सकते हैं, और ठीक वही नियंत्रित कर सकते हैं जो एजेंट देखता है — बिना internal schema की जानकारी उजागर किए।&lt;/p&gt;
&lt;h2 id="security-क-कहन-पकक-ह"&gt;Security की कहानी पक्की है&lt;/h2&gt;
&lt;p&gt;यहीं Data API builder की परिपक्वता काम आती है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;हर layer पर RBAC&lt;/strong&gt; — प्रत्येक entity परिभाषित करती है कि कौन से roles read, create, update, या delete कर सकते हैं, और कौन से fields दिखते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Azure Key Vault integration&lt;/strong&gt; — connection strings और secrets सुरक्षित रूप से manage होते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microsoft Entra + custom OAuth&lt;/strong&gt; — production-grade authentication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Content Security Policy&lt;/strong&gt; — एजेंट raw SQL के बजाय एक controlled contract के माध्यम से interact करते हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Schema abstraction विशेष रूप से महत्वपूर्ण है। आपके internal table और column names एजेंट को कभी नहीं दिखते। आप entities, aliases, और descriptions परिभाषित करते हैं जो AI interaction के लिए उचित हों — आपके database ERD के लिए नहीं।&lt;/p&gt;
&lt;h2 id="multi-database-और-multi-protocol"&gt;Multi-database और multi-protocol&lt;/h2&gt;
&lt;p&gt;SQL MCP Server Microsoft SQL, PostgreSQL, Azure Cosmos DB, और MySQL को support करता है। और क्योंकि यह एक DAB feature है, आपको एक ही configuration से REST, GraphQL, और MCP endpoints एक साथ मिलते हैं। वही entity definitions, वही RBAC rules, वही security — तीनों protocols में।&lt;/p&gt;
&lt;p&gt;DAB 2.0 में auto-configuration आपके database को inspect करके dynamically configuration बना सकती है, अगर आप rapid prototyping के लिए कम abstraction से comfortable हैं।&lt;/p&gt;
&lt;h2 id="मर-नजरय"&gt;मेरा नजरिया&lt;/h2&gt;
&lt;p&gt;AI एजेंट्स के लिए enterprise database access इसी तरह काम करनी चाहिए। &amp;ldquo;अरे LLM, मेरे लिए कुछ SQL लिखो और production पर चला दो&amp;rdquo; वाला तरीका नहीं। बल्कि: एक well-defined entity layer, deterministic query generation, हर कदम पर RBAC, caching, monitoring, और telemetry। यह सबसे अच्छे अर्थ में उबाऊ है।&lt;/p&gt;
&lt;p&gt;.NET डेवलपर्स के लिए, integration की कहानी साफ है — DAB एक .NET tool है, MCP Server एक container के रूप में चलता है, और यह Azure SQL के साथ काम करता है, जिसे हम में से अधिकांश पहले से उपयोग कर रहे हैं। अगर आप ऐसे AI एजेंट्स बना रहे हैं जिन्हें data access चाहिए, तो यहाँ से शुरू करें।&lt;/p&gt;
&lt;h2 id="अतम-बत"&gt;अंतिम बात&lt;/h2&gt;
&lt;p&gt;SQL MCP Server मुफ्त, open-source है, और कहीं भी चलता है। यह Microsoft की तरफ से AI एजेंट्स को सुरक्षित database access देने का prescriptive तरीका है। शुरुआत करने के लिए &lt;a href="https://devblogs.microsoft.com/azure-sql/introducing-sql-mcp-server/"&gt;पूरी पोस्ट&lt;/a&gt; और &lt;a href="https://aka.ms/sql/mcp"&gt;documentation&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Visual Studio की वो Floating Windows सेटिंग जो आप नहीं जानते थे (लेकिन जाननी चाहिए)</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/</guid><description>Visual Studio की एक छुपी सेटिंग आपको floating windows पर पूरा नियंत्रण देती है — independent taskbar entries, सही multi-monitor behavior, और FancyZones के साथ बेहतरीन integration। एक dropdown सब कुछ बदल देता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/visual-studio-floating-windows-powertoys/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप Visual Studio के साथ multiple monitors इस्तेमाल करते हैं (और सच कहें तो आजकल कौन नहीं करता), तो आपने यह परेशानी जरूर झेली होगी: floating tool windows मुख्य IDE minimize करते ही गायब हो जाती हैं, वे हमेशा बाकी सब चीज़ों के ऊपर रहती हैं, और taskbar में अलग बटन के रूप में नहीं दिखतीं। कुछ workflows के लिए यह ठीक है, लेकिन multi-monitor setups के लिए यह बहुत frustrating है।&lt;/p&gt;
&lt;p&gt;Visual Studio टीम के Mads Kristensen ने &lt;a href="https://devblogs.microsoft.com/visualstudio/take-full-control-of-your-floating-windows-in-visual-studio/"&gt;एक कम-जानी-मानी सेटिंग share की&lt;/a&gt; जो floating windows के व्यवहार को पूरी तरह बदल देती है। बस एक dropdown। बस।&lt;/p&gt;
&lt;h2 id="सटग-कह-ह"&gt;सेटिंग कहाँ है&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;&amp;ldquo;These floating windows are owned by the main window&amp;rdquo; dropdown में तीन विकल्प हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;None&lt;/strong&gt; — पूरी स्वतंत्रता। हर floating window को अपना taskbar entry मिलता है और यह एक सामान्य Windows window की तरह व्यवहार करती है।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool Windows&lt;/strong&gt; (default) — documents स्वतंत्र रूप से float होते हैं, tool windows IDE से जुड़ी रहती हैं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Documents and Tool Windows&lt;/strong&gt; — Visual Studio का classic व्यवहार, सब कुछ main window से बंधा रहता है।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="multi-monitor-setups-क-लए-none-ह-सह-वकलप-ह"&gt;Multi-monitor setups के लिए &amp;ldquo;None&amp;rdquo; ही सही विकल्प है&lt;/h2&gt;
&lt;p&gt;इसे &lt;strong&gt;None&lt;/strong&gt; पर सेट करें और अचानक आपकी सभी floating tool windows और documents असली Windows applications की तरह व्यवहार करने लगती हैं। वे taskbar में दिखती हैं, main Visual Studio window minimize करने पर भी visible रहती हैं, और खुद को बाकी सब चीज़ों के आगे नहीं रखतीं।&lt;/p&gt;
&lt;p&gt;इसे &lt;strong&gt;PowerToys FancyZones&lt;/strong&gt; के साथ combine करें और यह game changer साबित होता है। अपने monitors पर custom layouts बनाएं, Solution Explorer को एक zone में snap करें, debugger को दूसरे में, और code files जहाँ चाहें। सब कुछ अपनी जगह रहता है, सब कुछ independently accessible है, और आपका workspace अव्यवस्थित की बजाय organised लगता है।&lt;/p&gt;
&lt;h2 id="तवरत-सझव"&gt;त्वरित सुझाव&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Multi-monitor power users&lt;/strong&gt;: &lt;strong&gt;None&lt;/strong&gt; सेट करें, FancyZones के साथ जोड़ें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;कभी-कभार float करने वाले&lt;/strong&gt;: &lt;strong&gt;Tool Windows&lt;/strong&gt; (default) एक अच्छा middle ground है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;पारंपरिक workflow&lt;/strong&gt;: &lt;strong&gt;Documents and Tool Windows&lt;/strong&gt; सब कुछ classic रखता है&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pro tip: किसी भी tool window title bar पर &lt;strong&gt;Ctrl + double-click&lt;/strong&gt; करके तुरंत float या dock करें। सेटिंग बदलने के बाद restart की जरूरत नहीं।&lt;/p&gt;
&lt;h2 id="अतम-बत"&gt;अंतिम बात&lt;/h2&gt;
&lt;p&gt;यह उन सेटिंग्स में से एक है जिनके बारे में सोचकर आप कहते हैं &amp;ldquo;मुझे यह पहले क्यों नहीं पता था&amp;rdquo;। अगर Visual Studio में floating windows ने कभी आपको परेशान किया है, तो अभी जाकर यह बदलें।&lt;/p&gt;
&lt;p&gt;विवरण और screenshots के लिए &lt;a href="https://devblogs.microsoft.com/visualstudio/take-full-control-of-your-floating-windows-in-visual-studio/"&gt;पूरी पोस्ट&lt;/a&gt; पढ़ें।&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.116 — Agents App में Keyboard Navigation और File Context Completions</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/</guid><description>VS Code 1.116 का ध्यान Agents app की polish पर है — dedicated keybindings, accessibility improvements, file-context completions, और CSS @import link resolution।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/vscode-1-116-agents-app-updates/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.116 April 2026 release है, और हालाँकि यह कुछ recent updates से हल्की है, बदलाव focused और meaningful हैं — खासकर अगर आप रोज़ाना Agents app use कर रहे हैं।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;official release notes&lt;/a&gt; के आधार पर, यहाँ क्या मिला है।&lt;/p&gt;
&lt;h2 id="agents-app-म-सधर"&gt;Agents app में सुधार&lt;/h2&gt;
&lt;p&gt;Agents app उपयोगिता polish के साथ mature होता जा रहा है जो रोज़मर्रा के workflows में वास्तविक फर्क डालती है:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Dedicated keybindings&lt;/strong&gt; — अब आप dedicated commands और keyboard shortcuts से Changes view, Changes के अंदर files tree, और Chat Customizations view focus कर सकते हैं। अगर आप Agents app में navigate करने के लिए click करते रहे हैं, तो यह पूरी keyboard-driven workflows लाता है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Accessibility help dialog&lt;/strong&gt; — chat input box में &lt;code&gt;Alt+F1&lt;/code&gt; दबाने पर अब एक accessibility help dialog खुलता है जो available commands और keybindings दिखाता है। Screen reader users announcement verbosity भी control कर सकते हैं। अच्छी accessibility सभी को फायदा पहुँचाती है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;File-context completions&lt;/strong&gt; — Agents app chat में &lt;code&gt;#&lt;/code&gt; type करें और आपके current workspace तक scoped file-context completions trigger होती हैं। यह उन छोटे quality-of-life improvements में से एक है जो हर interaction को तेज़ बनाती है — code reference करते समय अब पूरे file paths type नहीं करने होंगे।&lt;/p&gt;
&lt;h2 id="css-import-link-resolution"&gt;CSS &lt;code&gt;@import&lt;/code&gt; link resolution&lt;/h2&gt;
&lt;p&gt;Frontend developers के लिए एक अच्छी addition: VS Code अब CSS &lt;code&gt;@import&lt;/code&gt; references resolve करता है जो node_modules paths use करते हैं। आप bundlers use करते समय &lt;code&gt;@import &amp;quot;some-module/style.css&amp;quot;&lt;/code&gt; जैसे imports को &lt;code&gt;Ctrl+click&lt;/code&gt; से follow कर सकते हैं। छोटा है लेकिन CSS workflows में एक friction point खत्म करता है।&lt;/p&gt;
&lt;h2 id="अतम-बत"&gt;अंतिम बात&lt;/h2&gt;
&lt;p&gt;VS Code 1.116 refinement के बारे में है — Agents app को अधिक navigable, अधिक accessible, और अधिक keyboard-friendly बनाना। अगर आप Agents app में काफी समय बिता रहे हैं (और मुझे लगता है हम में से कई बिता रहे हैं), तो ये बदलाव जुड़ते जाते हैं।&lt;/p&gt;
&lt;p&gt;पूरी list के लिए &lt;a href="https://code.visualstudio.com/updates/v1_116"&gt;full release notes&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>रियल-टाइम Multi-Agent UIs बनाना जो Black Box की तरह न लगें</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/</guid><description>AG-UI और Microsoft Agent Framework मिलकर multi-agent workflows को एक उचित frontend देते हैं — real-time streaming, human approvals, और आपके agents क्या कर रहे हैं इसकी पूरी जानकारी के साथ।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/ag-ui-real-time-multi-agent-ui-maf/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;multi-agent systems के बारे में एक बात यह है: demos में वे बेहद शानदार लगते हैं। तीन agents काम आगे-पीछे भेज रहे हैं, समस्याएँ सुलझा रहे हैं, निर्णय ले रहे हैं। फिर आप इसे असली users के सामने रखने की कोशिश करते हैं और&amp;hellip; खामोशी। एक घूमता हुआ indicator। कोई अंदाज़ा नहीं कि कौन-सा agent क्या कर रहा है या सिस्टम क्यों रुका हुआ है। यह कोई product नहीं है — यह एक भरोसे की समस्या है।&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework team ने अभी-अभी MAF workflows को &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI&lt;/a&gt; के साथ जोड़ने पर एक &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;शानदार walkthrough&lt;/a&gt; प्रकाशित किया है। AG-UI एक open protocol है जो Server-Sent Events के ज़रिए agent execution events को frontend पर stream करता है। और सच में? यही वह bridge है जिसकी हमें कमी थी।&lt;/p&gt;
&lt;h2 id="net-developers-क-लए-यह-कय-मयन-रखत-ह"&gt;.NET developers के लिए यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;अगर आप AI-powered apps बना रहे हैं, तो आप शायद इस दीवार से टकरा चुके हैं। आपका backend orchestration बढ़िया काम करता है — agents एक-दूसरे को काम सौंपते हैं, tools चलते हैं, फैसले होते हैं। लेकिन frontend को पर्दे के पीछे क्या हो रहा है, इसका कोई अंदाज़ा नहीं। AG-UI इसे ठीक करता है — यह agent events (जैसे &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;) को SSE पर सीधे आपकी UI layer तक stream करने के लिए एक standard protocol परिभाषित करता है।&lt;/p&gt;
&lt;p&gt;जो demo उन्होंने बनाया वह तीन agents वाला customer support workflow है: एक triage agent जो requests को route करता है, एक refund agent जो पैसों का काम संभालता है, और एक order agent जो replacements manage करता है। हर agent के अपने tools हैं, और handoff topology स्पष्ट रूप से परिभाषित है — &amp;ldquo;prompt से खुद समझ लो&amp;rdquo; वाला कोई झमेला नहीं।&lt;/p&gt;
&lt;h2 id="handoff-topology-असल-सतर-ह"&gt;Handoff topology असली सितारा है&lt;/h2&gt;
&lt;p&gt;जो चीज़ मेरी नज़र में आई वह यह है कि &lt;code&gt;HandoffBuilder&lt;/code&gt; आपको agents के बीच एक directed routing graph घोषित करने देता है:&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;हर &lt;code&gt;add_handoff&lt;/code&gt; एक natural-language description के साथ एक directed edge बनाता है। Framework इस topology के आधार पर हर agent के लिए handoff tools generate करता है। तो routing के फैसले आपकी orchestration structure पर आधारित हैं, न कि LLM की मर्ज़ी पर। production reliability के लिए यह बहुत बड़ी बात है।&lt;/p&gt;
&lt;h2 id="human-in-the-loop-ज-वकई-कम-करत-ह"&gt;Human-in-the-loop जो वाकई काम करता है&lt;/h2&gt;
&lt;p&gt;Demo में दो interrupt patterns दिखाए गए हैं जो किसी भी real-world agent app को चाहिए:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Tool approval interrupts&lt;/strong&gt; — जब कोई agent &lt;code&gt;approval_mode=&amp;quot;always_require&amp;quot;&lt;/code&gt; वाला tool call करता है, तो workflow रुक जाता है और एक event emit होता है। Frontend tool name और arguments के साथ एक approval modal render करता है। कोई token-burning retry loops नहीं — बस एक साफ pause-approve-resume flow।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Information request interrupts&lt;/strong&gt; — जब किसी agent को user से ज़्यादा context चाहिए (जैसे कोई order ID), तो वह रुकता है और पूछता है। Frontend सवाल दिखाता है, user जवाब देता है, और execution ठीक वहाँ से दोबारा शुरू होती है जहाँ वह रुकी थी।&lt;/p&gt;
&lt;p&gt;दोनों patterns standard AG-UI events की तरह stream होते हैं, इसलिए आपके frontend को हर agent के लिए custom logic की ज़रूरत नहीं — वह बस SSE connection से आने वाला event render करता है।&lt;/p&gt;
&lt;h2 id="wiring-up-करन-हरन-क-हद-तक-आसन-ह"&gt;Wiring up करना हैरानी की हद तक आसान है&lt;/h2&gt;
&lt;p&gt;MAF और AG-UI के बीच integration एक single function call है:&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; हर thread के लिए एक fresh workflow बनाता है, इसलिए हर conversation को isolated state मिलती है। Endpoint सारी SSE plumbing अपने आप handle करता है। अगर आप पहले से FastAPI use कर रहे हैं (या इसे एक lightweight layer के रूप में जोड़ सकते हैं), तो यह लगभग zero friction है।&lt;/p&gt;
&lt;h2 id="मर-रय"&gt;मेरी राय&lt;/h2&gt;
&lt;p&gt;हम .NET developers के लिए तुरंत यह सवाल उठता है: &amp;ldquo;क्या मैं यह C# में कर सकता हूँ?&amp;rdquo; Agent Framework .NET और Python दोनों के लिए उपलब्ध है, और AG-UI protocol language-agnostic है (यह बस SSE है)। तो यह specific demo Python और FastAPI use करता है, लेकिन pattern सीधे translate होता है। आप same AG-UI event schema का पालन करते हुए SSE endpoints के साथ एक ASP.NET Core minimal API wire up कर सकते हैं।&lt;/p&gt;
&lt;p&gt;बड़ी बात यह है कि multi-agent UIs एक first-class concern बनती जा रही हैं, afterthought नहीं। अगर आप कुछ ऐसा बना रहे हैं जहाँ agents humans के साथ interact करते हैं — customer support, approval workflows, document processing — तो MAF orchestration और AG-UI transparency का यह combination वह pattern है जिसे follow करना चाहिए।&lt;/p&gt;
&lt;h2 id="wrapping-up"&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;AG-UI + Microsoft Agent Framework आपको दोनों दुनियाओं का सर्वश्रेष्ठ देता है: backend पर robust multi-agent orchestration और frontend पर real-time visibility। Black-box agent interactions अब नहीं।&lt;/p&gt;
&lt;p&gt;और गहराई से जानने के लिए &lt;a href="https://devblogs.microsoft.com/agent-framework/ag-ui-multi-agent-workflow-demo/"&gt;full walkthrough&lt;/a&gt; और &lt;a href="https://github.com/ag-ui-protocol/ag-ui"&gt;AG-UI protocol repo&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.115 — Background Terminal Notifications, SSH Agent Mode, और भी बहुत कुछ</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/</guid><description>VS Code 1.115 में agents के लिए background terminal notifications, SSH remote agent hosting, terminal में file paste, और session-aware edit tracking आई है। .NET डेवलपर्स के लिए क्या मायने रखता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/vscode-1-115-agent-improvements/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.115 अभी &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;आया है&lt;/a&gt;, और हालाँकि headline features के मामले में यह थोड़ी हल्की release है, agent-related सुधार genuinely useful हैं अगर आप रोज़ाना AI coding assistants के साथ काम करते हैं।&lt;/p&gt;
&lt;p&gt;आइए वो बातें highlight करें जो वाकई जानने लायक हैं।&lt;/p&gt;
&lt;h2 id="background-terminals-agents-क-जवब-दत-ह"&gt;Background terminals agents को जवाब देते हैं&lt;/h2&gt;
&lt;p&gt;यह standout feature है। Background terminals अब automatically agents को notify करते हैं जब commands पूरी होती हैं, जिसमें exit code और terminal output शामिल होता है। Background terminals में input prompts भी detect होते हैं और user को दिखाए जाते हैं।&lt;/p&gt;
&lt;p&gt;यह क्यों मायने रखता है? अगर आपने background में build commands या test suites चलाने के लिए Copilot के agent mode का उपयोग किया है, तो आप जानते हैं &amp;ldquo;क्या वो खत्म हुई?&amp;rdquo; वाली परेशानी — background terminals essentially fire-and-forget थे। अब agent notify होता है जब आपका &lt;code&gt;dotnet build&lt;/code&gt; या &lt;code&gt;dotnet test&lt;/code&gt; पूरा होता है, output देखता है, और उसी के अनुसार react करता है। यह एक छोटा बदलाव है जो agent-driven workflows को काफी ज्यादा reliable बनाता है।&lt;/p&gt;
&lt;p&gt;एक नया &lt;code&gt;send_to_terminal&lt;/code&gt; tool भी है जो agents को user confirmation के साथ background terminals में commands भेजने देता है, उस समस्या को fix करते हुए जहाँ timeout के साथ &lt;code&gt;run_in_terminal&lt;/code&gt; terminals को background में move कर देता था और उन्हें read-only बना देता था।&lt;/p&gt;
&lt;h2 id="ssh-remote-agent-hosting"&gt;SSH remote agent hosting&lt;/h2&gt;
&lt;p&gt;VS Code अब SSH के ज़रिए remote machines से connect करने, CLI automatically install करने, और उसे agent host mode में start करने को support करता है। इसका मतलब है आपके AI agent sessions सीधे remote environments को target कर सकते हैं — .NET डेवलपर्स के लिए useful जो Linux servers या cloud VMs पर build और test करते हैं।&lt;/p&gt;
&lt;h2 id="agent-sessions-म-edit-tracking"&gt;Agent sessions में edit tracking&lt;/h2&gt;
&lt;p&gt;Agent sessions के दौरान किए गए file edits अब track और restore होते हैं, diffs, undo/redo, और state restoration के साथ। अगर कोई agent आपके code में changes करता है और कुछ गलत हो जाता है, तो आप देख सकते हैं क्या बदला और उसे वापस ला सकते हैं। Agents को आपका codebase modify करने देने में मन की शांति।&lt;/p&gt;
&lt;h2 id="browser-tab-awareness-और-अनय-सधर"&gt;Browser tab awareness और अन्य सुधार&lt;/h2&gt;
&lt;p&gt;कुछ और quality-of-life additions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Browser tab tracking&lt;/strong&gt; — chat अब session के दौरान खोले गए browser tabs को track और link कर सकती है, ताकि agents आपके देख रहे web pages reference कर सकें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Terminal में file paste&lt;/strong&gt; — files (images सहित) Ctrl+V, drag-and-drop, या right-click से terminal में paste करें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Minimap में test coverage&lt;/strong&gt; — quick visual overview के लिए test coverage indicators अब minimap में दिखते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Mac पर pinch-to-zoom&lt;/strong&gt; — integrated browser pinch-to-zoom gestures support करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sessions में Copilot entitlements&lt;/strong&gt; — status bar Sessions view में usage info दिखाता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Go to File में Favicon&lt;/strong&gt; — quick pick list में open web pages favicons दिखाते हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="अतम-बत"&gt;अंतिम बात&lt;/h2&gt;
&lt;p&gt;VS Code 1.115 एक incremental release है, लेकिन agent improvements — background terminal notifications, SSH agent hosting, और edit tracking — AI-assisted development के लिए noticeably smoother experience बनाते हैं। अगर आप .NET projects के लिए Copilot के agent mode का उपयोग कर रहे हैं, तो ये वो quality-of-life fixes हैं जो रोज़ाना friction कम करते हैं।&lt;/p&gt;
&lt;p&gt;हर detail के लिए &lt;a href="https://code.visualstudio.com/updates/v1_115"&gt;full release notes&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>C# 15 में Union Types आ गए — और वे बिल्कुल वैसे ही हैं जैसा हम माँग रहे थे</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/</guid><description>C# 15 में union keyword पेश किया गया है — compiler-enforced discriminated unions जिसमें exhaustive pattern matching है। यहाँ देखें ये कैसे दिखते हैं, क्यों मायने रखते हैं, और आज इन्हें कैसे आज़माएँ।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/csharp-15-union-types-exhaustive-matching/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;यही वह feature है जिसका मैं इंतज़ार कर रहा था। C# 15 में &lt;code&gt;union&lt;/code&gt; keyword पेश किया गया है — उचित discriminated unions जिनमें compiler-enforced exhaustive pattern matching है। अगर आपने कभी F# के discriminated unions या Rust के enums से ईर्ष्या की है, तो आप जानते हैं कि यह क्यों मायने रखता है।&lt;/p&gt;
&lt;p&gt;Bill Wagner ने .NET blog पर &lt;a href="https://devblogs.microsoft.com/dotnet/csharp-15-union-types/"&gt;इसका विस्तृत विश्लेषण&lt;/a&gt; publish किया है, और सच में? Design clean, practical, और बिल्कुल C# style का है। आइए मैं आपको बताता हूँ कि यहाँ वास्तव में क्या है और यह पहली नज़र में जितना लगता है उससे बड़ी बात क्यों है।&lt;/p&gt;
&lt;h2 id="union-types-कस-समसय-क-हल-करत-ह"&gt;Union Types किस समस्या को हल करते हैं&lt;/h2&gt;
&lt;p&gt;C# 15 से पहले, किसी method से &amp;ldquo;कई possible types में से एक&amp;rdquo; return करना हमेशा एक compromise था:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;object&lt;/code&gt;&lt;/strong&gt; — कोई constraints नहीं, कोई compiler help नहीं, हर जगह defensive casting&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Marker interfaces&lt;/strong&gt; — बेहतर, लेकिन कोई भी उन्हें implement कर सकता है। Compiler कभी set को complete नहीं मान सकता&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abstract base classes&lt;/strong&gt; — वही समस्या, साथ ही types को एक common ancestor की ज़रूरत है&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;इनमें से कोई भी आपको वह नहीं देता जो आप वास्तव में चाहते हैं: types का एक closed set जहाँ compiler guarantee करता है कि आपने हर case handle किया है। Union types यही करते हैं।&lt;/p&gt;
&lt;h2 id="syntax-खबसरत-स-सरल-ह"&gt;Syntax खूबसूरती से सरल है&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;एक line। &lt;code&gt;Pet&lt;/code&gt; एक &lt;code&gt;Cat&lt;/code&gt;, एक &lt;code&gt;Dog&lt;/code&gt;, या एक &lt;code&gt;Bird&lt;/code&gt; hold कर सकता है। Implicit conversions automatically generate होती हैं:&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;Pet&lt;/span&gt; &lt;span class="n"&gt;pet&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;Dog&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;Rex&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;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;pet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Value&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Dog { Name = Rex }&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;और यहाँ जादू है — compiler exhaustive matching enforce करता है:&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;&lt;code&gt;_&lt;/code&gt; discard की ज़रूरत नहीं। Compiler जानता है कि यह switch हर possible case cover करता है। अगर आप बाद में union में चौथा type जोड़ते हैं, तो हर switch expression जो उसे handle नहीं करती warning produce करती है। Missing cases build time पर पकड़ी जाती हैं, runtime पर नहीं।&lt;/p&gt;
&lt;h2 id="यह-वयवहरक-रप-स-कह-कम-आत-ह"&gt;यह व्यावहारिक रूप से कहाँ काम आता है&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Pet&lt;/code&gt; का उदाहरण प्यारा है, लेकिन real code में unions वास्तव में कहाँ चमकते हैं यह देखें।&lt;/p&gt;
&lt;h3 id="api-responses-ज-अलग-अलग-shapes-return-करत-ह"&gt;API responses जो अलग-अलग shapes return करती हैं&lt;/h3&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;अब हर consumer को success, error, और validation failure handle करने पर मजबूर किया जाता है। &amp;ldquo;मैं error case check करना भूल गया&amp;rdquo; bugs नहीं।&lt;/p&gt;
&lt;h3 id="single-value-य-collection"&gt;Single value या collection&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;OneOrMore&amp;lt;T&amp;gt;&lt;/code&gt; pattern दिखाता है कि unions में helper methods के साथ एक body कैसे हो सकती है:&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="n"&gt;union&lt;/span&gt; &lt;span class="n"&gt;OneOrMore&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;IEnumerable&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&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="n"&gt;IEnumerable&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;AsEnumerable&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;Value&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;T&lt;/span&gt; &lt;span class="n"&gt;single&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;single&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;IEnumerable&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;multiple&lt;/span&gt; &lt;span class="p"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;multiple&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="kc"&gt;null&lt;/span&gt; &lt;span class="p"&gt;=&amp;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&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;Callers जो भी form सुविधाजनक हो वह pass करते हैं:&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;OneOrMore&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;dotnet&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;OneOrMore&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kt"&gt;string&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;moreTags&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="p"&gt;{&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;csharp&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;unions&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;preview&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="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;AsEnumerable&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;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;$&amp;#34;[{tag}] &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="c1"&gt;// [dotnet]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="असबधत-types-क-compose-करन"&gt;असंबंधित types को Compose करना&lt;/h3&gt;
&lt;p&gt;यह traditional hierarchies पर killer feature है। आप ऐसे types को union कर सकते हैं जिनमें कुछ भी common नहीं है — &lt;code&gt;string&lt;/code&gt; और &lt;code&gt;Exception&lt;/code&gt;, &lt;code&gt;int&lt;/code&gt; और &lt;code&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/code&gt;। कोई common ancestor ज़रूरी नहीं।&lt;/p&gt;
&lt;h2 id="मजद-libraries-क-लए-custom-unions"&gt;मौजूदा Libraries के लिए Custom Unions&lt;/h2&gt;
&lt;p&gt;यहाँ एक smart design choice है: कोई भी class या struct जिसमें &lt;code&gt;[Union]&lt;/code&gt; attribute हो, उसे union type के रूप में पहचाना जाता है, जब तक वह basic pattern follow करे (case types के लिए public constructors और एक &lt;code&gt;Value&lt;/code&gt; property)। OneOf जैसी libraries जो पहले से union-like types provide करती हैं, वे अपनी internals rewrite किए बिना compiler support में opt in कर सकती हैं।&lt;/p&gt;
&lt;p&gt;Value types के साथ performance-sensitive scenarios के लिए, libraries &lt;code&gt;HasValue&lt;/code&gt; और &lt;code&gt;TryGetValue&lt;/code&gt; methods के साथ एक non-boxing access pattern implement कर सकती हैं।&lt;/p&gt;
&lt;h2 id="बड-तसवर"&gt;बड़ी तस्वीर&lt;/h2&gt;
&lt;p&gt;Union types C# में आने वाली एक broader exhaustiveness story का हिस्सा हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Union types&lt;/strong&gt; — types के closed set पर exhaustive matching (अभी preview में available)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Closed hierarchies&lt;/strong&gt; — &lt;code&gt;closed&lt;/code&gt; modifier defining assembly के बाहर derived classes को रोकता है (proposed)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Closed enums&lt;/strong&gt; — declared members के अलावा values बनाने से रोकता है (proposed)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;साथ में, ये तीन features C# को किसी भी mainstream language में सबसे comprehensive type-safe pattern matching systems में से एक देंगे।&lt;/p&gt;
&lt;h2 id="आज-ह-आजमए"&gt;आज ही आज़माएँ&lt;/h2&gt;
&lt;p&gt;Union types .NET 11 Preview 2 में available हैं:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://dotnet.microsoft.com/download/dotnet"&gt;.NET 11 Preview SDK&lt;/a&gt; install करें&lt;/li&gt;
&lt;li&gt;अपने project में &lt;code&gt;net11.0&lt;/code&gt; target करें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;LangVersion&amp;gt;preview&amp;lt;/LangVersion&amp;gt;&lt;/code&gt; set करें&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;एक caveat: Preview 2 में, आपको अपने project में &lt;code&gt;UnionAttribute&lt;/code&gt; और &lt;code&gt;IUnion&lt;/code&gt; declare करने होंगे क्योंकि वे अभी runtime में नहीं हैं। Docs repo से &lt;a href="https://github.com/dotnet/docs/blob/e68b5dd1e557b53c45ca43e61b013bc919619fb9/docs/csharp/language-reference/builtin-types/snippets/unions/RuntimePolyfill.cs"&gt;RuntimePolyfill.cs&lt;/a&gt; लें, या यह add करें:&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="k"&gt;namespace&lt;/span&gt; &lt;span class="nn"&gt;System.Runtime.CompilerServices&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="na"&gt; [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt; AllowMultiple = false)]&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;sealed&lt;/span&gt; &lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;UnionAttribute&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Attribute&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="k"&gt;interface&lt;/span&gt; &lt;span class="nc"&gt;IUnion&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;object?&lt;/span&gt; &lt;span class="n"&gt;Value&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&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="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Union types उन features में से हैं जो आपको सोचने पर मजबूर करते हैं कि इनके बिना हम कैसे काम करते थे। Compiler-enforced exhaustive matching, clean syntax, generic support, और मौजूदा pattern matching के साथ integration — यह सब कुछ है जो हम माँग रहे थे, C# के style में।&lt;/p&gt;
&lt;p&gt;.NET 11 Preview 2 में इन्हें आज़माएँ, चीज़ें तोड़ें, और &lt;a href="https://github.com/dotnet/csharplang/discussions/9663"&gt;GitHub पर अपना feedback share करें&lt;/a&gt;। यह preview है, और C# team सक्रिय रूप से सुन रही है। आपके edge cases और design feedback final release को आकार देंगे।&lt;/p&gt;
&lt;p&gt;पूर्ण language reference के लिए, &lt;a href="https://learn.microsoft.com/dotnet/csharp/language-reference/builtin-types/union"&gt;union types docs&lt;/a&gt; और &lt;a href="https://learn.microsoft.com/dotnet/csharp/language-reference/proposals/unions"&gt;feature specification&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 एक Docs CLI लेकर आया है — और आपका AI Agent भी इसका उपयोग कर सकता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>.NET Aspire 13.2 में aspire docs जोड़ा गया है — terminal छोड़े बिना official documentation खोजने, browse करने और पढ़ने के लिए एक CLI। यह AI agents के लिए tool की तरह भी काम करता है। यहाँ जानें यह क्यों मायने रखता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;आपने वो पल ज़रूर महसूस किया होगा जब आप किसी Aspire AppHost में गहरे डूबे हों, integrations wire up कर रहे हों, और आपको ठीक-ठीक जाँचना हो कि Redis integration किन parameters की उम्मीद करती है। आप browser पर alt-tab करते हैं, aspire.dev पर खोजते हैं, API docs को ध्यान से देखते हैं, फिर editor पर वापस आते हैं। Context खो गया। Flow टूट गया।&lt;/p&gt;
&lt;p&gt;Aspire 13.2 ने &lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;इसका हल ship किया है&lt;/a&gt;। &lt;code&gt;aspire docs&lt;/code&gt; CLI आपको official Aspire documentation को सीधे अपने terminal से search, browse, और पढ़ने देता है। और चूंकि यह reusable services से backed है, AI agents और skills वही commands use करके docs lookup कर सकते हैं, न कि ऐसी APIs hallucinate करें जो exist ही नहीं करतीं।&lt;/p&gt;
&lt;h2 id="यह-वसतव-म-कस-समसय-क-हल-करत-ह"&gt;यह वास्तव में किस समस्या को हल करता है&lt;/h2&gt;
&lt;p&gt;David Pine original post में बिल्कुल सही बात कहते हैं: AI agents Aspire apps बनाने में developers की मदद करने में &lt;em&gt;बेकार&lt;/em&gt; थे। वे &lt;code&gt;aspire run&lt;/code&gt; की जगह &lt;code&gt;dotnet run&lt;/code&gt; recommend करते, aspire.dev के docs के लिए learn.microsoft.com reference करते, outdated NuGet packages suggest करते, और — मेरी personal favorite — ऐसी APIs hallucinate करते जो exist ही नहीं करतीं।&lt;/p&gt;
&lt;p&gt;क्यों? क्योंकि Aspire polyglot बनने से कहीं ज़्यादा समय तक .NET-specific था, और LLMs ऐसे training data से काम कर रहे हैं जो latest features से पहले का है। जब आप एक AI agent को actual docs lookup करने की क्षमता देते हैं, तो वह अंदाज़े लगाना बंद कर देता है और उपयोगी बनने लगता है।&lt;/p&gt;
&lt;h2 id="तन-commands-शनय-browser-tabs"&gt;तीन commands, शून्य browser tabs&lt;/h2&gt;
&lt;p&gt;CLI refreshingly simple है:&lt;/p&gt;
&lt;h3 id="सभ-docs-list-कर"&gt;सभी docs list करें&lt;/h3&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 docs list
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;aspire.dev पर available हर documentation page return करता है। Machine-readable output चाहिए? &lt;code&gt;--format Json&lt;/code&gt; जोड़ें।&lt;/p&gt;
&lt;h3 id="कस-topic-क-search-कर"&gt;किसी topic को search करें&lt;/h3&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 docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;weighted relevance scoring के साथ titles और content दोनों में search करता है। वही search engine जो internally documentation tooling को power करता है। आपको titles, slugs, और relevance scores के साथ ranked results मिलते हैं।&lt;/p&gt;
&lt;h3 id="पर-page-पढ-य-सरफ-एक-section"&gt;पूरा page पढ़ें (या सिर्फ एक section)&lt;/h3&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 docs get redis-integration
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;पूरा page markdown के रूप में आपके terminal में stream करता है। सिर्फ एक section चाहिए?&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 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;p&gt;सटीक precision। 500 lines scroll करने की ज़रूरत नहीं। बस वो हिस्सा जो आपको चाहिए।&lt;/p&gt;
&lt;h2 id="ai-agent-क-angle"&gt;AI agent का angle&lt;/h2&gt;
&lt;p&gt;यहाँ AI tooling के साथ build करने वाले developers के लिए दिलचस्प बात है। वही &lt;code&gt;aspire docs&lt;/code&gt; commands AI agents के लिए tools की तरह काम करते हैं — skills, MCP servers, या simple CLI wrappers के ज़रिये।&lt;/p&gt;
&lt;p&gt;आपके AI assistant के stale training data के आधार पर Aspire APIs बनाने की बजाय, वह &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt; call कर सकता है, official integration docs ढूंढ सकता है, सही page पढ़ सकता है, और आपको documented approach दे सकता है। Real-time, current documentation — model ने छह महीने पहले जो memorize किया था वह नहीं।&lt;/p&gt;
&lt;p&gt;इसके पीछे का architecture जानबूझकर बनाया गया है। Aspire team ने एक one-off integration की बजाय reusable services (&lt;code&gt;IDocsIndexService&lt;/code&gt;, &lt;code&gt;IDocsSearchService&lt;/code&gt;, &lt;code&gt;IDocsFetcher&lt;/code&gt;, &lt;code&gt;IDocsCache&lt;/code&gt;) बनाई हैं। इसका मतलब है कि वही search engine terminal में इंसानों के लिए, आपके editor में AI agents के लिए, और आपके CI pipeline में automation के लिए काम करता है।&lt;/p&gt;
&lt;h2 id="real-world-scenarios"&gt;Real-world scenarios&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Quick terminal lookups:&lt;/strong&gt; आप तीन files गहरे हैं और Redis config parameters चाहिए। दो commands, नब्बे सेकंड, काम पर वापस:&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 docs search &lt;span class="s2"&gt;&amp;#34;redis&amp;#34;&lt;/span&gt; --limit &lt;span class="m"&gt;1&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;Configuration&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;AI-assisted development:&lt;/strong&gt; आपकी VS Code skill CLI commands को wrap करती है। आप पूछते हैं &amp;ldquo;Add a PostgreSQL database to my AppHost&amp;rdquo; और agent जवाब देने से पहले actual docs lookup करता है। कोई hallucinations नहीं।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CI/CD validation:&lt;/strong&gt; आपकी pipeline AppHost configurations को programmatically official documentation के against validate करती है। &lt;code&gt;--format Json&lt;/code&gt; output &lt;code&gt;jq&lt;/code&gt; और अन्य tools में cleanly pipe होता है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom knowledge bases:&lt;/strong&gt; अपना AI tooling बना रहे हैं? Structured JSON output को directly अपने knowledge base में pipe करें:&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 docs search &lt;span class="s2"&gt;&amp;#34;monitoring&amp;#34;&lt;/span&gt; --format Json &lt;span class="p"&gt;|&lt;/span&gt; jq &lt;span class="s1"&gt;&amp;#39;[.[] | {slug, title, summary}]&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;कोई web scraping नहीं। कोई API keys नहीं। वही structured data जो docs tooling internally use करती है।&lt;/p&gt;
&lt;h2 id="documentation-हमश-live-ह"&gt;Documentation हमेशा live है&lt;/h2&gt;
&lt;p&gt;यही वह हिस्सा है जो मुझे सबसे ज़्यादा पसंद है। CLI एक snapshot download नहीं करता — यह ETag-based caching के साथ aspire.dev query करता है। जिस moment docs update होते हैं, आपका CLI और उस पर बना कोई भी skill उसे reflect करता है। कोई stale copies नहीं, कोई &amp;ldquo;but the wiki said&amp;hellip;&amp;rdquo; moments नहीं।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; उन छोटी features में से एक है जो एक असली समस्या को cleanly हल करती है। इंसानों को terminal-native documentation access मिलती है। AI agents को अंदाज़े लगाना बंद करके actual docs reference करने का तरीका मिलता है। और यह सब एक ही source of truth से backed है।&lt;/p&gt;
&lt;p&gt;अगर आप .NET Aspire के साथ build कर रहे हैं और अभी तक CLI try नहीं किया है, तो &lt;code&gt;aspire docs search &amp;quot;your-topic-here&amp;quot;&lt;/code&gt; चलाएं और देखें कैसा लगता है। फिर उन commands को जो भी AI skill या automation setup आप use कर रहे हैं उसमें wrap करने पर विचार करें — आपके agents आपको धन्यवाद देंगे।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;David Pine का deep dive&lt;/a&gt; देखें कि docs tooling कैसे बनी, और सभी details के लिए &lt;a href="https://aspire.dev/reference/cli/commands/aspire-docs/"&gt;official CLI reference&lt;/a&gt;।&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework 1.0 पर पहुँचा — .NET Developers के लिए असल में क्या मायने रखता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/</guid><description>Microsoft Agent Framework 1.0 production-ready है — stable APIs, multi-agent orchestration, और हर प्रमुख AI provider के लिए connectors के साथ। एक .NET developer के रूप में आपको यह जानना चाहिए।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/agent-framework-1-0-production-ready/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप Agent Framework की यात्रा को Semantic Kernel और AutoGen के शुरुआती दिनों से follow कर रहे हैं, तो यह milestone महत्वपूर्ण है। Microsoft Agent Framework ने अभी-अभी &lt;a href="https://devblogs.microsoft.com/agent-framework/microsoft-agent-framework-version-1-0/"&gt;version 1.0&lt;/a&gt; हासिल किया है — production-ready, stable APIs, long-term support का वादा। यह .NET और Python दोनों के लिए उपलब्ध है, और वाकई real workloads के लिए तैयार है।&lt;/p&gt;
&lt;p&gt;घोषणा के शोर को काटकर, अगर आप .NET के साथ AI-powered apps बना रहे हैं तो जो मायने रखता है उस पर ध्यान देते हैं।&lt;/p&gt;
&lt;h2 id="सकषपत-म"&gt;संक्षिप्त में&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 जो पहले Semantic Kernel और AutoGen थे उन्हें एक single, open-source SDK में एकत्रित करता है। एक agent abstraction। एक orchestration engine। कई AI providers। अगर आप enterprise patterns के लिए Semantic Kernel और research-grade multi-agent workflows के लिए AutoGen के बीच झूलते रहे हैं, तो अब रुकिए। यही एक SDK है।&lt;/p&gt;
&lt;h2 id="शरआत-करन-लगभग-आसन-ह"&gt;शुरुआत करना लगभग आसान है&lt;/h2&gt;
&lt;p&gt;.NET में एक working agent यह रहा:&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;बस इतना। कुछ lines और आपके पास Azure Foundry के विरुद्ध एक AI agent चल रहा है। Python का equivalent उतना ही संक्षिप्त है। जैसे-जैसे आगे बढ़ें, function tools, multi-turn conversations, और streaming जोड़ें — API surface बड़ा होता जाता है लेकिन अजीब नहीं।&lt;/p&gt;
&lt;h2 id="multi-agent-orchestration--यह-असल-चज-ह"&gt;Multi-agent orchestration — यह असली चीज़ है&lt;/h2&gt;
&lt;p&gt;Single agents demos के लिए ठीक हैं, लेकिन production scenarios में अक्सर coordination की ज़रूरत होती है। Agent Framework 1.0 Microsoft Research और AutoGen से सीधे battle-tested orchestration patterns लेकर आता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sequential&lt;/strong&gt; — agents क्रम में process करते हैं (writer → reviewer → editor)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Concurrent&lt;/strong&gt; — कई agents को parallel में fan out करें, results converge करें&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Handoff&lt;/strong&gt; — एक agent intent के आधार पर दूसरे को delegate करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Group chat&lt;/strong&gt; — कई agents discuss करते हैं और solution पर converge होते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Magentic-One&lt;/strong&gt; — MSR का research-grade multi-agent pattern&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;सभी streaming, checkpointing, human-in-the-loop approvals, और pause/resume support करते हैं। Checkpointing हिस्सा बेहद ज़रूरी है — long-running workflows process restarts के बाद भी survive करते हैं। हम .NET developers के लिए जिन्होंने Azure Functions के साथ durable workflows बनाए हैं, यह जाना-पहचाना लगता है।&lt;/p&gt;
&lt;h2 id="सबस-जयद-मयन-रखन-वल-features"&gt;सबसे ज़्यादा मायने रखने वाले features&lt;/h2&gt;
&lt;p&gt;जो जानने लायक है उसकी मेरी shortlist:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Middleware hooks।&lt;/strong&gt; आप जानते हैं कैसे ASP.NET Core में middleware pipelines होती हैं? वही concept, लेकिन agent execution के लिए। हर stage को intercept करें — agent prompts को छुए बिना content safety, logging, compliance policies जोड़ें। यही तरीका है agents को enterprise-ready बनाने का।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Pluggable memory।&lt;/strong&gt; Conversational history, persistent key-value state, vector-based retrieval। अपना backend चुनें: Foundry Agent Service, Mem0, Redis, Neo4j, या खुद का बनाएँ। Memory ही एक stateless LLM call को ऐसे agent में बदलती है जो वाकई context याद रखता है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Declarative YAML agents।&lt;/strong&gt; अपने agent की instructions, tools, memory, और orchestration topology को version-controlled YAML files में define करें। Single API call से load और run करें। जो teams बिना code redeploy किए agent behavior पर iterate करना चाहती हैं, उनके लिए यह game-changer है।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A2A और MCP support।&lt;/strong&gt; MCP (Model Context Protocol) agents को dynamically external tools discover और invoke करने देता है। A2A (Agent-to-Agent protocol) cross-runtime collaboration सक्षम करता है — आपके .NET agents दूसरे frameworks में चल रहे agents के साथ coordinate कर सकते हैं। A2A 1.0 support जल्द आ रहा है।&lt;/p&gt;
&lt;h2 id="दखन-लयक-preview-features"&gt;देखने लायक preview features&lt;/h2&gt;
&lt;p&gt;1.0 में कुछ features preview के रूप में ship हुए हैं — functional हैं लेकिन APIs बदल सकती हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;DevUI&lt;/strong&gt; — agent execution, message flows, और tool calls को real time में visualize करने के लिए browser-based local debugger। Application Insights की तरह समझें, लेकिन agent reasoning के लिए।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Copilot SDK और Claude Code SDK&lt;/strong&gt; — अपने orchestration code से सीधे Copilot या Claude को agent harness के रूप में use करें। एक coding-capable agent को उसी workflow में अपने दूसरे agents के साथ compose करें।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Agent Harness&lt;/strong&gt; — agents को shell, file system, और messaging loops तक access देने वाला customizable local runtime। Coding agents और automation patterns सोचें।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt; — reusable domain capability packages जो agents को out of the box structured capabilities देते हैं।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="semantic-kernel-य-autogen-स-migrate-करन"&gt;Semantic Kernel या AutoGen से migrate करना&lt;/h2&gt;
&lt;p&gt;अगर आपके पास existing Semantic Kernel या AutoGen code है, तो dedicated migration assistants हैं जो आपका code analyze करते हैं और step-by-step migration plans generate करते हैं। &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-semantic-kernel"&gt;Semantic Kernel migration guide&lt;/a&gt; और &lt;a href="https://learn.microsoft.com/en-us/agent-framework/migration-guide/from-autogen"&gt;AutoGen migration guide&lt;/a&gt; सब कुछ walk through करते हैं।&lt;/p&gt;
&lt;p&gt;अगर आप RC packages पर हैं, तो 1.0 में upgrade करना बस एक version bump है।&lt;/p&gt;
&lt;h2 id="wrapping-up"&gt;Wrapping up&lt;/h2&gt;
&lt;p&gt;Agent Framework 1.0 वह production milestone है जिसका enterprise teams को इंतज़ार था। Stable APIs, multi-provider support, orchestration patterns जो scale पर वाकई काम करते हैं, और Semantic Kernel और AutoGen दोनों से migration paths।&lt;/p&gt;
&lt;p&gt;Framework &lt;a href="https://github.com/microsoft/agent-framework"&gt;GitHub पर पूरी तरह open source&lt;/a&gt; है, और आप आज ही &lt;code&gt;dotnet add package Microsoft.Agents.AI&lt;/code&gt; से शुरुआत कर सकते हैं। हाथ गंदे करने के लिए &lt;a href="https://learn.microsoft.com/en-us/agent-framework/get-started/"&gt;quickstart guide&lt;/a&gt; और &lt;a href="https://github.com/microsoft/agent-framework"&gt;samples&lt;/a&gt; देखें।&lt;/p&gt;
&lt;p&gt;अगर आप &amp;ldquo;production में use करना safe है&amp;rdquo; का signal ढूंढ रहे थे — यह रहा।&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 के Dashboard को मिला Telemetry API — और इसने सब कुछ बदल दिया</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/</guid><description>.NET Aspire 13.2 में smarter telemetry export, traces और logs के लिए एक programmable API, और GenAI visualization improvements आई हैं। यहाँ जानें यह आपके debugging workflow के लिए क्यों मायने रखता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/aspire-132-dashboard-export-telemetry/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप .NET Aspire के साथ distributed apps बना रहे हैं, तो आप पहले से जानते हैं कि dashboard पूरे experience की सबसे अच्छी चीज़ है। आपके सारे traces, logs और metrics एक जगह — कोई external Jaeger नहीं, कोई Seq setup नहीं, कोई &amp;ldquo;let me check the other terminal&amp;rdquo; के moments नहीं।&lt;/p&gt;
&lt;p&gt;Aspire 13.2 ने इसे काफी बेहतर बना दिया है। James Newton-King ने &lt;a href="https://devblogs.microsoft.com/aspire/aspire-dashboard-improvements-export-and-telemetry/"&gt;update की घोषणा की&lt;/a&gt;, और सच कहूँ तो? Telemetry export और API features अकेले ही upgrade के लायक हैं।&lt;/p&gt;
&lt;h2 id="telemetry-export-अब-एक-समझदर-तरक-स"&gt;Telemetry export अब एक समझदार तरीके से&lt;/h2&gt;
&lt;p&gt;यहाँ वो scenario है जो हम सभी ने झेला है: आप एक distributed issue debug कर रहे हैं, बीस मिनट की setup के बाद आखिरकार इसे reproduce करते हैं, और अब आपको अपनी team के साथ share करना है कि क्या हुआ। पहले? Screenshots। Trace IDs copy-paste करना। वही पुरानी गड़बड़।&lt;/p&gt;
&lt;p&gt;Aspire 13.2 में एक proper &lt;strong&gt;Manage logs and telemetry&lt;/strong&gt; dialog जुड़ा है जहाँ आप कर सकते हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;सारी telemetry clear करना (repro attempt से पहले उपयोगी)&lt;/li&gt;
&lt;li&gt;Selected telemetry को standard OTLP/JSON format में ZIP file में export करना&lt;/li&gt;
&lt;li&gt;उस ZIP को किसी भी Aspire dashboard में बाद में re-import करना&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;वह आखिरी हिस्सा killer feature है। आप एक bug reproduce करते हैं, telemetry export करते हैं, इसे अपने work item में attach करते हैं, और आपका teammate इसे अपने dashboard में import कर सकता है ताकि ठीक वही देख सके जो आपने देखा। अब &amp;ldquo;क्या आप इसे अपनी machine पर reproduce कर सकते हैं?&amp;rdquo; नहीं पूछना पड़ेगा।&lt;/p&gt;
&lt;p&gt;Individual traces, spans और logs को भी उनके context menus में &amp;ldquo;Export JSON&amp;rdquo; का option मिलता है। एक specific trace share करनी है? Right-click, JSON copy करें, PR description में paste करें। हो गया।&lt;/p&gt;
&lt;h2 id="telemetry-api-असल-game-changer-ह"&gt;Telemetry API असली game changer है&lt;/h2&gt;
&lt;p&gt;यही वो चीज़ है जिसके बारे में मैं सबसे ज़्यादा excited हूँ। Dashboard अब telemetry data को programmatically query करने के लिए &lt;code&gt;/api/telemetry&lt;/code&gt; के नीचे एक HTTP API expose करता है। Available endpoints:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/resources&lt;/code&gt; — telemetry वाले resources की list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/spans&lt;/code&gt; — filters के साथ spans query करें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/logs&lt;/code&gt; — filters के साथ logs query करें&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces&lt;/code&gt; — traces की list&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GET /api/telemetry/traces/{traceId}&lt;/code&gt; — एक specific trace के सभी spans पाएं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;सब कुछ OTLP JSON format में वापस आता है। यह नए &lt;code&gt;aspire agent mcp&lt;/code&gt; और &lt;code&gt;aspire otel&lt;/code&gt; CLI commands को power करता है, लेकिन असली implication बड़ा है: अब आप tooling, scripts और AI agent integrations बना सकते हैं जो आपके app की telemetry को directly query करें।&lt;/p&gt;
&lt;p&gt;सोचिए एक AI coding agent जो debugging के दौरान आपके actual distributed traces देख सके। यह अब hypothetical नहीं है — यह वही है जो यह API enable करता है।&lt;/p&gt;
&lt;h2 id="genai-telemetry-practical-ह-गई"&gt;GenAI telemetry practical हो गई&lt;/h2&gt;
&lt;p&gt;अगर आप Semantic Kernel या Microsoft.Extensions.AI के साथ AI-powered apps बना रहे हैं, तो आप improved GenAI telemetry visualizer की सराहना करेंगे। Aspire 13.2 में जुड़ा:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AI tool descriptions Markdown के रूप में rendered&lt;/li&gt;
&lt;li&gt;Traces page पर quick AI trace access के लिए एक dedicated GenAI button&lt;/li&gt;
&lt;li&gt;Truncated या non-standard GenAI JSON के लिए बेहतर error handling&lt;/li&gt;
&lt;li&gt;Tool definitions के बीच click-to-highlight navigation&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Blog post में बताया गया है कि VS Code Copilot chat, Copilot CLI, और OpenCode सभी &lt;code&gt;OTEL_EXPORTER_OTLP_ENDPOINT&lt;/code&gt; configure करने का support करते हैं। उन्हें Aspire dashboard पर point करें और आप literally telemetry के ज़रिए real time में अपने AI agents की सोच देख सकते हैं। यह एक debugging experience है जो आपको और कहीं नहीं मिलेगी।&lt;/p&gt;
&lt;h2 id="अत-म"&gt;अंत में&lt;/h2&gt;
&lt;p&gt;Aspire 13.2 dashboard को &amp;ldquo;nice debugging UI&amp;rdquo; से &amp;ldquo;programmable observability platform&amp;rdquo; बना देता है। Export/import workflow अकेले ही distributed debugging में real time बचाता है, और telemetry API AI-assisted diagnostics का दरवाज़ा खोलता है।&lt;/p&gt;
&lt;p&gt;अगर आप पहले से Aspire पर हैं, upgrade करें। अगर नहीं हैं — यह &lt;a href="https://aspire.dev"&gt;aspire.dev&lt;/a&gt; देखने का एक अच्छा कारण है और समझने का कि इतना शोर क्यों है।&lt;/p&gt;</content:encoded></item><item><title>azd अब आपको AI Agents को Locally Run और Debug करने देता है — March 2026 में क्या बदला</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/</guid><description>Azure Developer CLI ने March 2026 में सात releases ship कीं। मुख्य बातें: AI agents के लिए local run-and-debug loop, project setup में GitHub Copilot integration, और Container App Jobs support।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azd-march-2026-local-ai-agent-debugging/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;एक महीने में सात releases। यही Azure Developer CLI (&lt;code&gt;azd&lt;/code&gt;) team ने March 2026 में deliver किया, और headline feature वही है जिसका मुझे इंतज़ार था: &lt;strong&gt;AI agents के लिए local run-and-debug loop&lt;/strong&gt;।&lt;/p&gt;
&lt;p&gt;PC Chan ने &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;पूरा roundup publish किया है&lt;/a&gt;, और हालाँकि उसमें काफी कुछ है, लेकिन मुझे जो AI-powered apps build करने वाले .NET developers के लिए वाकई मायने रखता है वह filter करने दें।&lt;/p&gt;
&lt;h2 id="deploy-कए-बन-ai-agents-run-और-debug-कर"&gt;Deploy किए बिना AI agents run और debug करें&lt;/h2&gt;
&lt;p&gt;यही बड़ी बात है। नया &lt;code&gt;azure.ai.agents&lt;/code&gt; extension commands का एक set add करता है जो AI agents के लिए एक proper inner-loop experience देता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;azd ai agent run&lt;/code&gt; — आपके agent को locally start करता है&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent invoke&lt;/code&gt; — उसे messages भेजता है (local या deployed)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent show&lt;/code&gt; — container status और health display करता है&lt;/li&gt;
&lt;li&gt;&lt;code&gt;azd ai agent monitor&lt;/code&gt; — real time में container logs stream करता है&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;इससे पहले, एक AI agent को test करने का मतलब था हर बदलाव के बाद Microsoft Foundry में deploy करना। अब आप locally iterate कर सकते हैं, अपने agent के behavior को test कर सकते हैं, और deploy तभी करें जब आप ready हों। अगर आप Microsoft Agent Framework या Semantic Kernel के साथ agents build कर रहे हैं, तो यह आपके daily workflow को बदल देता है।&lt;/p&gt;
&lt;p&gt;Invoke command local और deployed दोनों agents के against काम करता है, जिसका मतलब है कि आप same testing workflow use कर सकते हैं चाहे agent कहीं भी run हो। यह वह detail है जो आपको दो sets of test scripts maintain करने से बचाती है।&lt;/p&gt;
&lt;h2 id="github-copilot-आपक-azd-project-scaffold-करत-ह"&gt;GitHub Copilot आपका azd project scaffold करता है&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd init&lt;/code&gt; अब &amp;ldquo;Set up with GitHub Copilot (Preview)&amp;rdquo; option offer करता है। अपने project structure के बारे में manually prompts का जवाब देने की बजाय, एक Copilot agent आपके लिए configuration scaffold करता है। यह कुछ modify करने से पहले dirty working directory check करता है और upfront MCP server tool consent माँगता है।&lt;/p&gt;
&lt;p&gt;जब कोई command fail होती है, &lt;code&gt;azd&lt;/code&gt; अब AI-assisted troubleshooting offer करता है: एक category चुनें (explain, guidance, troubleshoot, या skip), agent को fix suggest करने दें, और retry करें — terminal छोड़े बिना। Complex infrastructure setups के लिए, यह वाकई time saver है।&lt;/p&gt;
&lt;h2 id="container-app-jobs-और-deployment-improvements"&gt;Container App Jobs और deployment improvements&lt;/h2&gt;
&lt;p&gt;कुछ deployment features जो ध्यान देने योग्य हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Container App Jobs&lt;/strong&gt;: &lt;code&gt;azd&lt;/code&gt; अब existing &lt;code&gt;host: containerapp&lt;/code&gt; config के ज़रिये &lt;code&gt;Microsoft.App/jobs&lt;/code&gt; deploy करता है। आपका Bicep template decide करता है कि target Container App है या Job — कोई extra setup नहीं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Configurable deployment timeouts&lt;/strong&gt;: &lt;code&gt;azd deploy&lt;/code&gt; पर नया &lt;code&gt;--timeout&lt;/code&gt; flag और &lt;code&gt;azure.yaml&lt;/code&gt; में &lt;code&gt;deployTimeout&lt;/code&gt; field। Default 1200-second limit का अंदाज़ा लगाना अब नहीं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote build fallback&lt;/strong&gt;: जब remote ACR build fail हो, &lt;code&gt;azd&lt;/code&gt; automatically local Docker/Podman build पर fallback करता है।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local preflight validation&lt;/strong&gt;: Bicep parameters Azure को round-trip किए बिना locally validate होते हैं, missing params पहले ही पकड़े जाते हैं।&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="developer-experience-क-polish"&gt;Developer experience की polish&lt;/h2&gt;
&lt;p&gt;कुछ smaller improvements जो मिलकर फर्क डालती हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;JS/TS projects के लिए &lt;strong&gt;Automatic pnpm/yarn detection&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Python packaging के लिए &lt;strong&gt;pyproject.toml support&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Local template directories&lt;/strong&gt; — &lt;code&gt;azd init --template&lt;/code&gt; अब offline iteration के लिए filesystem paths accept करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;--no-prompt&lt;/code&gt; mode में बेहतर error messages&lt;/strong&gt; — सभी missing values एक साथ resolution commands के साथ report होते हैं&lt;/li&gt;
&lt;li&gt;सभी framework build subprocesses (.NET, Node.js, Java, Python) में &lt;strong&gt;Build environment variables&lt;/strong&gt; inject होते हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;वह आखिरी बात subtle लेकिन महत्वपूर्ण है: आपके .NET build को अब &lt;code&gt;azd&lt;/code&gt; environment variables का access है, जिसका मतलब है कि आप extra scripting के बिना build-time configuration injection कर सकते हैं।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Local AI agent debugging loop इस release का star है, लेकिन deployment improvements और DX polish का जमावड़ा &lt;code&gt;azd&lt;/code&gt; को पहले से कहीं ज़्यादा mature feel कराता है। अगर आप Azure पर .NET apps deploy कर रहे हैं — खासकर AI agents — तो यह update install करने लायक है।&lt;/p&gt;
&lt;p&gt;हर detail के लिए &lt;a href="https://devblogs.microsoft.com/azure-sdk/azure-developer-cli-azd-march-2026/"&gt;पूरे release notes&lt;/a&gt; देखें, या &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;azd install&lt;/a&gt; से शुरू करें।&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps ने आखिरकार वो Markdown Editor UX ठीक किया जिसकी सबको शिकायत थी</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/</guid><description>Azure DevOps में work items के Markdown editor को अब स्पष्ट preview और edit mode मिला है। यह एक छोटा बदलाव है जो एक वास्तविक परेशान करने वाली workflow समस्या को ठीक करता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-devops-markdown-editor-work-items/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आप Azure Boards इस्तेमाल करते हैं, तो शायद आपने यह अनुभव किया होगा: आप किसी work item की description पढ़ रहे हैं, शायद acceptance criteria review कर रहे हैं, और गलती से double-click हो जाती है। बस — आप edit mode में चले जाते हैं। आप कुछ edit करना नहीं चाहते थे। आप बस पढ़ रहे थे।&lt;/p&gt;
&lt;p&gt;Dan Hellem ने &lt;a href="https://devblogs.microsoft.com/devops/improving-the-markdown-editor-for-work-items/"&gt;इस fix की घोषणा की&lt;/a&gt;, और यह उन बदलावों में से एक है जो सुनने में तो छोटा लगता है लेकिन वास्तव में आपकी रोज़ाना की workflow से असली परेशानी दूर करता है।&lt;/p&gt;
&lt;h2 id="कय-बदल"&gt;क्या बदला&lt;/h2&gt;
&lt;p&gt;work item text fields के लिए Markdown editor अब &lt;strong&gt;default रूप से preview mode में&lt;/strong&gt; खुलता है। आप content पढ़ और उसके साथ इंटरैक्ट कर सकते हैं — links follow कर सकते हैं, formatting review कर सकते हैं — बिना गलती से edit mode में जाने की चिंता किए।&lt;/p&gt;
&lt;p&gt;जब आप वास्तव में edit करना चाहते हैं, तो field के ऊपर edit icon पर क्लिक करें। जब काम हो जाए, तो explicitly preview mode पर वापस आ जाएं। सरल, जानबूझकर, और अनुमानित।&lt;/p&gt;
&lt;p&gt;बस इतना ही। यही बदलाव है।&lt;/p&gt;
&lt;h2 id="यह-जतन-लगत-ह-उसस-जयद-मयन-कय-रखत-ह"&gt;यह जितना लगता है उससे ज़्यादा मायने क्यों रखता है&lt;/h2&gt;
&lt;p&gt;इस पर &lt;a href="https://developercommunity.visualstudio.com/t/Markdown-editor-for-work-item-multi-line/10935496"&gt;community feedback thread&lt;/a&gt; काफी लंबा था। double-click-to-edit का behavior जुलाई 2025 में Markdown editor के साथ आया था, और शिकायतें लगभग तुरंत शुरू हो गईं। समस्या केवल गलत edits तक सीमित नहीं थी — पूरा interaction अप्रत्याशित लगता था। आपको कभी पता नहीं चलता था कि click करने से read होगा या edit।&lt;/p&gt;
&lt;p&gt;जो teams Azure Boards के साथ sprint planning, backlog grooming, या code review करती हैं, उनके लिए इस तरह की micro-friction जमा होती रहती है। हर गलत edit mode entry एक context switch है। हर &amp;ldquo;रुको, क्या मैंने कुछ बदला?&amp;rdquo; वाला पल ध्यान की बर्बादी है।&lt;/p&gt;
&lt;p&gt;नया default सबसे आम interaction pattern का सम्मान करता है: आप work items को edit करने से कहीं ज़्यादा बार पढ़ते हैं।&lt;/p&gt;
&lt;h2 id="rollout-क-सथत"&gt;Rollout की स्थिति&lt;/h2&gt;
&lt;p&gt;यह पहले से ही कुछ customers के लिए rollout हो रहा है और अगले दो से तीन हफ्तों में सभी के लिए उपलब्ध हो जाएगा। अगर आपको अभी नहीं दिख रहा, तो जल्द ही दिखेगा।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;हर सुधार को headline feature नहीं होना चाहिए। कभी-कभी सबसे अच्छा update बस कुछ परेशान करने वाली चीज़ को हटाना होता है। यह उन्हीं में से एक है — एक छोटा UX fix जो Azure Boards को उन लोगों के लिए कम कठिन बनाता है जो बस शांति से अपने work items पढ़ना चाहते हैं।&lt;/p&gt;</content:encoded></item><item><title>Bookmark Studio, Visual Studio Bookmarks में Slot-Based Navigation और Sharing लाता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/</guid><description>Mads Kristensen का नया Bookmark Studio extension, Visual Studio bookmarks में keyboard-driven slot navigation, bookmark manager, रंग, लेबल, और export/share सुविधाएँ जोड़ता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/bookmark-studio-visual-studio-extension/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Visual Studio में Bookmarks हमेशा से&amp;hellip; ठीक-ठाक रही हैं। आप एक set करते हैं, अगले पर जाते हैं, और भूल जाते हैं कि कौन-सा bookmark किसके लिए था। वे काम करती हैं, लेकिन उन्हें कभी &amp;ldquo;शक्तिशाली&amp;rdquo; नहीं कहा जा सकता था।&lt;/p&gt;
&lt;p&gt;Mads Kristensen ने हाल ही में &lt;a href="https://devblogs.microsoft.com/visualstudio/bookmark-studio-evolving-bookmarks-in-visual-studio/"&gt;Bookmark Studio release किया&lt;/a&gt;, एक experimental extension जो उन्हीं कमियों को भरता है जिनसे आप शायद तब परिचित हों जब bookmarks नियमित रूप से उपयोग करते हैं।&lt;/p&gt;
&lt;h2 id="slot-based-navigation"&gt;Slot-Based Navigation&lt;/h2&gt;
&lt;p&gt;मुख्य नई सुविधा: bookmarks को अब slots 1–9 में assign किया जा सकता है और सीधे &lt;code&gt;Alt+Shift+1&lt;/code&gt; से &lt;code&gt;Alt+Shift+9&lt;/code&gt; के ज़रिए उन पर jump किया जा सकता है। नई bookmarks स्वचालित रूप से अगले उपलब्ध slot में चली जाती हैं, इसलिए ज़्यादातर मामलों में बिना किसी setup के तेज़ navigation काम करती है।&lt;/p&gt;
&lt;p&gt;यह सरल लगता है, लेकिन इससे bookmarks &amp;ldquo;मेरे पास कुछ bookmarks हैं कहीं&amp;rdquo; से बदलकर &amp;ldquo;Slot 3 मेरा API controller है, Slot 5 service layer है, Slot 7 test है&amp;rdquo; हो जाती हैं। इस तरह की spatial memory, focused work sessions के दौरान navigation को लगभग तात्कालिक बना देती है।&lt;/p&gt;
&lt;h2 id="bookmark-manager"&gt;Bookmark Manager&lt;/h2&gt;
&lt;p&gt;एक नया tool window सभी bookmarks को एक जगह दिखाता है जिसमें नाम, फ़ाइल, location, रंग या slot के अनुसार filtering होती है। किसी भी bookmark पर jump करने के लिए double-click करें या keyboard से navigate करें।&lt;/p&gt;
&lt;p&gt;अगर आपके पास कभी पाँच-छह से अधिक bookmarks हों और आप ट्रैक न कर पाएँ कि कौन-सी किसके लिए थी, तो यह अकेले extension install करने के लिए पर्याप्त कारण है।&lt;/p&gt;
&lt;h2 id="लबल-रग-और-फलडर-क-सथ-organization"&gt;लेबल, रंग, और फ़ोल्डर के साथ organization&lt;/h2&gt;
&lt;p&gt;Bookmarks में वैकल्पिक रूप से लेबल, रंग हो सकते हैं और उन्हें फ़ोल्डर में group किया जा सकता है। इनमें से कुछ भी ज़रूरी नहीं है — आपका मौजूदा bookmark workflow काम करता रहेगा। लेकिन जब आप किसी जटिल समस्या को debug कर रहे हों या किसी अपरिचित codebase को explore कर रहे हों, तो bookmarks को color-code और label करने की क्षमता उपयोगी context जोड़ती है।&lt;/p&gt;
&lt;p&gt;सभी metadata per solution store होता है, इसलिए आपकी bookmark organization sessions के पार बनी रहती है।&lt;/p&gt;
&lt;h2 id="export-और-share"&gt;Export और Share&lt;/h2&gt;
&lt;p&gt;यह वह feature है जो मुझे पता नहीं था कि मुझे चाहिए था। Bookmark Studio आपको bookmarks को plain text, Markdown, या CSV के रूप में export करने देता है। इसका मतलब है कि आप:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pull request descriptions में bookmark paths शामिल कर सकते हैं&lt;/li&gt;
&lt;li&gt;Teammates के साथ investigation breadcrumbs share कर सकते हैं&lt;/li&gt;
&lt;li&gt;Repos या branches के बीच bookmark sets move कर सकते हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Bookmarks अब केवल एक solo navigation tool नहीं रहतीं — ये &amp;ldquo;इस code से गुज़रने का रास्ता यहाँ है&amp;rdquo; communicate करने का ज़रिया बन जाती हैं।&lt;/p&gt;
&lt;h2 id="code-movement-क-track-करन-वल-bookmarks"&gt;Code Movement को Track करने वाली Bookmarks&lt;/h2&gt;
&lt;p&gt;Bookmark Studio, bookmarks को उस text के सापेक्ष track करता है जिससे वे anchored हैं, इसलिए edit करते समय वे गलत lines पर नहीं चली जातीं। अगर आपने कभी debugging session के दौरान bookmarks set की हों और refactor के बाद वे सब गलत lines पर point करने लगी हों — यह उसे ठीक करता है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Bookmark Studio कुछ नया नहीं करता। यह एक ऐसी feature को लेता है जो सालों से &amp;ldquo;काफी अच्छी&amp;rdquo; रही है और उसे focused development के लिए वास्तव में उपयोगी बनाता है। Slot navigation, Bookmark Manager, और export capabilities इसकी मुख्य विशेषताएँ हैं।&lt;/p&gt;
&lt;p&gt;इसे &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>Visual Studio के March अपडेट में Custom Copilot Agents बनाने की सुविधा — और find_symbol टूल एक बड़ी बात है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/</guid><description>Visual Studio के March 2026 अपडेट में custom Copilot agents, reusable agent skills, language-aware find_symbol टूल, और Test Explorer से Copilot-powered profiling आई है। यहाँ जानिए क्या मायने रखता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/visual-studio-march-2026-custom-copilot-agents/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Visual Studio को अब तक का सबसे महत्वपूर्ण Copilot अपडेट मिला है। Mark Downie ने &lt;a href="https://devblogs.microsoft.com/visualstudio/visual-studio-march-update-build-your-own-custom-agents/"&gt;March release की घोषणा की&lt;/a&gt;, और headline custom agents की है — लेकिन सच कहें तो थोड़ा आगे छुपा &lt;code&gt;find_symbol&lt;/code&gt; टूल वह feature हो सकता है जो आपके workflow को सबसे ज्यादा बदलेगा।&lt;/p&gt;
&lt;p&gt;आइए देखें यहाँ वास्तव में क्या है।&lt;/p&gt;
&lt;h2 id="आपक-repo-म-custom-copilot-agents"&gt;आपके repo में Custom Copilot agents&lt;/h2&gt;
&lt;p&gt;चाहते हैं कि Copilot आपकी टीम के coding standards का पालन करे, आपका build pipeline चलाए, या आपके internal docs query करे? अब आप ठीक वैसा ही बना सकते हैं।&lt;/p&gt;
&lt;p&gt;Custom agents को &lt;code&gt;.agent.md&lt;/code&gt; files के रूप में परिभाषित किया जाता है जिन्हें आप अपने repository में &lt;code&gt;.github/agents/&lt;/code&gt; में रखते हैं। प्रत्येक agent को workspace awareness, code understanding, tools, आपका preferred model, और external services से MCP connections तक पूरी access मिलती है। वे built-in agents के साथ agent picker में दिखते हैं।&lt;/p&gt;
&lt;p&gt;यह वही pattern है जो VS Code support करता रहा है — और यह देखकर अच्छा लगता है कि Visual Studio भी catch up कर रहा है। जिन टीमों ने VS Code के लिए agents बनाए हैं, उनकी &lt;code&gt;.agent.md&lt;/code&gt; files दोनों IDEs में काम करनी चाहिए (हालाँकि tool names भिन्न हो सकते हैं, इसलिए test करें)।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/github/awesome-copilot"&gt;awesome-copilot&lt;/a&gt; repo में community-contributed agent configurations हैं जिन्हें आप starting points के रूप में use कर सकते हैं।&lt;/p&gt;
&lt;h2 id="agent-skills-reusable-instruction-packs"&gt;Agent skills: reusable instruction packs&lt;/h2&gt;
&lt;p&gt;Skills आपके repo में &lt;code&gt;.github/skills/&lt;/code&gt; या आपके profile में &lt;code&gt;~/.copilot/skills/&lt;/code&gt; से automatically pick up होती हैं। प्रत्येक skill एक &lt;code&gt;SKILL.md&lt;/code&gt; file है जो &lt;a href="https://agentskills.io/specification"&gt;Agent Skills specification&lt;/a&gt; का पालन करती है।&lt;/p&gt;
&lt;p&gt;Skills को modular expertise के रूप में सोचें जिन्हें आप mix और match कर सकते हैं। आपके पास आपके API conventions के लिए एक skill हो सकती है, testing patterns के लिए एक और, और deployment workflow के लिए एक अलग। जब कोई skill activate होती है, तो वह chat में दिखती है ताकि आप जान सकें कि वह apply हो रही है।&lt;/p&gt;
&lt;p&gt;अगर आप VS Code में skills use कर रहे थे, तो अब वे Visual Studio में भी उसी तरह काम करती हैं।&lt;/p&gt;
&lt;h2 id="find_symbol-agents-क-लए-language-aware-navigation"&gt;find_symbol: agents के लिए language-aware navigation&lt;/h2&gt;
&lt;p&gt;यहाँ चीजें वाकई दिलचस्प हो जाती हैं। नया &lt;code&gt;find_symbol&lt;/code&gt; टूल Copilot के agent mode को actual language-service-powered symbol navigation देता है। आपके code को text के रूप में search करने की बजाय, एजेंट अब कर सकता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;पूरे project में किसी symbol के सभी references खोजना&lt;/li&gt;
&lt;li&gt;type information, declarations, और scope metadata access करना&lt;/li&gt;
&lt;li&gt;पूरी language awareness के साथ call sites पर navigate करना&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;व्यावहारिक रूप से इसका मतलब है: जब आप Copilot से कोई method refactor करने या call sites में parameter signature update करने को कहते हैं, तो वह वास्तव में आपके code की structure देख सकता है। अब &amp;ldquo;एजेंट ने method बदल दिया लेकिन तीन call sites miss कर दिए&amp;rdquo; जैसी स्थितियाँ नहीं होंगी।&lt;/p&gt;
&lt;p&gt;Supported languages में C#, C++, Razor, TypeScript, और supported LSP extension वाली कोई भी language शामिल है। .NET डेवलपर्स के लिए यह एक बड़ा सुधार है — deep type hierarchies और interfaces वाले C# codebases symbol-aware navigation से बहुत फायदा उठाते हैं।&lt;/p&gt;
&lt;h2 id="copilot-स-tests-profile-कर"&gt;Copilot से tests profile करें&lt;/h2&gt;
&lt;p&gt;Test Explorer context menu में अब &lt;strong&gt;Profile with Copilot&lt;/strong&gt; command है। कोई test select करें, profile पर click करें, और Profiling Agent automatically उसे run करके performance analyze करता है — actionable insights देने के लिए CPU usage और instrumentation data को मिलाकर।&lt;/p&gt;
&lt;p&gt;अब manually profiler sessions configure नहीं करने, test run नहीं करने, results export नहीं करने, और flame graph पढ़ने की कोशिश नहीं करनी होगी। एजेंट analysis करता है और बताता है क्या slow है और क्यों। अभी केवल .NET के लिए, जो Visual Studio के deep .NET diagnostics integration को देखते हुए समझ में आता है।&lt;/p&gt;
&lt;h2 id="live-debugging-क-दरन-performance-tips"&gt;Live debugging के दौरान performance tips&lt;/h2&gt;
&lt;p&gt;Performance optimization अब debug करने के बाद नहीं, debug करते समय होती है। जब आप code में step through करते हैं, Visual Studio execution time और performance signals inline दिखाता है। कोई slow line दिखे? Perf Tip पर click करें और Copilot से वहीं optimization suggestions माँगें।&lt;/p&gt;
&lt;p&gt;Profiling Agent automatically runtime data capture करता है — elapsed time, CPU usage, memory behavior — और Copilot उसका उपयोग hot spots पहचानने के लिए करता है। यह performance work को आपके debugging flow का हिस्सा बनाए रखता है, न कि एक अलग काम जिसे आप टालते रहते हैं।&lt;/p&gt;
&lt;h2 id="solution-explorer-स-nuget-vulnerabilities-fix-कर"&gt;Solution Explorer से NuGet vulnerabilities fix करें&lt;/h2&gt;
&lt;p&gt;जब किसी NuGet package में vulnerability detect होती है, तो अब Solution Explorer में सीधे &lt;strong&gt;Fix with GitHub Copilot&lt;/strong&gt; link के साथ notification दिखता है। Click करें और Copilot vulnerability analyze करता है, सही package updates recommend करता है, और उन्हें implement करता है।&lt;/p&gt;
&lt;p&gt;उन टीमों के लिए जो dependencies up to date रखने में संघर्ष करती हैं (यानी लगभग सभी), यह &amp;ldquo;मुझे पता है vulnerability है लेकिन सही update path निकालना अपने आप में एक project है&amp;rdquo; वाली परेशानी दूर करता है।&lt;/p&gt;
&lt;h2 id="अतम-बत"&gt;अंतिम बात&lt;/h2&gt;
&lt;p&gt;Custom agents और skills headline हैं, लेकिन &lt;code&gt;find_symbol&lt;/code&gt; sleeper hit है — यह मौलिक रूप से बदलता है कि Copilot .NET code refactor करते समय कितना accurate हो सकता है। Live profiling integration और vulnerability fixes के साथ मिलकर, यह अपडेट Visual Studio के AI features को demo-ready की बजाय genuinely practical बनाता है।&lt;/p&gt;
&lt;p&gt;इसे आज़माने के लिए &lt;a href="https://visualstudio.microsoft.com/downloads/"&gt;Visual Studio 2026 Insiders&lt;/a&gt; download करें।&lt;/p&gt;</content:encoded></item><item><title>KubeCon Europe 2026: .NET Developers को वास्तव में क्या जानना चाहिए</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/</guid><description>Microsoft ने KubeCon Europe 2026 में Kubernetes announcements की बाढ़ ला दी। यहाँ filtered version है — केवल वे AKS और cloud-native updates जो मायने रखते हैं अगर आप .NET apps ship कर रहे हैं।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/kubecon-2026-aks-updates-dotnet-developers/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;आप उस feeling को जानते हैं जब एक massive announcement post आती है और आप उसे scroll करते हुए सोच रहे होते हैं &amp;ldquo;cool, लेकिन यह actually मेरे लिए क्या बदलता है&amp;rdquo;? हर KubeCon season मेरे साथ यही होता है।&lt;/p&gt;
&lt;p&gt;Microsoft ने अभी &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;अपना पूरा KubeCon Europe 2026 roundup publish किया&lt;/a&gt; — Brendan Burns द्वारा लिखा गया — और सच में? यहाँ real substance है। सिर्फ feature checkboxes नहीं, बल्कि उस तरह के operational improvements जो बदलते हैं कि आप production में चीज़ें कैसे चलाते हैं।&lt;/p&gt;
&lt;p&gt;आइए breakdown करें कि हम .NET developers के लिए क्या मायने रखता है।&lt;/p&gt;
&lt;h2 id="service-mesh-overhead-क-बन-mtls"&gt;service mesh overhead के बिना mTLS&lt;/h2&gt;
&lt;p&gt;Service meshes के बारे में बात यह है: सभी security guarantees चाहते हैं, कोई operational overhead नहीं चाहता। AKS आखिरकार उस gap को बंद कर रहा है।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/application-network"&gt;Azure Kubernetes Application Network&lt;/a&gt; आपको mutual TLS, application-aware authorization, और traffic telemetry देता है — बिना full sidecar-heavy mesh deploy किए। &lt;a href="https://aka.ms/acns/cilium-mtls"&gt;Advanced Container Networking Services में Cilium mTLS&lt;/a&gt; के साथ combined, आपको X.509 certificates और identity management के लिए SPIRE का उपयोग करके encrypted pod-to-pod communication मिलती है।&lt;/p&gt;
&lt;p&gt;व्यवहार में इसका मतलब: आपके ASP.NET Core APIs background workers से बात कर रहे हों, आपके gRPC services एक-दूसरे को call कर रहे हों — सब network level पर encrypted और identity-verified, zero application code changes के साथ। यह बहुत बड़ी बात है।&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ingress-nginx&lt;/code&gt; से migrate करने वाली teams के लिए, &lt;a href="https://aka.ms/aks/app-routing/gateway-api"&gt;Application Routing with Meshless Istio&lt;/a&gt; भी है जिसमें full Kubernetes Gateway API support है। कोई sidecars नहीं। Standards-based। और उन्होंने incremental migration के लिए &lt;code&gt;ingress2gateway&lt;/code&gt; tooling ship की।&lt;/p&gt;
&lt;h2 id="gpu-observability-ज-afterthought-नह-ह"&gt;GPU observability जो afterthought नहीं है&lt;/h2&gt;
&lt;p&gt;अगर आप अपनी .NET services के साथ AI inference चला रहे हैं (और honestly, कौन शुरू नहीं कर रहा?), तो आपने शायद GPU monitoring blind spot देखा होगा। आपको CPU/memory के लिए बेहतरीन dashboards मिलते थे और फिर&amp;hellip; manual exporter plumbing के बिना GPUs के लिए कुछ नहीं।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://aka.ms/aks/managed-gpu-metrics"&gt;AKS अब GPU metrics को natively&lt;/a&gt; managed Prometheus और Grafana में expose करता है। वही stack, वही dashboards, वही alerting pipeline। कोई custom exporters नहीं, कोई third-party agents नहीं।&lt;/p&gt;
&lt;p&gt;Network side पर, उन्होंने HTTP, gRPC, और Kafka traffic के लिए per-flow visibility &lt;a href="https://learn.microsoft.com/en-us/azure/aks/container-network-observability-logs"&gt;one-click Azure Monitor experience&lt;/a&gt; के साथ जोड़ी। IPs, ports, workloads, flow direction, policy decisions — सब built-in dashboards में।&lt;/p&gt;
&lt;p&gt;और यहाँ वह है जिसने मुझे double-take कराया: &lt;a href="https://learn.microsoft.com/en-us/azure/aks/advanced-container-networking-services-overview"&gt;agentic container networking&lt;/a&gt; एक web UI जोड़ता है जहाँ आप अपने cluster की network state के बारे में natural-language questions पूछ सकते हैं। &amp;ldquo;Pod X service Y तक क्यों नहीं पहुँच रहा?&amp;rdquo; → live telemetry से read-only diagnostics। रात 2 बजे यह genuinely useful है।&lt;/p&gt;
&lt;h2 id="cross-cluster-networking-जसक-लए-phd-नह-चहए"&gt;Cross-cluster networking जिसके लिए PhD नहीं चाहिए&lt;/h2&gt;
&lt;p&gt;Multi-cluster Kubernetes historically एक &amp;ldquo;अपना networking glue लाओ&amp;rdquo; experience रहा है। Azure Kubernetes Fleet Manager अब managed Cilium cluster mesh के ज़रिए &lt;a href="https://aka.ms/kubernetes-fleet/networking/cross-cluster"&gt;cross-cluster networking&lt;/a&gt; ship करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;AKS clusters में unified connectivity&lt;/li&gt;
&lt;li&gt;Cross-cluster discovery के लिए global service registry&lt;/li&gt;
&lt;li&gt;Configuration centrally managed, हर cluster पर repeat नहीं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;अगर आप resilience या compliance के लिए regions में .NET microservices चला रहे हैं, तो यह बहुत सारी fragile custom plumbing की जगह लेता है। West Europe में Service A, East US में Service B को mesh के ज़रिए discover और call कर सकती है, consistent routing और security policies के साथ।&lt;/p&gt;
&lt;h2 id="upgrades-जनक-लए-हममत-क-जररत-नह"&gt;Upgrades जिनके लिए हिम्मत की ज़रूरत नहीं&lt;/h2&gt;
&lt;p&gt;सच कहें — production में Kubernetes upgrades stressful होते हैं। &amp;ldquo;Upgrade और उम्मीद करो&amp;rdquo; बहुत teams के लिए de facto strategy रही है, और यही मुख्य कारण है कि clusters version पर पिछड़ जाते हैं।&lt;/p&gt;
&lt;p&gt;दो नई capabilities इसे बदलती हैं:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Blue-green agent pool upgrades&lt;/strong&gt; नए configuration के साथ एक parallel node pool बनाते हैं। Behavior validate करें, traffic gradually shift करें, और एक clean rollback path रखें। Production nodes पर in-place mutations नहीं।&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Agent pool rollback&lt;/strong&gt; आपको upgrade बिगड़ने के बाद एक node pool को उसके पिछले Kubernetes version और node image पर revert करने देता है — cluster rebuild किए बिना।&lt;/p&gt;
&lt;p&gt;साथ में, ये operators को upgrade lifecycle पर real control देते हैं। .NET teams के लिए, यह मायने रखता है क्योंकि platform velocity directly नियंत्रित करती है कि आप नए runtimes, security patches, और networking capabilities कितनी जल्दी adopt कर सकते हैं।&lt;/p&gt;
&lt;h2 id="ai-workloads-kubernetes-क-first-class-citizens-बन-रह-ह"&gt;AI workloads Kubernetes के first-class citizens बन रहे हैं&lt;/h2&gt;
&lt;p&gt;Upstream open-source work equally important है। Dynamic Resource Allocation (DRA) Kubernetes 1.36 में GA हो गया, जो GPU scheduling को एक proper first-class feature बनाता है बजाय workaround के।&lt;/p&gt;
&lt;p&gt;कुछ projects जो देखने लायक हैं:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Project&lt;/th&gt;
&lt;th&gt;क्या करता है&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/kaito-project/kubeairunway"&gt;AI Runway&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Inference के लिए common Kubernetes API — K8s जाने बिना models deploy करें, HuggingFace discovery और cost estimates के साथ&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.cncf.io/blog/2026/01/07/holmesgpt-agentic-troubleshooting-built-for-the-cloud-native-era/"&gt;HolmesGPT&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Cloud-native के लिए agentic troubleshooting — अब CNCF Sandbox project&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://github.com/project-dalec/dalec"&gt;Dalec&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;SBOM generation के साथ declarative container image builds — build stage पर कम CVEs&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;दिशा स्पष्ट है: आपकी .NET API, आपकी Semantic Kernel orchestration layer, और आपके inference workloads सभी एक consistent platform model पर चलने चाहिए। हम वहाँ पहुँच रहे हैं।&lt;/p&gt;
&lt;h2 id="इस-हफत-म-कह-स-शर-करग"&gt;इस हफ्ते मैं कहाँ से शुरू करूँगा&lt;/h2&gt;
&lt;p&gt;अगर आप अपनी team के लिए इन changes का मूल्यांकन कर रहे हैं, तो यहाँ मेरी honest priority list है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Observability पहले&lt;/strong&gt; — non-prod cluster में GPU metrics और network flow logs enable करें। देखें आप क्या miss कर रहे थे।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Blue-green upgrades आज़माएं&lt;/strong&gt; — अपने अगले production cluster upgrade से पहले rollback workflow test करें। Process में confidence बनाएं।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity-aware networking pilot करें&lt;/strong&gt; — एक internal service path चुनें और Cilium के साथ mTLS enable करें। Overhead measure करें (spoiler: यह minimal है)।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fleet Manager evaluate करें&lt;/strong&gt; — अगर आप दो से अधिक clusters चलाते हैं, तो cross-cluster networking reduced custom glue में खुद की cost justify कर देता है।&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;छोटे experiments, fast feedback। यही हमेशा सही move है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;KubeCon announcements overwhelming हो सकती हैं, लेकिन यह batch genuinely AKS पर .NET teams के लिए needle move करती है। Mesh overhead के बिना बेहतर networking security, real GPU observability, safer upgrades, और मज़बूत AI infrastructure foundations।&lt;/p&gt;
&lt;p&gt;अगर आप पहले से AKS पर हैं, तो यह आपका operational baseline tight करने का एक बढ़िया मौका है। और अगर आप .NET workloads को Kubernetes पर move करने की planning कर रहे हैं — platform अभी-अभी काफी ज़्यादा production-ready हो गया है।&lt;/p&gt;</content:encoded></item><item><title>SQL MCP Server, SSMS में Copilot, और AI Agents के साथ Database Hub: SQLCon 2026 की असली ज़रूरी बातें</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/</guid><description>Microsoft ने SQLCon 2026 में कई database announcements की। यदि आप Azure SQL पर AI-powered apps बना रहे हैं, तो यहाँ वो बातें हैं जो वास्तव में मायने रखती हैं।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/agentic-ai-microsoft-databases-what-matters/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Microsoft ने अभी &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 को FabCon के साथ Atlanta में शुरू किया&lt;/a&gt;, और इसमें काफी कुछ है जिसे समझना ज़रूरी है। मूल घोषणा में savings plans से लेकर enterprise compliance features तक सब कुछ शामिल है। मैं enterprise pricing की slides को छोड़ रहा हूँ और उन बातों पर ध्यान केंद्रित कर रहा हूँ जो एक developer के लिए Azure SQL और AI के साथ कुछ बनाते समय वास्तव में मायने रखती हैं।&lt;/p&gt;
&lt;h2 id="sql-mcp-server-public-preview-म-ह"&gt;SQL MCP Server public preview में है&lt;/h2&gt;
&lt;p&gt;यह मेरे लिए सबसे बड़ी खबर है। Azure SQL Database Hyperscale में अब &lt;strong&gt;SQL MCP Server&lt;/strong&gt; public preview में उपलब्ध है, जो आपको &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol&lt;/a&gt; का उपयोग करके अपने SQL डेटा को AI agents और Copilots से सुरक्षित रूप से जोड़ने की सुविधा देता है।&lt;/p&gt;
&lt;p&gt;अगर आप MCP की लहर को फॉलो कर रहे हैं — और सच कहूँ तो, इसे नज़रअंदाज़ करना अभी मुश्किल है — तो यह एक बड़ी बात है। अपने AI agents को database का context देने के लिए custom data pipelines बनाने की बजाय, आपको SQL डेटा को सीधे expose करने के लिए एक standardized protocol मिलता है। आपके agents live database की जानकारी को query कर सकते हैं, उस पर reasoning कर सकते हैं और action ले सकते हैं।&lt;/p&gt;
&lt;p&gt;जो लोग Semantic Kernel या Microsoft Agent Framework के साथ AI agents बना रहे हैं, उनके लिए यह एक clean integration path खोलता है। आपके agent को inventory चेक करनी है? कोई customer record देखना है? किसी order को validate करना है? MCP इसके लिए एक structured तरीका देता है, बिना हर scenario के लिए bespoke data-fetching code लिखे।&lt;/p&gt;
&lt;h2 id="ssms-22-म-github-copilot-अब-ga-ह"&gt;SSMS 22 में GitHub Copilot अब GA है&lt;/h2&gt;
&lt;p&gt;अगर आप SQL Server Management Studio में समय बिताते हैं — और सच कहूँ तो, हम में से अधिकतर अभी भी करते हैं — तो GitHub Copilot अब SSMS 22 में generally available है। वही Copilot experience जो आप VS Code और Visual Studio में पहले से उपयोग करते हैं, लेकिन T-SQL के लिए।&lt;/p&gt;
&lt;p&gt;यहाँ व्यावहारिक मूल्य सीधा है: queries लिखने, stored procedures को refactor करने, performance issues को troubleshoot करने और admin tasks संभालने के लिए chat-based assistance। अवधारणा में कुछ क्रांतिकारी नहीं है, लेकिन इसका SSMS में सीधे होना मतलब है कि database काम के लिए AI सहायता पाने के लिए आपको किसी दूसरे editor पर switch नहीं करना पड़ेगा।&lt;/p&gt;
&lt;h2 id="vector-indexes-क-गभर-upgrade-मल"&gt;Vector indexes को गंभीर upgrade मिला&lt;/h2&gt;
&lt;p&gt;Azure SQL Database में अब full insert, update, और delete support के साथ तेज़, अधिक capable vector indexes उपलब्ध हैं। इसका मतलब है कि आपका vector डेटा real time में current रहता है — batch reindexing की कोई ज़रूरत नहीं।&lt;/p&gt;
&lt;p&gt;नया क्या है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quantization&lt;/strong&gt; — accuracy बहुत कम खोए बिना छोटे index sizes के लिए&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Iterative filtering&lt;/strong&gt; — अधिक precise results के लिए&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Query optimizer के साथ गहरा integration&lt;/strong&gt; — predictable performance के लिए&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;अगर आप Azure SQL को vector store के रूप में उपयोग करके retrieval-augmented generation (RAG) कर रहे हैं, तो ये improvements सीधे काम आती हैं। आप अपने vectors को उसी database में अपने relational data के साथ रख सकते हैं, जो एक अलग vector database चलाने की तुलना में आपकी architecture को काफी सरल बनाता है।&lt;/p&gt;
&lt;p&gt;यही vector enhancements Fabric में SQL database में भी उपलब्ध हैं, क्योंकि दोनों के नीचे एक ही SQL engine चलता है।&lt;/p&gt;
&lt;h2 id="fabric-म-database-hub-agentic-management"&gt;Fabric में Database Hub: agentic management&lt;/h2&gt;
&lt;p&gt;यह थोड़ा भविष्योन्मुखी है, लेकिन दिलचस्प है। Microsoft ने &lt;strong&gt;Database Hub in Microsoft Fabric&lt;/strong&gt; (early access) की घोषणा की, जो Azure SQL, Cosmos DB, PostgreSQL, MySQL और Arc के ज़रिए SQL Server पर एक single pane of glass देता है।&lt;/p&gt;
&lt;p&gt;दिलचस्प पहलू सिर्फ unified view नहीं है — यह management का agentic approach है। AI agents लगातार आपके database estate को monitor करते हैं, बताते हैं क्या बदला, समझाते हैं क्यों यह मायने रखता है, और सुझाव देते हैं कि आगे क्या करना है। यह एक human-in-the-loop model है जहाँ agent सारी मेहनत करता है और आप निर्णय लेते हैं।&lt;/p&gt;
&lt;p&gt;कई databases manage करने वाली teams के लिए, यह operational noise को वास्तव में कम कर सकता है। Portals के बीच jump करने और manually metrics चेक करने की बजाय, agent signal को आपके पास लाता है।&lt;/p&gt;
&lt;h2 id="net-developers-क-लए-इसक-कय-मतलब-ह"&gt;.NET developers के लिए इसका क्या मतलब है&lt;/h2&gt;
&lt;p&gt;इन सभी घोषणाओं को जोड़ने वाला धागा स्पष्ट है: Microsoft database stack की हर layer में AI agents को embed कर रहा है। एक gimmick के रूप में नहीं, बल्कि एक practical tooling layer के रूप में।&lt;/p&gt;
&lt;p&gt;अगर आप Azure SQL से backed .NET apps बना रहे हैं, तो मैं वास्तव में यही करूँगा:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;SQL MCP Server आज़माएं&lt;/strong&gt; अगर आप AI agents बना रहे हैं। यह आपके agents को database access देने का सबसे clean तरीका है बिना custom plumbing के।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SSMS में Copilot enable करें&lt;/strong&gt; अगर आपने अभी तक नहीं किया — daily SQL काम के लिए free productivity win।&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Vector indexes में देखें&lt;/strong&gt; अगर आप RAG कर रहे हैं और वर्तमान में एक अलग vector store चला रहे हैं। Azure SQL पर consolidate करने का मतलब है एक कम service manage करना।&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="अत-म"&gt;अंत में&lt;/h2&gt;
&lt;p&gt;पूरी announcement में और भी है — savings plans, migration assistants, compliance features — लेकिन developer की कहानी MCP Server, vector improvements और agentic management layer में है। ये वो pieces हैं जो आपके बनाने के तरीके को बदलते हैं, न कि सिर्फ आपके budget को।&lt;/p&gt;
&lt;p&gt;पूरी तस्वीर के लिए &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;Shireesh Thota की पूरी announcement&lt;/a&gt; देखें, और नया management experience आज़माने के लिए &lt;a href="https://aka.ms/database-hub"&gt;Database Hub early access के लिए sign up करें&lt;/a&gt;।&lt;/p&gt;</content:encoded></item><item><title>Azure DevOps MCP Server Microsoft Foundry में आया: आपके AI Agents के लिए इसका क्या मतलब है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/</guid><description>Azure DevOps MCP Server अब Microsoft Foundry में उपलब्ध है। अपने AI agents को कुछ ही क्लिक में DevOps workflows — work items, repos, pipelines — से सीधे जोड़ें।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/azure-devops-mcp-server-microsoft-foundry/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;MCP (Model Context Protocol) इन दिनों बहुत चर्चा में है। अगर आप AI agent ecosystem को follow कर रहे हैं, तो आपने शायद देखा होगा कि MCP servers हर जगह दिखने लगे हैं — agents को एक मानकीकृत protocol के ज़रिए बाहरी tools और services के साथ interact करने की क्षमता देते हैं।&lt;/p&gt;
&lt;p&gt;अब &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;Azure DevOps MCP Server Microsoft Foundry में उपलब्ध है&lt;/a&gt;, और यह उन integrations में से एक है जो आपको व्यावहारिक संभावनाओं के बारे में सोचने पर मजबूर करती है।&lt;/p&gt;
&lt;h2 id="यह-वसतव-म-कय-ह-रह-ह"&gt;यहाँ वास्तव में क्या हो रहा है&lt;/h2&gt;
&lt;p&gt;Microsoft ने Azure DevOps MCP Server को &lt;a href="https://devblogs.microsoft.com/devops/azure-devops-remote-mcp-server-public-preview"&gt;public preview&lt;/a&gt; के रूप में पहले ही release किया था — वह MCP server ही है। नया यह है कि Foundry integration आई है। अब आप अपने Foundry agents में tool catalog से सीधे Azure DevOps MCP Server जोड़ सकते हैं।&lt;/p&gt;
&lt;p&gt;जो Foundry से परिचित नहीं हैं उनके लिए: यह Microsoft का unified platform है जो बड़े पैमाने पर AI-powered applications और agents बनाने और manage करने के लिए है। Model access, orchestration, evaluation, deployment — सब एक ही जगह।&lt;/p&gt;
&lt;h2 id="इस-setup-करन"&gt;इसे Setup करना&lt;/h2&gt;
&lt;p&gt;Setup करना आश्चर्यजनक रूप से सीधा है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;अपने Foundry agent में जाएं &lt;strong&gt;Add Tools&lt;/strong&gt; &amp;gt; &lt;strong&gt;Catalog&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&amp;ldquo;Azure DevOps&amp;rdquo; खोजें&lt;/li&gt;
&lt;li&gt;Azure DevOps MCP Server (preview) चुनें और &lt;strong&gt;Create&lt;/strong&gt; पर क्लिक करें&lt;/li&gt;
&lt;li&gt;अपना organization नाम डालें और connect करें&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;बस इतना। आपके agent को अब Azure DevOps tools तक access मिल गई।&lt;/p&gt;
&lt;h2 id="आप-अपन-agent-क-access-क-control-कर-सकत-ह"&gt;आप अपने agent की access को control कर सकते हैं&lt;/h2&gt;
&lt;p&gt;यहाँ वो हिस्सा है जो मुझे पसंद आया: आप all-or-nothing approach तक सीमित नहीं हैं। आप specify कर सकते हैं कि आपके agent के लिए कौन से tools उपलब्ध हों। तो अगर आप चाहते हैं कि वो केवल work items पढ़े लेकिन pipelines को न छुए, तो आप उसे configure कर सकते हैं। Principle of least privilege, अपने AI agents पर लागू।&lt;/p&gt;
&lt;p&gt;यह enterprise scenarios के लिए मायने रखता है जहाँ आप नहीं चाहते कि एक agent गलती से deployment pipeline trigger कर दे क्योंकि किसी ने उससे &amp;ldquo;release में मदद करो&amp;rdquo; कहा।&lt;/p&gt;
&lt;h2 id="net-teams-क-लए-यह-कय-दलचसप-ह"&gt;.NET teams के लिए यह क्यों दिलचस्प है&lt;/h2&gt;
&lt;p&gt;सोचिए यह व्यवहार में क्या enable करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sprint planning assistants&lt;/strong&gt; — agents जो work items pull कर सकते हैं, velocity data analyze कर सकते हैं, और sprint capacity suggest कर सकते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Code review bots&lt;/strong&gt; — agents जो आपके PR context को समझते हैं क्योंकि वे वास्तव में आपके repos और linked work items पढ़ सकते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Incident response&lt;/strong&gt; — agents जो work items create कर सकते हैं, recent deployments query कर सकते हैं, और bugs को recent changes से correlate कर सकते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Developer onboarding&lt;/strong&gt; — &amp;ldquo;मुझे किस पर काम करना चाहिए?&amp;rdquo; का जवाब actual project data पर आधारित होगा&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;जो .NET teams पहले से CI/CD pipelines और project management के लिए Azure DevOps use कर रही हैं, उनके लिए एक AI agent का सीधे उन systems के साथ interact करना useful automation की दिशा में एक महत्वपूर्ण कदम है।&lt;/p&gt;
&lt;h2 id="बड-mcp-तसवर"&gt;बड़ी MCP तस्वीर&lt;/h2&gt;
&lt;p&gt;यह एक बड़े trend का हिस्सा है: MCP servers AI agents के बाहरी दुनिया से interact करने का मानक तरीका बनते जा रहे हैं। हम GitHub, Azure DevOps, databases, SaaS APIs — सब के लिए MCP servers देख रहे हैं — और Foundry वह hub बनता जा रहा है जहाँ ये सभी connections एक साथ आते हैं।&lt;/p&gt;
&lt;p&gt;अगर आप .NET ecosystem में agents बना रहे हैं, तो MCP पर ध्यान देना ज़रूरी है। Protocol मानकीकृत है, tooling mature हो रहा है, और Foundry integration इसे manually server connections wire किए बिना accessible बनाती है।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Foundry में Azure DevOps MCP Server preview में है, इसलिए यह evolve होता रहेगा। लेकिन core workflow solid है: connect करें, tool access configure करें, और अपने agents को आपके DevOps data के साथ काम करने दें। अगर आप पहले से Foundry ecosystem में हैं, तो यह कुछ clicks की दूरी पर है। इसे try करें और देखें कि आप कौन से workflows बना सकते हैं।&lt;/p&gt;
&lt;p&gt;पूरी setup और अधिक जानकारी के लिए &lt;a href="https://devblogs.microsoft.com/devops/remote-mcp-server-preview-in-microsoft-foundry/"&gt;official announcement&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Foundry Agent Service GA हो गया: .NET Agent Builders के लिए वास्तव में क्या मायने रखता है</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/</guid><description>Microsoft का Foundry Agent Service GA हो गया है — private networking, Voice Live, production evaluations, और एक open multi-model runtime के साथ। यहाँ जानिए क्या जानना ज़रूरी है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/foundry-agent-service-ga-what-matters/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;सच कहें तो — एक AI agent का prototype बनाना सबसे आसान हिस्सा है। मुश्किल हिस्सा है उसके बाद का सब कुछ: इसे production में ले जाना उचित network isolation के साथ, ऐसे evaluations चलाना जिनका वास्तव में कुछ मतलब हो, compliance की आवश्यकताओं को संभालना, और रात 2 बजे चीज़ें तोड़ने से बचना।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;Foundry Agent Service अभी GA हो गया है&lt;/a&gt;, और यह release उस &amp;ldquo;सब कुछ बाद में&amp;rdquo; की खाई को पाटने पर केंद्रित है।&lt;/p&gt;
&lt;h2 id="responses-api-पर-नरमत"&gt;Responses API पर निर्मित&lt;/h2&gt;
&lt;p&gt;मुख्य बात यह है: next-gen Foundry Agent Service OpenAI Responses API पर बनाया गया है। अगर आप पहले से उस wire protocol के साथ build कर रहे हैं, तो Foundry पर migrate करने के लिए न्यूनतम code बदलाव की ज़रूरत है। आपको मिलेगा: enterprise security, private networking, Entra RBAC, full tracing, और evaluation — आपके existing agent logic के ऊपर।&lt;/p&gt;
&lt;p&gt;Architecture जानबूझकर open है। आप किसी एक model provider या एक orchestration framework से locked नहीं हैं। Planning के लिए DeepSeek, generation के लिए OpenAI, orchestration के लिए LangGraph इस्तेमाल करें — runtime consistency layer को संभालता है।&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;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;from&lt;/span&gt; &lt;span class="nn"&gt;azure.ai.projects.models&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;PromptAgentDefinition&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;with&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;DefaultAzureCredential&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;credential&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;AIProjectClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&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;AZURE_AI_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;credential&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;project_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;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_openai_client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;openai_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="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;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;project_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create_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;agent_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my-enterprise-agent&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;definition&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;PromptAgentDefinition&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;model&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;AZURE_AI_MODEL_DEPLOYMENT_NAME&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="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;conversation&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;conversations&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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;conversation&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;conversation&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;id&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="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;What are best practices for building AI agents?&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;extra_body&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="s2"&gt;&amp;#34;agent_reference&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;name&amp;#34;&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;name&lt;/span&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;agent_reference&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;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_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;blockquote&gt;
&lt;p&gt;अगर आप &lt;code&gt;azure-ai-agents&lt;/code&gt; package से आ रहे हैं, तो अब agents &lt;code&gt;azure-ai-projects&lt;/code&gt; में &lt;code&gt;AIProjectClient&lt;/code&gt; पर first-class operations हैं। standalone pin हटाएं और responses चलाने के लिए &lt;code&gt;get_openai_client()&lt;/code&gt; इस्तेमाल करें।&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="private-networking-enterprise-क-बध-दर-हई"&gt;Private networking: enterprise की बाधा दूर हुई&lt;/h2&gt;
&lt;p&gt;यह वह feature है जो enterprise adoption को unblock करता है। Foundry अब BYO VNet के साथ पूर्ण end-to-end private networking सपोर्ट करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;कोई public egress नहीं&lt;/strong&gt; — agent traffic कभी public internet से नहीं गुज़रता&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Container/subnet injection&lt;/strong&gt; आपके network में local communication के लिए&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tool connectivity शामिल&lt;/strong&gt; — MCP servers, Azure AI Search, Fabric data agents सभी private paths पर काम करते हैं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;आखिरी बात critical है। सिर्फ inference calls ही private नहीं रहती — हर tool invocation और retrieval call भी आपकी network boundary के अंदर रहती है। उन teams के लिए जो data classification policies के तहत काम करती हैं जो external routing को prohibit करती हैं, यही वह था जो missing था।&lt;/p&gt;
&lt;h2 id="mcp-authentication-सह-तरक-स"&gt;MCP authentication सही तरीके से&lt;/h2&gt;
&lt;p&gt;MCP server connections अब auth patterns का पूरा spectrum सपोर्ट करते हैं:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Auth method&lt;/th&gt;
&lt;th&gt;कब उपयोग करें&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Key-based&lt;/td&gt;
&lt;td&gt;org-wide internal tools के लिए simple shared access&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Agent Identity&lt;/td&gt;
&lt;td&gt;Service-to-service; agent खुद को authenticate करता है&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Entra Managed Identity&lt;/td&gt;
&lt;td&gt;Per-project isolation; कोई credential management नहीं&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OAuth Identity Passthrough&lt;/td&gt;
&lt;td&gt;User-delegated access; agent users की तरफ से काम करता है&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;OAuth Identity Passthrough दिलचस्प है। जब users को किसी agent को अपने personal data तक access देने की ज़रूरत होती है — उनका OneDrive, उनका Salesforce org, एक user-scoped SaaS API — agent उनकी तरफ से standard OAuth flows के साथ काम करता है। कोई shared system identity नहीं जो सबका रूप धारण करे।&lt;/p&gt;
&lt;h2 id="voice-live-बन-plumbing-क-speech-to-speech"&gt;Voice Live: बिना plumbing के speech-to-speech&lt;/h2&gt;
&lt;p&gt;पहले किसी agent में voice जोड़ने का मतलब था STT, LLM, और TTS को आपस में जोड़ना — तीन services, तीन latency hops, तीन billing surfaces, सब हाथ से synchronize किए जाते। &lt;strong&gt;Voice Live&lt;/strong&gt; इसे एक single managed API में समेट देता है जिसमें:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Semantic voice activity और end-of-turn detection (सिर्फ silence नहीं, meaning समझता है)&lt;/li&gt;
&lt;li&gt;Server-side noise suppression और echo cancellation&lt;/li&gt;
&lt;li&gt;Barge-in support (users mid-response interrupt कर सकते हैं)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Voice interactions उसी agent runtime से गुज़रती हैं जो text के लिए है। वही evaluators, वही traces, वही cost visibility। Customer support, field service, या accessibility scenarios के लिए, यह उस custom audio pipeline की जगह लेता है जिसकी पहले ज़रूरत थी।&lt;/p&gt;
&lt;h2 id="evaluations-checkbox-स-continuous-monitoring-तक"&gt;Evaluations: checkbox से continuous monitoring तक&lt;/h2&gt;
&lt;p&gt;यहाँ Foundry production quality के बारे में गंभीर हो जाता है। Evaluation system में अब तीन layers हैं:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Out-of-the-box evaluators&lt;/strong&gt; — coherence, relevance, groundedness, retrieval quality, safety। किसी dataset या live traffic से connect करें और scores वापस पाएं।&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Custom evaluators&lt;/strong&gt; — अपनी business logic, tone standards, और domain-specific compliance rules encode करें।&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Continuous evaluation&lt;/strong&gt; — Foundry live production traffic sample करता है, आपका evaluator suite चलाता है, और dashboards के ज़रिए results सामने लाता है। Azure Monitor alerts सेट करें जब groundedness गिरे या safety thresholds breach हों।&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;सब कुछ Azure Monitor Application Insights में publish होता है। Agent quality, infrastructure health, cost, और app telemetry — सब एक ही जगह।&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;eval_object&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;openai_client&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;evals&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;create&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;Agent Quality Evaluation&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;data_source_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;DataSourceConfigCustom&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="nb"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;custom&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;item_schema&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="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;object&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="s2"&gt;&amp;#34;properties&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;query&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;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;string&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="s2"&gt;&amp;#34;required&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;query&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="n"&gt;include_sample_schema&lt;/span&gt;&lt;span class="o"&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;testing_criteria&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&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&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_evaluator&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="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fluency&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="s2"&gt;&amp;#34;evaluator_name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;builtin.fluency&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="s2"&gt;&amp;#34;initialization_parameters&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="s2"&gt;&amp;#34;deployment_name&amp;#34;&lt;/span&gt;&lt;span class="p"&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;AZURE_AI_MODEL_DEPLOYMENT_NAME&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="s2"&gt;&amp;#34;data_mapping&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="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{item.query}}&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="s2"&gt;&amp;#34;response&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;{{sample.output_text}}&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;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="hosted-agents-क-लए-छह-नए-regions"&gt;Hosted agents के लिए छह नए regions&lt;/h2&gt;
&lt;p&gt;Hosted agents अब East US, North Central US, Sweden Central, Southeast Asia, Japan East, और अन्य में उपलब्ध हैं। यह data residency requirements के लिए और latency कम करने के लिए मायने रखता है जब आपका agent अपने data sources के करीब चलता है।&lt;/p&gt;
&lt;h2 id="net-developers-क-लए-यह-कय-मयन-रखत-ह"&gt;.NET developers के लिए यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;भले ही GA announcement के code samples Python-first हों, underlying infrastructure language-agnostic है — और &lt;code&gt;azure-ai-projects&lt;/code&gt; का .NET SDK वही patterns follow करता है। Responses API, evaluation framework, private networking, MCP auth — यह सब .NET से उपलब्ध है।&lt;/p&gt;
&lt;p&gt;अगर आप AI agents के &amp;ldquo;cool demo&amp;rdquo; से &amp;ldquo;मैं इसे actually काम पर ship कर सकता हूँ&amp;rdquo; बनने का इंतज़ार कर रहे थे, तो यह GA release वह signal है। Private networking, proper auth, continuous evaluation, और production monitoring वे टुकड़े थे जो missing थे।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Foundry Agent Service अभी उपलब्ध है। SDK install करें, &lt;a href="https://ai.azure.com"&gt;portal&lt;/a&gt; खोलें, और build करना शुरू करें। &lt;a href="https://learn.microsoft.com/azure/foundry/quickstarts/get-started-code"&gt;Quickstart guide&lt;/a&gt; आपको zero से एक running agent तक minutes में ले जाती है।&lt;/p&gt;
&lt;p&gt;सभी code samples के साथ पूरे technical deep-dive के लिए, &lt;a href="https://devblogs.microsoft.com/foundry/foundry-agent-service-ga/"&gt;GA announcement&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Laptop से Production तक: दो Commands में Microsoft Foundry पर AI Agents Deploy करना</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/</guid><description>Azure Developer CLI में अब 'azd ai agent' commands हैं जो आपके AI agent को minutes में local dev से live Foundry endpoint तक ले जाती हैं। यहाँ है पूरा workflow।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/deploy-ai-agents-foundry-azd-two-commands/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;आप उस gap को जानते हैं जो &amp;ldquo;मेरी machine पर काम करता है&amp;rdquo; और &amp;ldquo;यह deploy हो गया है और traffic serve कर रहा है&amp;rdquo; के बीच है? AI agents के लिए, वह gap दर्दनाक रूप से चौड़ी रही है। आपको resources provision करने हैं, models deploy करने हैं, identity wire up करनी है, monitoring set up करनी है — और यह सब किसी के भी आपके agent को call करने से पहले।&lt;/p&gt;
&lt;p&gt;Azure Developer CLI ने इसे &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;दो-command affair&lt;/a&gt; बना दिया है।&lt;/p&gt;
&lt;h2 id="नय-azd-ai-agent-workflow"&gt;नया &lt;code&gt;azd ai agent&lt;/code&gt; Workflow&lt;/h2&gt;
&lt;p&gt;आइए मैं बताता हूँ यह वास्तव में कैसा दिखता है। आपके पास एक AI agent project है — मान लीजिए एक hotel concierge agent। यह locally काम करता है। आप इसे Microsoft Foundry पर चलाना चाहते हैं।&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 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;बस। दो commands। &lt;code&gt;azd ai agent init&lt;/code&gt; आपके repo में infrastructure-as-code scaffold करता है, और &lt;code&gt;azd up&lt;/code&gt; Azure पर सब कुछ provision करता है और आपका agent publish करता है। आपको Foundry portal में अपने agent का direct link मिलता है।&lt;/p&gt;
&lt;h2 id="under-the-hood-कय-हत-ह"&gt;Under the Hood क्या होता है&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;init&lt;/code&gt; command आपके repo में real, inspectable Bicep templates generate करता है:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;एक &lt;strong&gt;Foundry Resource&lt;/strong&gt; (top-level container)&lt;/li&gt;
&lt;li&gt;एक &lt;strong&gt;Foundry Project&lt;/strong&gt; (जहाँ आपका agent रहता है)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Model deployment&lt;/strong&gt; configuration (GPT-4o, आदि)&lt;/li&gt;
&lt;li&gt;उचित RBAC role assignments के साथ &lt;strong&gt;Managed identity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Service map के लिए &lt;code&gt;azure.yaml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Agent metadata और environment variables के साथ &lt;code&gt;agent.yaml&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;यहाँ key part है: यह सब आपके पास है। यह आपके repo में versioned Bicep है। आप इसे inspect कर सकते हैं, customize कर सकते हैं, और अपने agent code के साथ commit कर सकते हैं। कोई magic black boxes नहीं।&lt;/p&gt;
&lt;h2 id="dev-inner-loop"&gt;Dev Inner Loop&lt;/h2&gt;
&lt;p&gt;मुझे जो वास्तव में पसंद है वह local development story है। जब आप agent logic पर iterate कर रहे हों, तो आप हर बार prompt बदलने पर redeploy नहीं करना चाहते:&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 ai agent run
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;यह आपके agent को locally start करता है। इसे &lt;code&gt;azd ai agent invoke&lt;/code&gt; के साथ pair करें test prompts भेजने के लिए, और आपके पास एक tight feedback loop है। Code edit करें, restart करें, invoke करें, दोहराएँ।&lt;/p&gt;
&lt;p&gt;&lt;code&gt;invoke&lt;/code&gt; command routing के बारे में भी smart है — जब एक local agent चल रहा होता है, तो यह automatically उसे target करता है। जब नहीं, तो यह remote endpoint को hit करता है।&lt;/p&gt;
&lt;h2 id="real-time-monitoring"&gt;Real-Time Monitoring&lt;/h2&gt;
&lt;p&gt;यही वह feature है जिसने मुझे convince किया। एक बार आपका agent 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;azd ai agent monitor --follow
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;आपके agent से गुज़रने वाला हर request और response real time में आपके terminal में stream होता है। Production issues debug करने के लिए, यह अमूल्य है। Log analytics खंगालने की ज़रूरत नहीं, metrics aggregate होने का इंतज़ार नहीं — आप देखते हैं कि अभी क्या हो रहा है।&lt;/p&gt;
&lt;h2 id="पर-command-set"&gt;पूरा Command Set&lt;/h2&gt;
&lt;p&gt;यहाँ quick reference है:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Command&lt;/th&gt;
&lt;th&gt;क्या करता है&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;IaC के साथ एक Foundry agent project scaffold करें&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;Azure resources provision करें और agent deploy करें&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;Remote या local agent को prompts भेजें&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;Development के लिए agent को locally चलाएँ&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;Published agent से real-time logs stream करें&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;azd ai agent show&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Agent health और status check करें&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;सभी Azure resources cleanup करें&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="net-developers-क-लए-यह-कय-मयन-रखत-ह"&gt;.NET Developers के लिए यह क्यों मायने रखता है&lt;/h2&gt;
&lt;p&gt;भले ही announcement का sample Python-based है, infrastructure story language-agnostic है। आपके .NET agent को वही Bicep scaffolding, वही managed identity setup, वही monitoring pipeline मिलती है। और अगर आप पहले से अपने .NET Aspire apps या Azure deployments के लिए &lt;code&gt;azd&lt;/code&gt; उपयोग कर रहे हैं, तो यह आपके मौजूदा workflow में बिल्कुल fit होता है।&lt;/p&gt;
&lt;p&gt;AI agents के लिए deployment gap ecosystem में सबसे बड़े friction points में से एक रही है। एक working prototype से proper identity, networking, और monitoring वाले production endpoint तक पहुँचने में DevOps का एक हफ्ता नहीं लगना चाहिए। अब इसमें दो commands और कुछ minutes लगते हैं।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;azd ai agent&lt;/code&gt; अभी available है। अगर आप अपने AI agents deploy करना टाल रहे थे क्योंकि infrastructure setup बहुत मुश्किल लग रहा था, तो इसे एक chance दें। Frontend chat app integration सहित पूरे step-by-step के लिए &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-ai-agent-end-to-end/"&gt;पूरा walkthrough&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>Microsoft Agent Framework में Background Responses: Timeout की चिंता अब खत्म</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/</guid><description>Microsoft Agent Framework अब आपको continuation tokens के साथ long-running AI tasks को offload करने देता है। यहाँ जानिए background responses कैसे काम करते हैं और आपके .NET agents के लिए ये क्यों महत्वपूर्ण हैं।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/background-responses-agent-framework-long-running-tasks/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;अगर आपने o3 या GPT-5.2 जैसे reasoning models के साथ कुछ बनाया है, तो आप वो दर्द जानते हैं। आपका agent एक complex task पर सोचना शुरू करता है, client वहाँ इंतज़ार करता है, और &amp;ldquo;यह ठीक है&amp;rdquo; से &amp;ldquo;क्या यह crash हो गया?&amp;rdquo; के बीच कहीं आपका connection timeout हो जाता है। वो सारा काम? बेकार।&lt;/p&gt;
&lt;p&gt;Microsoft Agent Framework ने &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;background responses&lt;/a&gt; ship किए हैं — और सच में, यह उन features में से एक है जो पहले दिन से ही होना चाहिए था।&lt;/p&gt;
&lt;h2 id="blocking-calls-क-समसय"&gt;Blocking calls की समस्या&lt;/h2&gt;
&lt;p&gt;एक पारंपरिक request-response pattern में, आपका client तब तक block रहता है जब तक agent finish नहीं हो जाता। यह quick tasks के लिए ठीक काम करता है। लेकिन जब आप एक reasoning model से deep research, multi-step analysis, या 20-page report generate करने को कहते हैं? आप wall-clock time में मिनटों की बात कर रहे हैं। उस window के दौरान:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTTP connections timeout हो सकते हैं&lt;/li&gt;
&lt;li&gt;Network blips पूरे operation को बर्बाद कर देते हैं&lt;/li&gt;
&lt;li&gt;आपका user spinner देखता है और सोचता है कि कुछ हो भी रहा है या नहीं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Background responses इसे उलट देते हैं।&lt;/p&gt;
&lt;h2 id="continuation-tokens-कस-कम-करत-ह"&gt;Continuation tokens कैसे काम करते हैं&lt;/h2&gt;
&lt;p&gt;Block होने की बजाय, आप agent task kick off करते हैं और एक &lt;strong&gt;continuation token&lt;/strong&gt; वापस पाते हैं। इसे एक repair shop के claim ticket की तरह समझें — आप counter पर खड़े नहीं रहते, आप तब वापस आते हैं जब वो तैयार हो जाए।&lt;/p&gt;
&lt;p&gt;Flow सीधा है:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;अपना request &lt;code&gt;AllowBackgroundResponses = true&lt;/code&gt; के साथ भेजें&lt;/li&gt;
&lt;li&gt;अगर agent background processing support करता है, तो आपको एक continuation token मिलता है&lt;/li&gt;
&lt;li&gt;अपने schedule पर poll करें जब तक token &lt;code&gt;null&lt;/code&gt; न आ जाए — इसका मतलब है result तैयार है&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;यहाँ .NET version है:&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="k"&gt;new&lt;/span&gt; &lt;span class="n"&gt;AzureOpenAIClient&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;new&lt;/span&gt; &lt;span class="n"&gt;Uri&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;https://&amp;lt;myresource&amp;gt;.openai.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="k"&gt;new&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 class="n"&gt;GetResponsesClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;&amp;lt;deployment-name&amp;gt;&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&gt;&lt;/span&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&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="c1"&gt;// Poll until complete&lt;/span&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;p&gt;अगर agent तुरंत complete हो जाता है (simple tasks, वे models जिन्हें background processing की ज़रूरत नहीं), तो कोई continuation token return नहीं होता। आपका code बस काम करता है — कोई special handling ज़रूरी नहीं।&lt;/p&gt;
&lt;h2 id="resume-क-सथ-streaming-असल-जद"&gt;Resume के साथ Streaming: असली जादू&lt;/h2&gt;
&lt;p&gt;Fire-and-forget scenarios के लिए polling ठीक है, लेकिन जब आप real-time progress चाहते हों? Background responses built-in resumption के साथ streaming भी support करते हैं।&lt;/p&gt;
&lt;p&gt;हर streamed update अपना खुद का continuation token carry करता है। अगर mid-stream आपका connection drop हो जाए, तो आप ठीक वहीं से pick up करते हैं जहाँ छोड़ा था:&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;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;AgentResponseUpdate&lt;/span&gt;&lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&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&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="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&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;RunStreamingAsync&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 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;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&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;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;latestUpdate&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="n"&gt;update&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;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Simulate a network interruption&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="c1"&gt;// Resume from exactly where we left off&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;latestUpdate&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="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;foreach&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt"&gt;var&lt;/span&gt; &lt;span class="n"&gt;update&lt;/span&gt; &lt;span class="k"&gt;in&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;RunStreamingAsync&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 class="n"&gt;Console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;update&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;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;Agent server-side processing जारी रखता है चाहे आपके client के साथ कुछ भी हो रहा हो। यह built-in fault tolerance है बिना आपके retry logic या circuit breakers लिखे।&lt;/p&gt;
&lt;h2 id="इस-वसतव-म-कब-use-कर"&gt;इसे वास्तव में कब use करें&lt;/h2&gt;
&lt;p&gt;हर agent call को background responses की ज़रूरत नहीं है। Quick completions के लिए, आप बिना किसी कारण complexity जोड़ रहे होंगे। लेकिन यहाँ वे shine करते हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Complex reasoning tasks&lt;/strong&gt; — multi-step analysis, deep research, कुछ भी जो reasoning model को वास्तव में सोचने पर मजबूर करे&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Long content generation&lt;/strong&gt; — detailed reports, multi-part documents, extensive analysis&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unreliable networks&lt;/strong&gt; — mobile clients, edge deployments, flaky corporate VPNs&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Async UX patterns&lt;/strong&gt; — task submit करें, कुछ और करें, results के लिए वापस आएं&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;हम .NET developers जो enterprise apps बना रहे हैं, उनके लिए वो आखिरी scenario खास दिलचस्प है। एक Blazor app के बारे में सोचें जहाँ user एक complex report request करता है — आप agent task fire off करते हैं, उन्हें एक progress indicator दिखाते हैं, और उन्हें काम करते रहने देते हैं। कोई WebSocket gymnastics नहीं, कोई custom queue infrastructure नहीं, बस एक token और एक poll loop।&lt;/p&gt;
&lt;h2 id="नषकरष"&gt;निष्कर्ष&lt;/h2&gt;
&lt;p&gt;Background responses Microsoft Agent Framework में अभी .NET और Python दोनों के ज़रिए उपलब्ध हैं। अगर आप ऐसे agents बना रहे हैं जो simple Q&amp;amp;A से ज़्यादा complex कुछ करते हैं, तो यह अपने toolkit में जोड़ने लायक है। Continuation token pattern चीज़ों को simple रखता है जबकि एक बहुत real production problem solve करता है।&lt;/p&gt;
&lt;p&gt;Complete API reference और अधिक examples के लिए &lt;a href="https://devblogs.microsoft.com/agent-framework/handling-long-running-operations-with-background-responses/"&gt;full documentation&lt;/a&gt; देखें।&lt;/p&gt;</content:encoded></item><item><title>VS Code 1.112: .NET डेवलपर्स के लिए वाकई जरूरी बातें</title><link>https://thedotnetblog.com/hi/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/hi/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/</guid><description>VS Code 1.112 आ गया है और इसमें agent upgrades, integrated browser debugger, MCP sandboxing, और monorepo support भरपूर है। अगर आप .NET से build कर रहे हैं तो यहाँ जानिए क्या वाकई मायने रखता है।</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;यह पोस्ट स्वचालित रूप से अनुवादित है। मूल के लिए, &lt;a href="https://thedotnetblog.com/hi/posts/emiliano-montesdeoca/vscode-1-112-dotnet-developers/"&gt;यहाँ क्लिक करें&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;VS Code 1.112 आ गया है, और सच कहें तो? अगर आप अपने दिन .NET में बिता रहे हैं तो यह release अलग ही feel कराती है। &lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;official release notes&lt;/a&gt; में बहुत कुछ है, लेकिन मैं आपकी scrolling बचाता हूँ और focus करता हूँ उन चीज़ों पर जो हमारे लिए वाकई मायने रखती हैं।&lt;/p&gt;
&lt;h2 id="copilot-cli-और-भ-उपयग-ह-गय"&gt;Copilot CLI और भी उपयोगी हो गया&lt;/h2&gt;
&lt;p&gt;इस release का बड़ा theme है &lt;strong&gt;agent autonomy&lt;/strong&gt; — Copilot को हर कदम पर निगरानी किए बिना काम करने की ज्यादा जगह देना।&lt;/p&gt;
&lt;h3 id="message-steering-और-queueing"&gt;Message steering और queueing&lt;/h3&gt;
&lt;p&gt;वह पल जब Copilot CLI किसी task के बीच में होता है और आपको याद आता है कि कुछ बताना भूल गए? पहले आपको इंतजार करना पड़ता था। अब आप request चलते हुए भी messages भेज सकते हैं — या तो current response को steer करने के लिए या follow-up instructions queue करने के लिए।&lt;/p&gt;
&lt;p&gt;यह उन लंबे &lt;code&gt;dotnet&lt;/code&gt; scaffolding tasks के लिए बहुत काम का है जहाँ आप Copilot को project setup करते देख रहे होते हैं और सोचते हैं &amp;ldquo;अरे रुको, मुझे MassTransit भी चाहिए था।&amp;rdquo;&lt;/p&gt;
&lt;h3 id="permission-levels"&gt;Permission levels&lt;/h3&gt;
&lt;p&gt;यह वाला मुझे सबसे ज्यादा excited करता है। Copilot CLI sessions अब तीन permission levels support करती हैं:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Default Permissions&lt;/strong&gt; — सामान्य flow जहाँ tools चलने से पहले confirmation माँगते हैं&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass Approvals&lt;/strong&gt; — सब कुछ auto-approve करता है और errors पर retry करता है&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Autopilot&lt;/strong&gt; — पूरी तरह autonomous: tools approve करता है, अपने सवालों के खुद जवाब देता है, और task पूरा होने तक चलता रहता है&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;अगर आप एक नई ASP.NET Core API Entity Framework, migrations, और Docker setup के साथ scaffold कर रहे हैं — Autopilot mode का मतलब है कि आप बताएं क्या चाहिए और coffee लेने चले जाएं। यह खुद figure out कर लेगा।&lt;/p&gt;
&lt;p&gt;Autopilot को &lt;code&gt;chat.autopilot.enabled&lt;/code&gt; setting से enable कर सकते हैं।&lt;/p&gt;
&lt;h3 id="delegation-स-पहल-changes-preview-कर"&gt;Delegation से पहले changes preview करें&lt;/h3&gt;
&lt;p&gt;जब आप Copilot CLI को कोई task delegate करते हैं, तो यह एक worktree बनाता है। पहले, अगर आपके uncommitted changes थे, तो आपको Source Control में देखना पड़ता था। अब Chat view में decision लेने से पहले ही pending changes दिखते हैं — copy, move, या ignore करने के लिए।&lt;/p&gt;
&lt;p&gt;छोटी बात है, लेकिन &amp;ldquo;रुको, मेरे पास क्या staged था?&amp;rdquo; वाला पल बचाती है।&lt;/p&gt;
&lt;h2 id="vs-code-स-बहर-नकल-बन-web-apps-debug-कर"&gt;VS Code से बाहर निकले बिना web apps debug करें&lt;/h2&gt;
&lt;p&gt;Integrated browser अब &lt;strong&gt;full debugging&lt;/strong&gt; support करता है। आप breakpoints set कर सकते हैं, code step through कर सकते हैं, और variables inspect कर सकते हैं — सब VS Code के अंदर। Edge DevTools में switch करने की जरूरत नहीं।&lt;/p&gt;
&lt;p&gt;एक नया &lt;code&gt;editor-browser&lt;/code&gt; debug type है, और अगर आपके पास पहले से &lt;code&gt;msedge&lt;/code&gt; या &lt;code&gt;chrome&lt;/code&gt; launch configurations हैं, तो migrate करना उतना ही आसान है जितना &lt;code&gt;launch.json&lt;/code&gt; में &lt;code&gt;type&lt;/code&gt; field बदलना:&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;Blazor डेवलपर्स के लिए यह game changer है। आप terminal में &lt;code&gt;dotnet watch&lt;/code&gt; पहले से चला रहे हैं — अब आपकी debugging भी उसी window में रहती है।&lt;/p&gt;
&lt;p&gt;Browser को independent zoom levels भी मिले (आखिरकार), proper right-click context menus, और zoom हर website के लिए याद रखा जाता है।&lt;/p&gt;
&lt;h2 id="mcp-server-sandboxing"&gt;MCP server sandboxing&lt;/h2&gt;
&lt;p&gt;यह आप जितना सोच रहे हैं उससे ज्यादा मायने रखता है। अगर आप MCP servers use कर रहे हैं — शायद आपने Azure resources या database queries के लिए custom बनाया है — तो वे आपके VS Code process जितनी ही permissions के साथ चल रहे थे। यानी आपके filesystem, network, सब कुछ तक पूरी access।&lt;/p&gt;
&lt;p&gt;अब आप उन्हें sandbox कर सकते हैं। अपने &lt;code&gt;mcp.json&lt;/code&gt; में:&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;p&gt;जब किसी sandboxed server को कोई ऐसी चीज़ चाहिए जो उसके पास नहीं है, VS Code आपसे permission grant करने को कहता है। &amp;ldquo;उम्मीद है कोई कुछ अजीब नहीं करेगा&amp;rdquo; वाले तरीके से कहीं बेहतर।&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;नोट:&lt;/strong&gt; Sandboxing अभी macOS और Linux पर उपलब्ध है। Windows support आ रहा है — WSL जैसे remote scenarios काम करते हैं।&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="monorepo-customizations-discovery"&gt;Monorepo customizations discovery&lt;/h2&gt;
&lt;p&gt;अगर आप monorepo में काम कर रहे हैं (और सच कहें तो, कई enterprise .NET solutions आखिरकार एक बन जाते हैं), तो यह एक असली समस्या हल करता है।&lt;/p&gt;
&lt;p&gt;पहले, अगर आप अपने repo का कोई subfolder खोलते थे, VS Code आपकी &lt;code&gt;copilot-instructions.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;, या custom skills जो repository root पर थीं, नहीं खोज पाता था। अब &lt;code&gt;chat.useCustomizationsInParentRepositories&lt;/code&gt; setting के साथ, यह &lt;code&gt;.git&lt;/code&gt; root तक जाकर सब कुछ खोजता है।&lt;/p&gt;
&lt;p&gt;इसका मतलब है कि आपकी टीम monorepo के सभी projects में agent instructions, prompt files, और custom tools share कर सकती है, बिना सभी को root folder खोलने की जरूरत के।&lt;/p&gt;
&lt;h2 id="agent-debugging-क-लए-troubleshoot"&gt;Agent debugging के लिए /troubleshoot&lt;/h2&gt;
&lt;p&gt;कभी custom instructions या skills set up किए और सोचा क्यों pick up नहीं हो रहीं? नई &lt;code&gt;/troubleshoot&lt;/code&gt; skill agent debug logs पढ़ती है और बताती है क्या हुआ — कौन से tools use हुए या skip हुए, instructions क्यों load नहीं हुए, और slow responses का कारण क्या है।&lt;/p&gt;
&lt;p&gt;इसे enable करें:&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;p&gt;फिर chat में बस &lt;code&gt;/troubleshoot why is my custom skill not loading?&lt;/code&gt; type करें।&lt;/p&gt;
&lt;p&gt;अब आप इन debug logs को export और import भी कर सकते हैं, जो तब बहुत काम आता है जब कुछ expected नहीं चल रहा हो और team के साथ share करना हो।&lt;/p&gt;
&lt;h2 id="image-और-binary-file-support"&gt;Image और binary file support&lt;/h2&gt;
&lt;p&gt;Agents अब disk से image files और binary files natively पढ़ सकते हैं। Binary files hexdump format में present होती हैं, और image outputs (जैसे integrated browser के screenshots) carousel view में दिखती हैं।&lt;/p&gt;
&lt;p&gt;.NET डेवलपर्स के लिए सोचें: UI bug का screenshot chat में paste करें और agent समझे क्या गलत है, या Blazor component rendering का output analyze करवाएं।&lt;/p&gt;
&lt;h2 id="automatic-symbol-references"&gt;Automatic symbol references&lt;/h2&gt;
&lt;p&gt;एक छोटा quality-of-life सुधार: जब आप किसी symbol का नाम (class, method, आदि) copy करके chat में paste करते हैं, VS Code अब automatically उसे &lt;code&gt;#sym:Name&lt;/code&gt; reference में convert कर देता है। इससे agent को उस symbol का पूरा context मिल जाता है बिना आपको manually add किए।&lt;/p&gt;
&lt;p&gt;अगर plain text चाहिए तो &lt;code&gt;Ctrl+Shift+V&lt;/code&gt; use करें।&lt;/p&gt;
&lt;h2 id="plugins-अब-enabledisable-ह-सकत-ह"&gt;Plugins अब enable/disable हो सकते हैं&lt;/h2&gt;
&lt;p&gt;पहले, MCP server या plugin disable करने का मतलब था उसे uninstall करना। अब आप उन्हें on और off toggle कर सकते हैं — globally और per-workspace दोनों तरह से। Extensions view या Customizations view में right-click करें और काम हो गया।&lt;/p&gt;
&lt;p&gt;npm और pypi के plugins अब auto-update भी हो सकते हैं, हालाँकि वे पहले approval माँगेंगे क्योंकि updates का मतलब है आपकी machine पर नया code चलाना।&lt;/p&gt;
&lt;h2 id="अतम-बत"&gt;अंतिम बात&lt;/h2&gt;
&lt;p&gt;VS Code 1.112 clearly agent experience पर जोर दे रहा है — अधिक autonomy, बेहतर debugging, tighter security। .NET डेवलपर्स के लिए, integrated browser debugging और Copilot CLI improvements standout features हैं।&lt;/p&gt;
&lt;p&gt;अगर आपने अभी तक किसी .NET project के लिए Copilot CLI session Autopilot mode में नहीं चलाई है, तो यह release शुरू करने का अच्छा समय है। बस अपनी permissions set करें और इसे करने दें।&lt;/p&gt;
&lt;p&gt;&lt;a href="https://code.visualstudio.com/updates/v1_112"&gt;VS Code 1.112 download करें&lt;/a&gt; या VS Code के अंदर &lt;strong&gt;Help &amp;gt; Check for Updates&lt;/strong&gt; से update करें।&lt;/p&gt;</content:encoded></item></channel></rss>