> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mibyanai.com/llms.txt
> Use this file to discover all available pages before exploring further.

# ربط ديسكتوب بعدة نسخ من مبيان

> سجّل كل خلفيات مبيان لديك (المحلية، والبوابات البعيدة، وأجهزة SSH، وسحابة مبيان) في تطبيق واحد واستخدم وكلاءها جنباً إلى جنب

سجّل كل خلفية مبيان تملكها، أي بيئة التشغيل المحلية والبوابات البعيدة على شبكتك أو على VPS وأجهزة SSH ونسخ سحابة مبيان، في تطبيق ديسكتوب واحد، واستخدم الوكلاء على جميعها جنباً إلى جنب. الاتصالات دائمة: كل بوابة مسجّلة تفتح خلفياتها وقنوات WebSocket الخاصة بها عند الطلب، ويواصل الوكلاء في الخلفية البث بينما تتصفح بوابة أخرى.

هذه الصفحة هي المكمّل من جهة ديسكتوب لصفحة [تشغيل عدة بوابات في وقت واحد](/desktop/user-guide/multi-profile-gateways): تلك تتناول استضافة عدة بوابات على جهاز واحد، وهذه تتناول تطبيق ديسكتوب واحداً يتحدث مع عدة أجهزة.

## أين تجدها

كل شيء في صفحة **الإعدادات ← البوابات** (Gateways) الموحدة. (كانت الإصدارات الأقدم تعرض صفحتين منفصلتين هما **Gateway** و**Connections**، وروابط Connections القديمة تُعيد التوجيه إلى هنا.) هناك ثلاثة مداخل:

* **الإعدادات ← البوابات**: الصفحة نفسها (**Cmd/Ctrl+,** ثم **Gateways** في قائمة الإعدادات). سجل الاتصالات قسم في هذه الصفحة تحت أدوات وضع الاتصال على مستوى الجهاز.
* **شريط الملفات الشخصية في الشريط الجانبي**: زر القابس في نهاية الشريط (التلميح: **«Connect another Mibyan gateway…»**) يأخذك مباشرة إلى صفحة البوابات. وهو ظاهر دائماً حتى قبل أن تنشئ ملفاً شخصياً ثانياً أو اتصالاً ثانياً.
* **لوحة الأوامر**: **Cmd/Ctrl+K** ثم اكتب *Gateways* (ويطابق أيضاً *connections* و*add gateway* و*remote* و*ssh* و*instances*).

## سجل البوابات

يدير قسم **Registered gateways** في **الإعدادات ← البوابات** قائمة مسمّاة ببوابات مبيان. وتقول مقدمته ذلك صراحة: *«أدِر هذا الجهاز وكل بوابة مبيان يمكنه الوصول إليها عبر اتصالات بعيدة أو SSH أو السحابة.»* كل إدخال هو *اتصال*:

| النوع | ما هو | المصادقة |
| - | - | - |
| **محلي (Local)** | «بيئة تشغيل مبيان التي يديرها هذا التطبيق.» | تلقائية |
| **بوابة بعيدة (Remote gateway)** | «بوابة مبيان يمكن الوصول إليها عبر HTTP(S): شبكة محلية أو Tailscale أو الإنترنت.» | رمز جلسة أو OAuth |
| **SSH** | «تثبيت مبيان يُوصَل إليه عبر SSH.» يفتح التطبيق النفق ويشغّل اللوحة نيابة عنك | مفتاح SSH + رمز معتمد |
| **سحابة مبيان (Mibyan Cloud)** | «نسخة مستضافة تُكتشف عبر حساب سحابة مبيان.» | تسجيل الدخول إلى البوابة |

قواعد تستحق المعرفة:

