هذا هو السطح نفسه الذي بُني عليه تطبيق الجوّال. إن استطعت فتح WebSocket وإرسال
JSON، تستطيع بناء مضيف.
كيف يعمل
1
سطح المكتب يستمع أصلًا
عندما تكون لوحة الوكيل مفتوحة، يشغّل المنسّق مستمع اقتران مقيَّد برمز على
الشبكة المحلية (راجع نقاط النهاية). وكل تبويب لوحة مفتوح هو
تبويب سطح مكتب بـ
tab_id ثابت وجلسة وكيل حيّة.2
يتصل مضيفك برمز الاقتران
افتح WebSocket إلى رابط الاقتران والرمز في سلسلة الاستعلام. وبدون رمز صالح يُرفَض
الاتصال — فالاقتران هو حد الأمان كله.
3
اسرد والتصق بتبويب
أرسل
list_tabs لاكتشاف تبويبات سطح المكتب المفتوحة، ثم attach_tab لعكس واحد.
ويستقبل مضيفك الآن نشاط ذلك التبويب (متدفّقًا) ويستطيع قيادته.4
قُد الجلسة المشتركة
أرسل إطارات
user_message. وأثناء الالتصاق، يوجّهها الخادم إلى التبويب المعكوس
— فتدخل رسالتك المحادثة نفسها التي فيها وكيل سطح المكتب. وهذا ما يجعله «وكيلًا
واحدًا، سياقًا مشتركًا» لا جلسة ثانية.نقاط النهاية
يُشتَق مستمع الاقتران من منفذ الجسر (COMFYUI_MCP_BRIDGE_PORT، الافتراضي
9180):
رابط الاقتران:
- الرمز إمّا مثبَّت من المستخدم عبر
COMFYUI_MCP_PAIR_TOKEN(اقتران دائم) أو يُسكّ لكل جلسة ويُوزَّع عبر تدفّق QR / الاقتران في اللوحة. ويحصل مضيفك عليه بالطريقة نفسها التي يحصل بها تطبيق الجوّال: يقترنه المستخدم مرة واحدة. - مربوط بالشبكة المحلية افتراضيًا، لكن التعريض العام مدمج حين يطلبه المستخدم:
يعرض مربع الاقتران في اللوحة وضع الإنترنت الذي يفتح نفق cloudflared سريعًا
مشفَّرًا، وتستطيع المؤسسات توجيهه عبر مُرحِّل ذاتي الاستضافة
(
COMFYUI_MCP_TUNNEL_BACKEND=relay). والرمز يقيّده في الحالين.
أشكال الرسائل
كل الإطارات كائنات JSON بـtype. وتحمل إطارات الطلب/الرد cid (معرّف ارتباط)
تختاره أنت، ويُعاد صداه في الرد المطابق.
وارد — المضيف → المنسّق
وأي حدث لوحة آخر ترسله أثناء الالتصاق يُوجَّه كذلك إلى التبويب المعكوس.
صادر — المنسّق → المضيف
إضافةً إلى نشاط الوكيل الحيّ للتبويب المعكوس (ردود متدفّقة، وحالة، وبطاقات)،
الذي يعرضه مضيفك.
ثوابت الأمان — يجب أن يحافظ عليها المضيف
هذه الضمانات التي تجعل الاقتران آمنًا. وبناء مضيف يحترمها هو العقد كله؛ ومضيف يحاول تجاوزها هو بالضبط ما صُمِّم المستمع لرفضه.الحفاظ على هذه ليس قيدًا على مضيفك — إنه هو الميزة. توقف عميلًا عن اختطاف جلسة
لم يقترن بها قط.
- بوابة الرمز. يرفض المستمع أي اتصال بلا رمز اقتران صالح (
verifyClient). لا تبنِ تدفّقًا يشحن الرمز أو يضمّنه تلقائيًا — يقترن المستخدم، مرة، عن عمد. - ختم
attach_tabالسلطوي. الخادم، لا العميل، يقرّر أي تبويب تستهدفه إطاراتك. لا تعتمد علىtab_idالذي يوفّره العميل للتوجيه؛ التصق أولًا، ثم أرسل. - أهداف غير بلا واجهة فقط. يجوز لك الالتصاق بتبويب سطح مكتب حقيقي، لا بعميل بلا واجهة آخر (لا تستطيع عكس هاتف/مضيف آخر).
- تبويب واحد في كل مرة. الالتصاق بـ B يسقط اشتراكك في A. نمذج عكسًا نشطًا واحدًا لكل اتصال.
- نوع مقبس مثبَّت. نوع الاتصال (بلا واجهة مقابل سطح مكتب) ثابت عند أول
hello؛ لا تحاول قلبه للهروب من حرّاس الاستيلاء.
عميل مرجعي أدنى
علّم نموذجًا لغويًا بناء المحوّل الخاص بك
الصق الموجّه أدناه في Claude أو ChatGPT أو وكيل البرمجة لديك حتى يسند محوّل مضيف لمنصّتك. يحمل عقد البروتوكول كاملًا، فلا يحتاج النموذج إلى التخمين.Copy this into your LLM
سجّل تكاملك
بنيت شيئًا؟ سجّله حتى يُدرَج وحتى نستطيع تنبيهك بتغييرات البروتوكول قبل شحنها:سجّل مضيف طرف ثالث
افتح قالب التسجيل على GitHub — الاسم، والمنصّة، والمستودع، وإصدار البروتوكول
الذي بنيت عليه.
الاستقرار: الإطارات أعلاه هي ما يشحن عليه تطبيق الجوّال، لكن هذا ليس عقدًا
مجمَّدًا ومُرقَّمًا بعد — اقرأ المصدر
(
src/services/ui-bridge.ts)
بوصفه السلطة، وسجّل مضيفك حتى تُبلَّغ عندما تتحرّك الأشكال.