<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Cli | The .NET Blog</title><link>https://thedotnetblog.com/ar/tags/cli/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ar</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Thu, 23 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ar/tags/cli/index.xml" rel="self" type="application/rss+xml"/><item><title>Windows App Dev CLI v0.3: تشغيل F5 من الطرفية وأتمتة واجهة المستخدم للوكلاء الذكيين</title><link>https://thedotnetblog.com/ar/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/ar/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/</guid><description>يُقدّم Windows App Development CLI v0.3 أمر winapp run لتشغيل التطبيقات وتنقيحها من الطرفية، وأمر winapp ui لأتمتة الواجهة، وحزمة NuGet جديدة تتيح dotnet run مع التطبيقات المُحزَّمة.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المنشور تلقائيًا. للاطلاع على النص الأصلي، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/windows-app-dev-cli-v03-run-ui-automation/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;تجربة F5 في Visual Studio رائعة. لكن فتح VS لمجرد تشغيل تطبيق Windows مُحزَّم وتنقيحه — سواء في خط أنابيب CI، أو سير عمل آلي، أو عندما يُجري وكيل ذكاء اصطناعي الاختبارات — يُشكّل عبئًا زائدًا.&lt;/p&gt;
&lt;p&gt;صدر الإصدار v0.3 من Windows App Development CLI &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; مجلد تطبيق غير مُحزَّم وملف manifest، وينفّذ كل ما يفعله 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; والاستثناءات في الوقت الفعلي.&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-أتمتة-واجهة-المستخدم-من-سطر-الأوامر"&gt;winapp ui: أتمتة واجهة المستخدم من سطر الأوامر&lt;/h2&gt;
&lt;p&gt;هذه هي الميزة التي تفتح سيناريوهات الوكلاء الذكيين. يوفر &lt;code&gt;winapp ui&lt;/code&gt; وصولًا كاملًا عبر UI Automation لأي تطبيق Windows قيد التشغيل — WPF وWinForms وWin32 وElectron وWinUI3 — مباشرةً من الطرفية.&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;البحث عن عناصر بالاسم أو النوع أو معرّف الأتمتة&lt;/li&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;code&gt;winapp ui&lt;/code&gt; و&lt;code&gt;winapp run&lt;/code&gt; سير عملًا كاملًا من الطرفية: بناء ← تشغيل ← تحقق. يمكن للوكيل تشغيل التطبيق، وفحص حالة الواجهة، والتفاعل برمجيًا، والتحقق من النتيجة.&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;: يُضيف اسمًا مستعارًا لتشغيل التطبيق بالاسم من الطرفية.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;إكمال تلقائي بـ Tab&lt;/strong&gt;: تهيئة إكمال PowerShell بأمر واحد.&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;الأداة في معاينة عامة. راجع &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>توقف عن حراسة طرفيتك: الوضع المنفصل في Aspire يغير سير العمل</title><link>https://thedotnetblog.com/ar/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/ar/posts/emiliano-montesdeoca/aspire-detached-mode-free-your-terminal/</guid><description>يتيح لك Aspire 13.2 تشغيل AppHost في الخلفية واسترداد طرفيتك. مقرون بأوامر CLI الجديدة ودعم الوكلاء، هذا أمر أكبر مما يبدو.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/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، تختفي طرفيتك. مقفلة. مشغولة حتى Ctrl+C. تريد تشغيل أمر سريع؟ افتح تبويبًا جديدًا. تريد التحقق من السجلات؟ تبويب آخر. هذا الاحتكاك الصغير يتراكم بسرعة.&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;، وبصراحة، هذه إحدى تلك الميزات التي تُغيّر طريقة عملك فوراً.&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;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;. يعمل AppHost الخاص بك في الخلفية وتستعيد طرفيتك فوراً.&lt;/p&gt;
&lt;h2 id="إدارة-ما-يعمل"&gt;إدارة ما يعمل&lt;/h2&gt;
&lt;p&gt;التشغيل في الخلفية مفيد فقط إذا كنت تستطيع إدارة ما هو جارٍ. يأتي Aspire 13.2 بمجموعة كاملة من أوامر CLI:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# قائمة جميع AppHost العاملة&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;# فحص حالة AppHost محدد&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;# بث السجلات من AppHost العامل&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;# إيقاف AppHost محدد&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;aspire stop
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="دمجه-مع-الوضع-المعزول"&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-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;كل مثيل يحصل على منافذ عشوائية وأسرار منفصلة ودورة حياة خاصة به.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-ضخم-لوكلاء-البرمجة"&gt;لماذا هذا ضخم لوكلاء البرمجة&lt;/h2&gt;
&lt;p&gt;وكيل البرمجة الذي يعمل في طرفيتك يمكنه الآن:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;تشغيل التطبيق بـ &lt;code&gt;aspire start&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;الاستعلام عن حالته بـ &lt;code&gt;aspire describe&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;التحقق من السجلات بـ &lt;code&gt;aspire logs&lt;/code&gt; لتشخيص المشكلات&lt;/li&gt;
&lt;li&gt;إيقافه بـ &lt;code&gt;aspire stop&lt;/code&gt; عند الانتهاء&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;تشغيل &lt;code&gt;aspire agent init&lt;/code&gt; يهيّئ ملف مهارات Aspire الذي يعلّم الوكلاء هذه الأوامر.&lt;/p&gt;
&lt;h2 id="خلاصة"&gt;خلاصة&lt;/h2&gt;
&lt;p&gt;الوضع المنفصل هو ترقية لسير العمل متنكرة كعلامة بسيطة. اقرأ &lt;a href="https://devblogs.microsoft.com/aspire/aspire-detached-mode-and-process-management/"&gt;المقال كاملاً&lt;/a&gt; واحصل على Aspire 13.2 مع &lt;code&gt;aspire update --self&lt;/code&gt;.&lt;/p&gt;</content:encoded></item><item><title>azd update — أمر واحد يتحكّم في جميع مديري الحزم</title><link>https://thedotnetblog.com/ar/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/ar/posts/emiliano-montesdeoca/azd-update-universal-upgrade-command/</guid><description>يمتلك Azure Developer CLI الآن أمر تحديث عالمياً يعمل بصرف النظر عن طريقة التثبيت — winget أو Homebrew أو Chocolatey أو سكريبت التثبيت.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/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 متاح&amp;rdquo; التي تظهر كل أسابيع قليلة؟ تلك التي تتجاهلها لأنك لا تتذكر إن كنت قد ثبّتت &lt;code&gt;azd&lt;/code&gt; عبر winget أو Homebrew أو ذلك السكريبت curl الذي شغّلته قبل ستة أشهر؟ نعم، تمّ حلّ هذا الأمر أخيراً.&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; — أمر واحد يُحدّث Azure Developer CLI إلى أحدث إصدار بصرف النظر عن طريقة تثبيتك الأصلية. Windows، macOS، Linux — لا يهم. أمر واحد.&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;هذا كل شيء. إن أردت الوصول المبكر إلى الميزات الجديدة، يمكنك التبديل إلى بناء الـ insiders اليومي:&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;يكتشف الأمر طريقة التثبيت الحالية لديك ويستخدم آلية التحديث المناسبة داخلياً. لا مزيد من &amp;ldquo;انتظر، هل استخدمت winget أم choco على هذا الجهاز؟&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="التحفظ-الصغير"&gt;التحفّظ الصغير&lt;/h2&gt;
&lt;p&gt;يأتي &lt;code&gt;azd update&lt;/code&gt; ابتداءً من الإصدار 1.23.x. إن كنت على إصدار أقدم، ستحتاج إلى إجراء تحديث يدوي أخير باستخدام طريقة تثبيتك الأصلية. بعد ذلك، &lt;code&gt;azd update&lt;/code&gt; يتولى كل شيء من الآن فصاعداً.&lt;/p&gt;
&lt;p&gt;تحقق من إصدارك الحالي بـ &lt;code&gt;azd version&lt;/code&gt;. إن احتجت تثبيتاً جديداً، &lt;a href="https://learn.microsoft.com/azure/developer/azure-developer-cli/install-azd"&gt;وثائق التثبيت&lt;/a&gt; ستُرشدك.&lt;/p&gt;
&lt;h2 id="لماذا-هذا-مهم"&gt;لماذا هذا مهم&lt;/h2&gt;
&lt;p&gt;هذا تحسين صغير لجودة الحياة، لكن بالنسبة لأولئك منّا الذين يستخدمون &lt;code&gt;azd&lt;/code&gt; يومياً لنشر وكلاء الذكاء الاصطناعي وتطبيقات Aspire إلى Azure، البقاء محدّثاً يعني حالات أقل من &amp;ldquo;هذه الخطأ تمّ إصلاحها بالفعل في الإصدار الأخير&amp;rdquo;. شيء واحد أقل يجب التفكير فيه.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/azure-sdk/azd-update/"&gt;الإعلان الكامل&lt;/a&gt; والغوص العميق لـ Jon Gallant &lt;a href="https://blog.jongallant.com/2026/04/azd-update"&gt;هنا&lt;/a&gt; لمزيد من السياق.&lt;/p&gt;</content:encoded></item><item><title>.NET Aspire 13.2 يريد أن يكون أفضل صديق لوكيل الذكاء الاصطناعي</title><link>https://thedotnetblog.com/ar/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/ar/posts/emiliano-montesdeoca/aspire-agentic-development-build-run-observe/</guid><description>يُركّز Aspire 13.2 كلياً على التطوير الوكيلي — مخرجات CLI منظّمة، وتشغيل معزول، وبيئات ذاتية الإصلاح، وبيانات OpenTelemetry كاملة حتى تتمكن وكلاء الذكاء الاصطناعي من بناء تطبيقاتك وتشغيلها ومراقبتها فعلاً.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/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;هل تعرف تلك اللحظة التي يكتب فيها وكيل البرمجة بالذكاء الاصطناعي كوداً رائعاً فتشعر بالحماس، ثم ينهار كل شيء عند محاولة &lt;em&gt;تشغيله&lt;/em&gt; فعلياً؟ تعارضات في المنافذ، وعمليات وهمية، ومتغيرات بيئة خاطئة — وفجأة يُنفق الوكيل رصيده من التوكن في استكشاف مشكلات الإطلاق عوضاً عن بناء الميزات.&lt;/p&gt;
&lt;p&gt;نشر فريق Aspire للتو &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;منشوراً متأنياً للغاية&lt;/a&gt; حول هذه المشكلة بالضبط، وإجابتهم مقنعة: صُمِّم Aspire 13.2 ليس للبشر وحدهم، بل لوكلاء الذكاء الاصطناعي أيضاً.&lt;/p&gt;
&lt;h2 id="المشكلة-حقيقية"&gt;المشكلة حقيقية&lt;/h2&gt;
&lt;p&gt;وكلاء الذكاء الاصطناعي بارعون بشكل لافت في كتابة الكود. لكن شحن تطبيق متكامل يعمل بشكل صحيح يتطلب أكثر بكثير من مجرد توليد ملفات. تحتاج إلى تشغيل الخدمات بالترتيب الصحيح، وإدارة المنافذ، وضبط متغيرات البيئة، وتوصيل قواعد البيانات، والحصول على تغذية راجعة حين تسوء الأمور. في الوقت الراهن، تتعامل معظم الوكلاء مع كل هذا بأسلوب التجربة والخطأ — تشغيل الأوامر، وقراءة مخرجات الأخطاء، والمحاولة مجدداً.&lt;/p&gt;
&lt;p&gt;نضيف تعليمات Markdown ومهارات مخصصة وإرشادات محددة لتوجيهها، غير أن كل ذلك غير موثوق، ولا يمكن تصريفه، ويكلف رصيداً من التوكن لمجرد تحليله. أصاب فريق Aspire جوهر المسألة: تحتاج الوكلاء إلى &lt;strong&gt;مصرِّفات وواجهات برمجية منظّمة&lt;/strong&gt;، لا إلى مزيد من Markdown.&lt;/p&gt;
&lt;h2 id="aspire-بوصفه-بنية-تحتية-للوكلاء"&gt;Aspire بوصفه بنية تحتية للوكلاء&lt;/h2&gt;
&lt;p&gt;إليك ما يُقدّمه Aspire 13.2 في مجال التطوير الوكيلي:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;مكدّسك البرمجي بالكامل في كود موجَّه بالأنواع.&lt;/strong&gt; يُعرِّف AppHost طوبولوجيا تطبيقك الكاملة — واجهة برمجية، وواجهة أمامية، وقاعدة بيانات، وذاكرة تخزين مؤقت — في 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;em&gt;التصريف للتحقق&lt;/em&gt;. يخبره المصرِّف على الفور إن كان ثمة خطأ. لا تخمين، ولا تجربة وخطأ مع ملفات الإعداد.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;أمر واحد يتحكم في الجميع.&lt;/strong&gt; بدلاً من إدارة الوكيل لـ &lt;code&gt;docker compose up&lt;/code&gt; و&lt;code&gt;npm run dev&lt;/code&gt; وسكريبتات تشغيل قاعدة البيانات بشكل منفصل، كل شيء يكون ببساطة &lt;code&gt;aspire start&lt;/code&gt;. تنطلق جميع الموارد بالترتيب الصحيح، على المنافذ الصحيحة، بالإعداد الصحيح. العمليات طويلة الأمد لن تعلّق الوكيل أيضاً — Aspire يتولى إدارتها.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;الوضع المعزول للوكلاء المتوازية.&lt;/strong&gt; مع &lt;code&gt;--isolated&lt;/code&gt;، تحصل كل عملية تشغيل في Aspire على منافذ عشوائية خاصة بها وأسرار مستخدم منفصلة. هل لديك عدة وكلاء تعمل عبر worktrees مختلفة في Git؟ لن تتعارض. هذا أمر بالغ الأهمية لأدوات مثل وكلاء الخلفية في VS Code التي تُطلق بيئات متوازية.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;عيون الوكيل من خلال التتبع التشخيصي.&lt;/strong&gt; هنا يصبح الأمر قوياً حقاً. تكشف واجهة Aspire CLI عن بيانات OpenTelemetry كاملة أثناء التطوير — التتبعات، والمقاييس، والسجلات المنظّمة. لا يقتصر الوكيل على قراءة مخرجات وحدة التحكم وتأمّل الخير. يستطيع تتبّع طلب فاشل عبر الخدمات، وتحديد نقاط الاختناق في النقاط الطرفية البطيئة، وتحديد موضع الخلل بدقة. هذه إمكانية مراقبة بجودة الإنتاج في حلقة التطوير.&lt;/p&gt;
&lt;h2 id="تشبيه-حواجز-مضمار-البولينغ"&gt;تشبيه حواجز مضمار البولينغ&lt;/h2&gt;
&lt;p&gt;يستخدم فريق Aspire تشبيهاً رائعاً: فكّر في Aspire بوصفه حواجز مضمار البولينغ لوكلاء الذكاء الاصطناعي. إن لم يكن الوكيل مثالياً — وهو لن يكون — فالحواجز تمنعه من الانحراف نحو الحواف. تعريف المكدّس يمنع سوء الإعداد، والمصرِّف يلتقط الأخطاء، وواجهة CLI تتولى إدارة العمليات، والتتبع التشخيصي يُوفّر حلقة التغذية الراجعة.&lt;/p&gt;
&lt;p&gt;اقرن هذا بشيء مثل Playwright CLI، وسيتمكن وكيلك من &lt;em&gt;استخدام&lt;/em&gt; تطبيقك فعلاً — النقر خلال مسارات التدفق، وفحص DOM، ورؤية المشكلات في بيانات التتبع، وإصلاح الكود، وإعادة التشغيل، والاختبار مجدداً. بناء، تشغيل، مراقبة، إصلاح. هذه هي حلقة التطوير الذاتي التي كنا نسعى إليها.&lt;/p&gt;
&lt;h2 id="البدء"&gt;البدء&lt;/h2&gt;
&lt;p&gt;جديد على Aspire؟ ثبِّت واجهة CLI من &lt;a href="https://get.aspire.dev"&gt;get.aspire.dev&lt;/a&gt; واتبع &lt;a href="https://aspire.dev/get-started/first-app"&gt;دليل البدء السريع&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;تستخدم Aspire بالفعل؟ شغِّل &lt;code&gt;aspire update --self&lt;/code&gt; للحصول على الإصدار 13.2، ثم وجِّه وكيل البرمجة المفضّل لديك نحو مستودعك. قد تتفاجأ بمدى تقدّمه مع الحواجز الواقية التي يُوفّرها Aspire.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;لم يعد Aspire 13.2 مجرد إطار للتطبيقات الموزّعة — إنه يتحوّل إلى بنية تحتية أساسية للوكلاء. تعريفات المكدّس المنظّمة، والإطلاق بأمر واحد، والتشغيل المتوازي المعزول، وبيانات التتبع التشخيصي في الوقت الفعلي، كل ذلك يمنح وكلاء الذكاء الاصطناعي تحديداً ما يحتاجونه للانتقال من كتابة الكود إلى شحن التطبيقات.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/aspire/agentic-dev-aspirations/"&gt;المنشور الكامل&lt;/a&gt; من فريق Aspire للاطلاع على كل التفاصيل ومقاطع الفيديو التوضيحية.&lt;/p&gt;</content:encoded></item><item><title>الوضع المعزول في Aspire يحلّ كابوس تعارض المنافذ في التطوير المتوازي</title><link>https://thedotnetblog.com/ar/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/ar/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/</guid><description>يُقدّم Aspire 13.2 وضع --isolated: منافذ عشوائية، وأسرار منفصلة، وانعدام كامل للتعارضات عند تشغيل نسخ متعددة من AppHost. مثالي للوكلاء والـ worktrees والسير المتوازية.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/aspire-isolated-mode-parallel-instances/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;إن سبق لك أن حاولت تشغيل نسختين من المشروع ذاته في الوقت نفسه، فأنت تعرف معاناة ذلك. المنفذ 8080 مشغول بالفعل. المنفذ 17370 محجوز. أوقف شيئاً، وأعد التشغيل، وتعامل مع متغيرات البيئة — إنه مُدمِّر للإنتاجية.&lt;/p&gt;
&lt;p&gt;هذه المشكلة تزداد سوءاً لا تحسّناً. وكلاء الذكاء الاصطناعي تُنشئ worktrees في Git للعمل بشكل مستقل. وكلاء الخلفية تُطلق بيئات منفصلة. المطورون يستنسخون المستودع ذاته مرتين لفروع الميزات. كل هذه السيناريوهات تصطدم بالحائط نفسه: نسختان من التطبيق ذاته تتصارعان على المنافذ ذاتها.&lt;/p&gt;
&lt;p&gt;يُعالج Aspire 13.2 هذا بخيار واحد. كتب James Newton-King من فريق Aspire &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;التفاصيل الكاملة&lt;/a&gt;، وهي إحدى تلك الميزات التي تجعلك تتساءل &amp;ldquo;لماذا لم يكن هذا موجوداً من قبل؟&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="الحل---isolated"&gt;الحل: &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;هذا كل شيء. تحصل كل عملية تشغيل على:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;منافذ عشوائية&lt;/strong&gt; — لا مزيد من التعارضات بين النسخ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;أسرار مستخدم معزولة&lt;/strong&gt; — سلاسل الاتصال ومفاتيح API تبقى منفصلة لكل نسخة&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;لا إعادة تعيين يدوية للمنافذ. لا تعامل مع متغيرات البيئة. تحصل كل عملية تشغيل على بيئة نظيفة خالية من التعارضات تلقائياً.&lt;/p&gt;
&lt;h2 id="سيناريوهات-حقيقية-تبرز-فيها-هذه-الميزة"&gt;سيناريوهات حقيقية تبرز فيها هذه الميزة&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;نسخ متعددة.&lt;/strong&gt; لديك فرع ميزة في دليل ما وإصلاح خطأ في آخر:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# الطرفية 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;# الطرفية 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;يعمل كلاهما دون تعارضات. تُظهر لوحة التحكم ما يعمل وأين.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;وكلاء الخلفية في VS Code.&lt;/strong&gt; حين ينشئ وكيل الخلفية في Copilot Chat worktree في Git للعمل على كودك بشكل مستقل، قد يحتاج إلى تشغيل AppHost في Aspire. دون &lt;code&gt;--isolated&lt;/code&gt;، سيحدث تعارض في المنافذ مع worktree الرئيسية. معه، تعمل كلتا النسختين ببساطة.&lt;/p&gt;
&lt;p&gt;مهارة Aspire التي تشحن مع &lt;code&gt;aspire agent init&lt;/code&gt; تُوجّه الوكلاء تلقائياً لاستخدام &lt;code&gt;--isolated&lt;/code&gt; عند العمل في worktrees. لذا يجب أن يتعامل وكيل الخلفية في Copilot مع هذا مباشرةً.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;اختبارات التكامل جنباً إلى جنب مع التطوير.&lt;/strong&gt; تحتاج إلى تشغيل الاختبارات مقابل AppHost حيّ أثناء مواصلة بناء الميزات؟ الوضع المعزول يمنح كل سياق منافذه وإعداداته الخاصة.&lt;/p&gt;
&lt;h2 id="كيف-يعمل-داخليا"&gt;كيف يعمل داخلياً&lt;/h2&gt;
&lt;p&gt;حين تُمرّر &lt;code&gt;--isolated&lt;/code&gt;، تُولّد واجهة CLI مُعرِّفاً فريداً للنسخة. يُشغّل هذا سلوكين:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;عشوائية المنافذ&lt;/strong&gt; — بدلاً من الارتباط بمنافذ محددة مسبقاً في إعداد AppHost، يختار الوضع المعزول منافذ عشوائية متاحة لكل شيء — لوحة التحكم، ونقاط نهاية الخدمة، وكل ذلك. يتكيّف اكتشاف الخدمات تلقائياً، فتجد الخدمات بعضها بصرف النظر عن المنافذ المخصصة.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;عزل الأسرار&lt;/strong&gt; — تحصل كل نسخة معزولة على مخزن أسرار مستخدم خاص بها، مُفهرس بالمُعرِّف الفريد للنسخة. سلاسل الاتصال ومفاتيح API من نسخة ما لا تتسرّب إلى أخرى.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;لا يحتاج كودك إلى أي تغييرات. اكتشاف خدمات Aspire يحلّ نقاط النهاية في وقت التشغيل، لذا يتصل كل شيء بشكل صحيح بصرف النظر عن تعيين المنافذ.&lt;/p&gt;
&lt;h2 id="متى-تستخدمه"&gt;متى تستخدمه&lt;/h2&gt;
&lt;p&gt;استخدم &lt;code&gt;--isolated&lt;/code&gt; عند تشغيل نسخ متعددة من AppHost ذاته في الوقت نفسه — سواء كان ذلك تطويراً متوازياً، أو اختبارات آلية، أو وكلاء ذكاء اصطناعي، أو worktrees في Git. للتطوير بنسخة واحدة حيث تفضّل منافذ محددة، يظل &lt;code&gt;aspire run&lt;/code&gt; العادي يعمل بشكل جيد.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;الوضع المعزول ميزة صغيرة تحلّ مشكلة حقيقية ومتزايدة الشيوع. مع دفع التطوير بمساعدة الذكاء الاصطناعي نحو سير عمل أكثر توازياً — وكلاء متعددة، وworktrees متعددة، وسياقات متعددة — أصبحت القدرة على تشغيل نسخة أخرى ببساطة دون التصارع على المنافذ أمراً ضرورياً.&lt;/p&gt;
&lt;p&gt;اقرأ &lt;a href="https://devblogs.microsoft.com/aspire/aspire-isolated-mode-parallel-development/"&gt;المنشور الكامل&lt;/a&gt; للاطلاع على جميع التفاصيل التقنية وجرّبه بـ &lt;code&gt;aspire update --self&lt;/code&gt; للحصول على الإصدار 13.2.&lt;/p&gt;</content:encoded></item><item><title>Aspire 13.2 يُقدّم CLI للوثائق — ويمكن لوكيل الذكاء الاصطناعي استخدامه أيضاً</title><link>https://thedotnetblog.com/ar/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/ar/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/</guid><description>يُضيف .NET Aspire 13.2 أمر aspire docs — واجهة CLI للبحث عن الوثائق الرسمية وتصفّحها وقراءتها دون مغادرة الطرفية. كما يعمل أداةً لوكلاء الذكاء الاصطناعي. إليك سبب أهميّته.</description><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;تمت ترجمة هذا المقال تلقائياً. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/ar/posts/emiliano-montesdeoca/aspire-docs-cli-ai-skills/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;هل تعرف تلك اللحظة التي تكون فيها غارقاً في AppHost في Aspire، تربط التكاملات ببعضها، ثم تحتاج إلى التحقق من المعاملات التي يتوقعها تكامل Redis بالضبط؟ تنتقل إلى المتصفح، وتبحث في aspire.dev، وتُحدّق في وثائق الواجهة البرمجية، ثم تعود إلى محررك. السياق ضائع. الإيقاع مقطوع.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://devblogs.microsoft.com/aspire/aspire-docs-in-your-terminal/"&gt;وصل حلٌّ لهذا&lt;/a&gt; في Aspire 13.2. تتيح لك واجهة &lt;code&gt;aspire docs&lt;/code&gt; CLI البحث عن الوثائق الرسمية لـ Aspire وتصفّحها وقراءتها مباشرةً من طرفيّتك. وبما أنها مدعومة بخدمات قابلة لإعادة الاستخدام، يمكن لوكلاء الذكاء الاصطناعي والمهارات استخدام الأوامر ذاتها للبحث في الوثائق بدلاً من ابتكار واجهات برمجية غير موجودة.&lt;/p&gt;
&lt;h2 id="المشكلة-التي-يحلها-فعلا"&gt;المشكلة التي يحلّها فعلاً&lt;/h2&gt;
&lt;p&gt;يُصيب David Pine كبد الحقيقة في منشوره الأصلي: كانت وكلاء الذكاء الاصطناعي &lt;em&gt;سيئة للغاية&lt;/em&gt; في مساعدة المطورين على بناء تطبيقات Aspire. كانت توصي بـ &lt;code&gt;dotnet run&lt;/code&gt; عوضاً عن &lt;code&gt;aspire run&lt;/code&gt;، وتُحيل إلى learn.microsoft.com للوثائق التي تعيش على aspire.dev، وتقترح حزم NuGet قديمة، وابتكار واجهات برمجية غير موجودة — وهذه أكثر ما يزعجني.&lt;/p&gt;
&lt;p&gt;لماذا؟ لأن Aspire كان مخصصاً لـ .NET فقط لفترة أطول مما كونه متعدد اللغات، وتعمل نماذج اللغة الكبيرة من بيانات تدريب سابقة للميزات الأحدث. حين تمنح وكيل الذكاء الاصطناعي القدرة على البحث الفعلي في الوثائق الحالية، يتوقف عن التخمين ويبدأ في أن يكون مفيداً.&lt;/p&gt;
&lt;h2 id="ثلاثة-أوامر-صفر-تبويبات-في-المتصفح"&gt;ثلاثة أوامر، صفر تبويبات في المتصفح&lt;/h2&gt;
&lt;p&gt;الواجهة بسيطة بشكل منعش:&lt;/p&gt;
&lt;h3 id="عرض-قائمة-بجميع-الوثائق"&gt;عرض قائمة بجميع الوثائق&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. تحتاج مخرجات قابلة للقراءة آلياً؟ أضف &lt;code&gt;--format Json&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id="البحث-عن-موضوع"&gt;البحث عن موضوع&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;يبحث في العناوين والمحتوى مع ترتيب النتائج حسب الصلة. نفس محرك البحث الذي يُشغّل أدوات التوثيق داخلياً. تحصل على نتائج مرتّبة مع العناوين، والمسارات المختصرة، ودرجات الصلة.&lt;/p&gt;
&lt;h3 id="قراءة-صفحة-كاملة-أو-قسم-واحد-فقط"&gt;قراءة صفحة كاملة (أو قسم واحد فقط)&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;يبثّ الصفحة كاملةً بتنسيق Markdown إلى طرفيّتك. تحتاج قسماً واحداً فقط؟&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;دقة جراحية. لا تمرير عبر 500 سطر. فقط الجزء الذي تحتاجه.&lt;/p&gt;
&lt;h2 id="زاوية-وكيل-الذكاء-الاصطناعي"&gt;زاوية وكيل الذكاء الاصطناعي&lt;/h2&gt;
&lt;p&gt;هنا يصبح الأمر مثيراً للاهتمام للمطورين الذين يبنون بأدوات الذكاء الاصطناعي. تعمل أوامر &lt;code&gt;aspire docs&lt;/code&gt; ذاتها أدواتٍ لوكلاء الذكاء الاصطناعي — عبر المهارات، وخوادم MCP، أو مجمّعات CLI البسيطة.&lt;/p&gt;
&lt;p&gt;بدلاً من أن يخترع مساعد الذكاء الاصطناعي واجهات Aspire البرمجية بناءً على بيانات تدريب قديمة، يمكنه استدعاء &lt;code&gt;aspire docs search &amp;quot;postgres&amp;quot;&lt;/code&gt;، والعثور على وثائق التكامل الرسمية، وقراءة الصفحة المناسبة، وتزويدك بالنهج الموثّق. توثيق حيّ ومحدَّث — لا ما حفظه النموذج قبل ستة أشهر.&lt;/p&gt;
&lt;p&gt;البنية التحتية وراء هذا مقصودة. بنى فريق Aspire خدمات قابلة لإعادة الاستخدام (&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;) بدلاً من تكامل وحيد الغرض. هذا يعني أن محرك البحث ذاته يعمل للبشر في الطرفية، ولوكلاء الذكاء الاصطناعي في محررك، وللأتمتة في خط أنابيب CI.&lt;/p&gt;
&lt;h2 id="سيناريوهات-واقعية"&gt;سيناريوهات واقعية&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;بحث سريع في الطرفية:&lt;/strong&gt; أنت في عمق ثلاثة ملفات وتحتاج معاملات إعداد Redis. أمران، تسعون ثانية، والعودة إلى العمل:&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;التطوير بمساعدة الذكاء الاصطناعي:&lt;/strong&gt; مهارة VS Code الخاصة بك تُجمّع أوامر CLI. تسأل &amp;ldquo;أضف قاعدة بيانات PostgreSQL إلى AppHost&amp;rdquo; فيبحث الوكيل في الوثائق الحقيقية قبل الإجابة. لا ابتكار واجهات وهمية.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;التحقق في CI/CD:&lt;/strong&gt; يتحقق خط أنابيبك من إعدادات AppHost مقابل الوثائق الرسمية برمجياً. مخرجات &lt;code&gt;--format Json&lt;/code&gt; تنساب بسلاسة إلى &lt;code&gt;jq&lt;/code&gt; وأدوات أخرى.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;قواعد معرفة مخصصة:&lt;/strong&gt; هل تبني أدوات ذكاء اصطناعي خاصة بك؟ أرسل مخرجات JSON المنظّمة مباشرةً إلى قاعدة معرفتك:&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;لا استخلاص من الويب. لا مفاتيح API. نفس البيانات المنظّمة التي تستخدمها أدوات التوثيق داخلياً.&lt;/p&gt;
&lt;h2 id="الوثائق-دائما-حية"&gt;الوثائق دائماً حيّة&lt;/h2&gt;
&lt;p&gt;هذا هو الجانب الذي أقدّره أكثر من غيره. لا تُنزّل واجهة CLI لقطة ثابتة — بل تستعلم من aspire.dev مع تخزين مؤقت يستند إلى ETag. في اللحظة التي تتحدث فيها الوثائق، تعكس واجهتك وأي مهارة مبنية عليها ذلك التحديث. لا نسخ قديمة، لا لحظات &amp;ldquo;لكن الويكي قال&amp;hellip;&amp;rdquo;.&lt;/p&gt;
&lt;h2 id="خلاصة-القول"&gt;خلاصة القول&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;aspire docs&lt;/code&gt; هي إحدى تلك الميزات الصغيرة التي تحلّ مشكلة حقيقية بنظافة. البشر يحصلون على وصول للوثائق من الطرفية مباشرةً. وكلاء الذكاء الاصطناعي يحصلون على طريقة للتوقف عن التخمين والبدء في الرجوع إلى الوثائق الفعلية. وكل ذلك مدعوم بمصدر حقيقة واحد.&lt;/p&gt;
&lt;p&gt;إذا كنت تبني بـ .NET Aspire ولم تجرب واجهة CLI بعد، شغِّل &lt;code&gt;aspire docs search &amp;quot;your-topic-here&amp;quot;&lt;/code&gt; وتحقق من شعورك. ثم فكّر في تغليف تلك الأوامر في أي مهارة ذكاء اصطناعي أو إعداد أتمتة تستخدمه — وكلاؤك سيشكرونك.&lt;/p&gt;
&lt;p&gt;اطّلع على &lt;a href="https://davidpine.dev/posts/aspire-docs-mcp-tools/"&gt;تحليل David Pine المعمّق&lt;/a&gt; حول كيفية تطور أدوات التوثيق، و&lt;a href="https://aspire.dev/reference/cli/commands/aspire-docs/"&gt;مرجع CLI الرسمي&lt;/a&gt; للاطلاع على كل التفاصيل.&lt;/p&gt;</content:encoded></item></channel></rss>