* **كل اتصال يحتاج اسم جهاز فريداً** («Homelab» أو «لابتوب العمل»). يظهر الاسم في كل مكان تظهر فيه النسخة: شارات القائمة، والمعرّفات، ونتائج التحديث. التفرد غير حساس لحالة الأحرف، فلا يمكن أن يتعايش `Homelab` و`homelab`.
* الإدخال **المحلي** يديره التطبيق (تظهر عليه شارة **App-managed**) ولا يمكن حذفه. حذف أي اتصال آخر يُسقط خلفياته وأنفاقه الحية، أما النسخة نفسها فلا تُمس.
* اتصال واحد هو دائماً **الأساسي (Primary)** (شارة على صفه): وهو البديل الافتراضي في السجل للاستدعاءات متعددة البوابات التي لا تسمّي بوابة. **Make primary** لا يبدّل مساحة عمل الجلسات الحالية، وحذف الأساسي يرجع إلى الإدخال المحلي.
* خيار **At startup, return to Sessions on the last-used gateway** يحدد أي بوابة تفتح عليها الجلسات بعد إعادة تشغيل التطبيق بالكامل. وهو مغلق افتراضياً فتفتح الجلسات على **Primary**. فعّله لاستئناف آخر بوابة اتصلت بنجاح. التبديل الفاشل لا يُحفظ أبداً، والبوابة المحفوظة المحذوفة أو غير المتاحة ترجع إلى Primary.
* زر **Test** يفحص مساري HTTP وWebSocket للاتصال نفسه، فالنجاح (إشعار *«Reachable»*) يعني أن المحادثة ستعمل فعلاً، وليس فقط أن المضيف استجاب للـping.
* **تُرفض التكرارات عند الحفظ**: لا يوجد إلا إدخال **محلي** واحد؛ وإدخالات **البعيد** و**السحابة** تُزال تكراراتها اعتماداً على العنوان بعد التطبيع (قص المسافات، وحذف الشرطات المائلة الأخيرة، وتحويل الأحرف إلى صغيرة، وعبر النوعين معاً فلا يمكن لإدخال سحابة وإدخال بعيد أن يشيرا إلى العنوان نفسه)؛ وإدخالات **SSH** تُزال تكراراتها اعتماداً على `user@host:port` بعد التطبيع مع الملف الشخصي البعيد.
* إدخالات السحابة تأتي عادة من مسار تسجيل الدخول/الاكتشاف في سحابة مبيان أعلى صفحة البوابات، ونوع **Mibyan Cloud** في محرر إضافة الاتصال يوجّهك إليه.

بدّل البوابات من الشريط الجانبي لـ**الجلسات**. تبقى الملفات الشخصية والمحادثات والمراسلة وcron مرتبطة بتلك البوابة، بينما تُختار الخلفية التي يديرها التطبيق للنافذة عبر أدوات وضع الاتصال أعلاه. **Primary** هو البديل في السجل ولا يبدّل مساحة العمل الحالية.

## تنظيم مجموعات الجلسات

من قائمة العرض في الشريط الجانبي للجلسات اختر **Gateway & profile** أثناء عرض كل الملفات الشخصية. تحصل كل بوابة على قسم قابل للطي خاص بها، وتحته أقسام فرعية للملفات الشخصية تحتوي جلساتها. بوابتان فيهما ملف `default` تبقيان منفصلتين. تبدأ عناوين البوابات باسم الاتصال المحفوظ، وتعرض عناوين الملفات الشخصية اسم الملف.

استخدم قائمة قسم البوابة أو الملف لـ**Rename group** أو **Reset name** أو **Move up** أو **Move down**. إعادة التسمية تغيّر تسمية الشريط الجانبي فقط، لا البوابة ولا الملف الشخصي. تُرتَّب البوابات كأقسام كاملة، وتُرتَّب الملفات الشخصية داخل بوابتها. اسحب عنوان القسم من أي موضع (أيقونته أو اسمه أو المساحة الفارغة) لإعادة ترتيبه، أو ركّز على العنوان واستخدم Space ثم الأسهم ثم Space لوضعه. تُحفظ الأسماء والترتيب والأقسام المطوية على هذا الجهاز. وطيّ بوابة يحفظ حالات الطي الفردية لملفاتها الشخصية. وإجراء الجلسة الجديدة في كل ملف شخصي يستهدف ذلك الملف على بوابته المالكة.

تعرض لوحة سحابة مبيان أيضاً **Saved Cloud gateways** عندما يكون اكتشاف البوابة مسجّل الخروج. **Use gateway** يختار اتصالاً محفوظاً موجوداً دون تغيير البوابة الافتراضية، و**Active in this window** يحدد الاتصال الحالي. إضافة نسخة جديدة تستخدم اسمها الودّي في السحابة، بينما تُحفظ أسماء الاتصالات المخصصة الموجودة. الاتصالات المحفوظة تحتاج إلى مصادقة بوابة صالحة؛ أدِر تسجيل الدخول من عناصر تحكم الاتصال المسجّل.

## إضافة اتصال خطوة بخطوة

1. افتح **الإعدادات ← البوابات** ومرّر إلى سجل الاتصالات (أو انقر على القابس في شريط الملفات الشخصية).
2. انقر **Add connection**.
3. اختر النوع: **Local** أو **Mibyan Cloud** أو **Remote gateway** أو **SSH**. (**Local** معطّل ما دام الإدخال المحلي الذي يديره التطبيق موجوداً، وهو كذلك تقريباً دائماً؛ و**Mibyan Cloud** يوجّهك إلى مسار تسجيل الدخول/الاكتشاف في السحابة أعلاه.)
4. املأ الحقول:
   * **Name**: إلزامي وفريد؛ هو «اسم الجهاز» الذي يظهر في كل مكان تظهر فيه هذه النسخة (النص الإرشادي: `Homelab`). 64 حرفاً كحد أقصى.
   * *للبوابة البعيدة فقط:*
     * **Gateway URL**: العنوان الأساسي لخلفية `mibyan serve` تعمل، مثل `http://homelab.lan:9119`. وتعمل بادئات المسار خلف وكيل عكسي.
     * **Authentication**: اختر **Session token** أو **OAuth**:
       * **Session token**: الصق رمز جلسة اللوحة من البوابة البعيدة. عند التعديل: *«اتركه فارغاً للإبقاء على الرمز المحفوظ.»*
       * **OAuth**: سجّل الدخول عبر مسار المتصفح لدى مزوّد الهوية، ولا رمز تلصقه.
   * *لـSSH فقط:*
     * **SSH host**: حقل واحد مركّب بصيغة `user@host:22` (المستخدم والمنفذ اختياريان). يُستخدم مفتاح SSH لديك ويعتمد التطبيق رمز لوحة عبر النفق. تعمل الفحوصات البعيدة تحت صدفة تسجيل الدخول للحساب؛ وفي صدفة `zsh` لا يستطيع مراقب الفحص إنهاء مجموعة العمليات كلها، فقد تبقى عمليات حفيدة لفحص عالق على الجهاز البعيد (أما الأجهزة البعيدة التي تستخدم bash/sh فتنظّفها).
     * **Mibyan path (اختياري)**: المسار الكامل للملف التنفيذي `mibyan` على الجهاز البعيد (مثلاً `/opt/mibyan/bin/mibyan`). اتركه فارغاً للاكتشاف التلقائي. اضبطه عندما لا يكون `mibyan` في `PATH` لصدفة الجهاز البعيد غير التفاعلية ويُبلغ **Test** بـ\*«Mibyan is not installed on the remote host»\*؛ ومسح الحقل يعيد الاكتشاف التلقائي.
5. انقر **Save connection** (أو **Cancel**).
6. انقر **Test** في الصف الجديد وانتظر *«Reachable»*.

عدّل أي إدخال غير محلي لاحقاً بزر القلم، أو احذفه بزر سلة المهملات. الحذف يطلب تأكيداً ويذكّرك بأن *«النسخة نفسها لا تُمس، ويمكنك إضافتها من جديد في أي وقت.»*

<Info>
  **الخلفية البعيدة عملية `mibyan serve` تعمل فعلاً**

  لا شيء هنا يعمل ما لم تكن الخلفية تعمل فعلاً ويمكن الوصول إليها على الجهاز الآخر. التطبيق يتصل بها ولا يشغّلها نيابة عنك (باستثناء اتصالات SSH حيث يشغّل التطبيق اللوحة عبر النفق عند الطلب). راجع [الاتصال بخلفية بعيدة](/ar/desktop/user-guide/desktop#الاتصال-بخلفية-بعيدة) لإعداد جهة الخلفية: مزوّدو المصادقة، والربط بعنوان غير loopback، وإرشادات Tailscale.
</Info>

### الانتقال من إعدادات الاتصال الواحد

أول تشغيل لإصدار يدعم السجل يستورد إعداداتك الحالية تلقائياً: وضع الاتصال العام وأي تجاوزات قديمة لكل ملف شخصي من الإعدادات ← Gateway تصبح إدخالات مسمّاة في السجل (مع إزالة التكرار حسب العنوان/المضيف). (الإصدارات الأحدث لم تعد تقدم تجاوزات لكل ملف شخصي في صفحة إعدادات البوابات: اتصالات البوابات على مستوى الجهاز، وتُكتشف الملفات الشخصية من البوابات التي تتصل بها.) يبقى ملف الإعدادات القديم دون مساس، فتستمر الإصدارات الأقدم على الجهاز نفسه في العمل. وإذا تعارض اسم مهاجَر أُضيف إليه لاحقة (`Homelab 2`).

## الوكلاء عبر البوابات

كل [ملف شخصي](/desktop/user-guide/profiles) على كل اتصال مسجّل هو *وكيل*. القائمة الموحّدة هي ما تعرضه الواجهات متعددة البوابات (ومنها قائمة [وضع البوت](/desktop/user-guide/bot-mode) المدمجة):

* عندما يوجد اسم الملف الشخصي نفسه على عدة بوابات تُميَّز المعرّفات بصيغة **`@name-device`**: فالملف `research` على Homelab يظهر `@research-homelab`، أما الملف الفريد عبر كل البوابات فيحتفظ باسمه المجرد.
* الإحصاء متحمس لكن القنوات كسولة: يسرد التطبيق الوكلاء عبر REST دون فتح WebSocket لكل بوابة. البوابة التي لا يمكن الوصول إليها تُبلَّغ في صفها بدل أن تكسر القائمة؛ واتصالات SSH تبقى تتصل عند الطلب إلى أن تفتح أول وكيل عليها (فلا أنفاق مفاجئة).
* فتح وكيل يتصل بـ**بوابته الخاصة**: المحادثات والجلسات والذاكرة تعيش على الجهاز الذي يملك الملف الشخصي، تماماً كأنك تستخدم تلك النسخة مباشرة.

كل زوج `(connection, profile)` يحصل على خلفيته وقناته الخاصة، ضمن مجمّع بإعادة تدوير الخمول نفسها لخلفيات الملفات الشخصية المحلية، ويواصل الوكلاء في الخلفية البث بينما تتصفح بوابة أخرى.

تعود أزرار الموافقة إلى الخلفية المالكة للجلسة، وليس إلى الملف الشخصي المحدد حالياً. وفي حالة ملف شخصي محلي ثانوي يستطيع ديسكتوب استخدام القناة التي وصل منها الطلب حتى لو كان ارتباط الجلسة المخبأ مفقوداً. ملكية الجلسة المحفوظة تظل لها الأولوية، وحذف الملف المحلي أو إعادة تسميته يمسح هذا المسار المؤقت بدل إعادة الاتصال بخلفية قديمة.

### التبديل والنطاق

يتبع أسفل الشريط الجانبي تسلسلاً واحداً: **بوابة ← ملف شخصي ← جلسات**. البوابات أجهزة أو خلفيات مستضافة؛ والملفات الشخصية وكلاء مبيان معزولون يعيشون على بوابة واحدة.

* مع بوابة مسجّلة واحدة لا يُضاف أي عنصر تحكم للبوابة. يحتفظ ديسكتوب المحلي فقط بشريط الملفات الشخصية وتدفق لوحة المفاتيح كما كانا.
* مع عدة بوابات يعرض الشريط الجانبي محدد بوابة واحداً مسمّى. أيقونته (جهاز أو سحابة أو شبكة أو طرفية) تحدد نوع الاتصال؛ وتبقى صور الملفات الشخصية عنصراً مستقلاً بعد الفاصل. ويتسع المحدد نفسه من بوابتين إلى أسطول أكبر دون تحويل الخلفيات إلى رموز تشبه الملفات الشخصية أو دفع إجراءات الملفات خارج الشريط.
* اختيار بوابة يستعيد آخر ملف شخصي استُخدم عليها. تعيد حبة المنزل إلى ملفها الافتراضي وتعرض حبة الطبقات **All profiles on this gateway**. وتواصل **Cmd/Ctrl+1–9** تبديل الملفات الشخصية داخل البوابة النشطة متى لم تكن هناك لوحة بشريط تبويب تحتجزها.
* مع عدة بوابات يصبح شريط الملفات الشخصية **شريط أسطول**: ملفات كل بوابة مسجّلة على شريط واحد، وكل مجموعة يتصدرها رمز نوع تلك البوابة (جهاز أو شبكة أو طرفية أو سحابة)، وهو الرمز نفسه الذي يستخدمه محدد البوابة. تبدو مربعات البوابة النشطة تماماً كما في ديسكتوب ببوابة واحدة؛ ومربعات البوابات الأخرى باهتة («في حالة راحة»). المرور فوق مربع في حالة راحة يسمّي جهازه (`omer · This device`) فلا يلتبس ملفان بالاسم نفسه على جهازين.
* النقر على مربع في حالة راحة ينفذ التبديل نفسه الذي ينفذه محدد البوابة، وينتهي عند `(gateway, profile)` بعينه: يدور المربع أثناء الاتصال بالهدف، وتبقى البوابة السابقة معروضة إلى أن يستجيب الهدف، والهدف الميت يُفشل النقرة برسالة بدل ترك النافذة نصف مبدّلة. تحافظ المجموعات على ترتيب السجل أياً كانت البوابة النشطة، فلا يتحرك مربع من تحت المؤشر الذي نقر عليه. النقر بزر الفأرة الأيمن على مربع في حالة راحة يعرض **Switch to** و**Color** و**Rename** و**Edit SOUL.md** و**Delete**، وكلها تنفَّذ على بوابة المربع نفسها؛ وتأكيد الحذف يسمّي الجهاز.
* البوابة التي لم يستطع آخر إحصاء الوصول إليها تحتفظ بمربعاتها، مع نقطة كهرمانية على رمزها: الجهاز النائم ما زال لك. تسجيلان لخلفية واحدة ينطويان في مجموعة واحدة. وبعد ثلاثة عشر مربعاً عبر الأسطول يتكثف الشريط إلى قائمة واحدة مقسمة حسب البوابة.
* البوابة المحددة تنجو من الإغلاق وإعادة التشغيل فقط عندما يكون خيار **الإعدادات ← البوابات ← At startup, return to Sessions on the last-used gateway** مفعّلاً. التفضيل ومعرّف البوابة محفوظان في سجل بيانات المستخدم للتطبيق، فاستبدال حزمة التطبيق أو تحديثها لا يعيد ضبطهما.
* مع أكثر من ثلاثة عشر ملفاً شخصياً على البوابة النشطة يتكثف شريط صورها إلى محدد ملفات مسمّى. فتتعايش مجموعات كبيرة من البوابات والملفات دون تغيير نموذج **بوابة ← ملف شخصي ← جلسات**.
* يبقى **هذا الجهاز** بوابة من الدرجة الأولى حتى عندما يكون اتصال بعيد هو الأساسي. يمكنه إبقاء الجلسات المحلية متاحة أثناء انقطاع بعيد، لكن التطبيق لا يسميه «وضع عدم الاتصال»: فالنموذج أو الأدوات المحددة قد تظل تحتاج إلى الإنترنت.
* قائمة الجلسات وقنوات المراسلة ومهام cron والإعدادات والملفات والذاكرة كلها مرتبطة بـ`(gateway, profile)` النشط. الانتقال من بوابة Telegram إلى بوابة Signal لا يمكن أن يترك مجموعات قنوات البوابة السابقة أو جلساتها في الشريط الجانبي.
* يحمّل ديسكتوب سجل الاتصالات المحلي عند البدء حتى مع إخفاء شريط الحالة، ويبقيه محدثاً عند حفظ البوابات أو حذفها. لا حاجة لفتح الإعدادات. وفي الوضع البسيط يبقى شريط الملفات الشخصية متاحاً عند تسجيل أكثر من بوابة حتى مع وجود ملف افتراضي واحد فقط. تحميل السجل لا يتصل بكل بوابة؛ ولا يوجد استطلاع دوري للأسطول.
* المرور فوق وكيل يسخّن خلفيته مسبقاً فلا يدفع التبديل كلفة إقلاع بارد. وكلاء SSH استثناء: المرور لا يفتح النفق ولا يشغّل خلفية بعيدة، فقط فتح الوكيل يفعل.
* صفحة **القدرات (Capabilities)** (المهارات / الأدوات / MCP) لها نطاق مطابق: محدد **Configuring** فيها يسرد كل وكيل `(profile, device)` من القائمة الموحدة، واختيار أحدها يقرأ ويكتب مهارات **ذلك الجهاز** ومجموعات أدواته وخوادم MCP فيه دون تبديل مساحة عمل الجلسات. تثبيتات المركز ومفاتيح البيئة وإعداد MCP كلها تقع على خلفية الوكيل المحدد. زر *hot-reload into a live session* في تبويب MCP يظهر فقط للوكلاء على البوابة المتصلة بها النافذة؛ والتعديلات على الأجهزة الأخرى تسري في جلستها التالية.

أضف البوابات أو اختبرها أو أعد تسميتها أو احذفها في **الإعدادات ← البوابات**. زر القابس بجانب إجراءات الملف الشخصي اختصار إلى هذا المكان الواحد للإدارة، وليس مساراً ثانياً للإضافة.

### الجلسات ووضع البوت

تعرض الجلسات عمداً بوابة نشطة واحدة في كل مرة: هذا يبقي الملفات والأدوات والقنوات وcron وسجل الجلسات في سياق تنفيذ واحد مفهوم. شريط أسطول الملفات الشخصية يوسّع *المحدد* فقط، فمساحة العمل تبقى على `(gateway, profile)` واحد بعد كل نقرة. أما وضع البوت فيؤدي مهمة مختلفة وقد يعرض القائمة الموحدة مجمّعة حسب البوابة، فيفتح المستخدم وكيلاً على NAS وآخر على VPS من واجهة واحدة. وفتح بوت يفعّل مسار `(gateway, profile)` الدقيق الخاص به.

تبقى إشارات البوتات المباشرة والتفويض محلية للبوابة افتراضياً. فعبور حدود خلفية يغيّر نظام الملفات وبيانات الاعتماد والأدوات وسياق الثقة، لذلك ينبغي أن يكون التنفيذ عبر البوابات جسراً صريحاً، لا أثراً جانبياً عرضياً لتقاسم نافذة ديسكتوب واحدة.

## تحديث كل النسخ دفعة واحدة

**الإعدادات ← البوابات ← Update all instances** (يظهر عند تسجيل أكثر من اتصال) يرسل `mibyan update` إلى كل اتصال مؤهل بالتوازي:

* **المحلي** يتحدث عبر مسار التحديث الخاص بالتطبيق (المسار نفسه لـالإعدادات ← Updates).
* اتصالات **البعيد وSSH** يُطلب منها التحديث عبر خلفيتها الخاصة، فالتحديث يجري على *ذلك* الجهاز.
* نسخ **سحابة مبيان** تُتخطى مع ملاحظة *«Managed by Mibyan Cloud»*: المنصة تدير إصداراتها.

تبلّغ كل نسخة بنتيجتها بشكل مستقل، فلا يعطّل جهاز بعيد عن الوصول الدفعة كلها. الخلفيات التي تدير التحديثات خارجياً (Docker وNix) ترفض بلطف برسالتها الخاصة في صفها.

نادراً ما تحتاج زر الإعدادات مع ذلك: فمتى وُجد أكثر من هدف للتحديث تنفّذ عناصر التحديث المعتادة في التطبيق (**Update now** في لوحة About، و⌘K **Update Mibyan**، وإشعار جاهزية التحديث) التوزيع نفسه تلقائياً: الخلفية النشطة أولاً، ثم كل بوابة مؤهلة أخرى، ثم تطبيق ديسكتوب نفسه أخيراً. راجع [التحديث](/ar/desktop/user-guide/desktop#التحديث) في دليل ديسكتوب.

## ملاحظات أمنية

* **أين تعيش الرموز.** رموز جلسات البوابات البعيدة (ورموز OAuth الخاصة بالتسجيل الأصلي، المفهرسة بالعنوان الأساسي للبوابة) تُخزَّن في مجلد بيانات المستخدم للتطبيق كملفات بصلاحية المالك فقط (0600)، داخل عملية Electron الرئيسية؛ ولا ترى الواجهة ولا الإضافات بايتات الرموز أبداً.
* **تشفير اختياري بسلسلة المفاتيح.** افتراضياً **لا** تمر الرموز عبر سلسلة مفاتيح النظام: وفي macOS تحديداً يضع `safeStorage` في Electron مفتاحاً لكل تطبيق في سلسلة مفاتيح الدخول، وسلسلة مقفلة أو معطوبة تتحول إلى طلب كلمة مرور عند كل تشغيل. إذا أردت تشفيراً أثناء التخزين فوق صلاحيات الملفات فعّل **الإعدادات ← Gateway ← «Encrypt saved secrets with the OS keychain»**؛ تُعاد تشفير الأسرار المخزنة في مكانها (Keychain في macOS، وDPAPI في Windows، وخلفية سلسلة مفاتيح الجلسة في Linux). وإيقافه يفك تشفيرها من جديد.
* **ملف السجل** (`connections.json` تحت مجلد بيانات المستخدم للتطبيق) يحمل التسميات والعناوين والمضيفين، ولا تظهر الأسرار إلا داخل أغلفة مشفرة.
* الدالة `host.connections()` في Plugin SDK تُعيد عمداً التسميات والأنواع ومعرّف الأساسي فقط، ولا مادة الرموز أبداً.

## لمطوّري الإضافات

يعرض [Plugin SDK](/desktop/developer-guide/desktop-plugin-sdk) في ديسكتوب واجهة البوابات المتعددة مباشرة:

* `host.connections()`: قائمة الاتصالات المسجلة (التسميات والأنواع والأساسي؛ ولا بايتات رموز أبداً).
* `host.agents()`: القائمة الموحدة: صف لكل `(gateway, profile)` مع المعرّف `@name-device` المحسوب مسبقاً.
* `host.ensureAgent(connectionId, profile)`: يفعّل بوابة وكيل ما لتصل استدعاءات `host.request` اللاحقة إلى خلفيته.
* `host.warmAgent(connectionId, profile)`: تسخين مسبق للقناة دون انتظار (عند نية المرور).

الأربعة كلها تُكتشف بالميزات: في إصدار ديسكتوب أقدم تكون غائبة، وعلى الإضافة أن ترجع إلى تدفق `profiles.list` ببوابة واحدة. وقائمة وضع البوت متعددة البوابات هي المستهلك المرجعي.

## حل المشكلات

* **«Connection test failed»**: الخلفية لا يمكن الوصول إليها على ذلك العنوان من هذا الجهاز. تأكد أن `mibyan serve` يعمل على المضيف البعيد، وأن المنفذ مفتوح، و(مع مصادقة الرمز) أن الرمز حديث. أعد **Test** بعد الإصلاح.
* **وكيل يظهر لكنه لا يفتح**: شغّل **Test** على اتصاله. فشل مسار WebSocket مع نجاح HTTP يعني عادة أن وكيلاً أو جدار حماية أو حارس مصادقة/أصل في البوابة يحجب `/api/ws`.
* **بوابة بعيدة مفقودة من القائمة**: خلفيتها متوقفة أو لا يمكن الوصول إليها؛ تسردها القائمة تحت البوابات مع الخطأ. اتصالات SSH تعرض *connect-on-demand* حتى أول استخدام، وهذا بالتصميم وليس عطلاً.
* **«Update Mibyan Desktop to chat with agents on other connections»**: التطبيق أقدم من حزمة الاتصالات المتعددة؛ حدّث تطبيق ديسكتوب نفسه.
* **أسماء أجهزة مكررة**: غير ممكنة؛ التفرد مفروض عند الحفظ. وإذا تعارض اسم مهاجَر أُضيف إليه لاحقة (`Homelab 2`).
* **«Could not save the connection»**: أكثر الأسباب شيوعاً **Name** مفقود أو اسم مستخدم مسبقاً أو **Gateway URL** / **SSH host** بصيغة خاطئة؛ ورسالة الخطأ تسمّي المخالفة بدقة.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.