تخطَّ إلى المحتوى

التحكم عن بُعد والجوال

Control Center تطبيق حاسوب، لكن العمل الذي يتابعه لا يتوقف حين تبتعد عن مكتبك. التحكم عن بُعد يقرن هاتفك بـ cc_server عبر Remote، التطبيق المرافق على remote.usectrl.dev، فتتابع الأسطول من هناك: تقرأ الرسائل والتذاكر، وترد على وكيل، وتفرز موجز الأخبار، من غير أن يغادر الخادم الصوت أو النسخ النصي أو الشفرة المصدرية أو بيانات الاعتماد التي تعيش عليه.

عدّه رفيقًا يغلب عليه الاطلاع، يلازم سطح المكتب. ليس بديلًا لعميل الحاسوب الكامل.

يصل الهاتف إلى cc_server عبر WebSocket: إما اتصال مباشر (loopback أو LAN أو tailnet أو wss://) أو غرفة مشروطة بدعوة على وسيط إشارات يرحّل الإطارات المختومة. لا توجد قناة بيانات من نظير إلى نظير.

يصل الهاتف المقترن إلى شريحة صغيرة ومقصودة من سطح الخادم:

  • قراءة التذاكر والوكلاء والمساحات ورسائلها وموجز أخبارك
  • الرد: إرسال رسالة في مساحة، أو تحديث تذكرة أو إسنادها، أو تعليم مقالة مقروءة أو محفوظة
  • تشغيل كتيب التشغيل: إنشاء مثيل من قالب خطة محفوظ بمعاملاته. يقتصر ذلك على اقتراح خطة، فلا يُنفَّذ شيء ولا يُنفَق شيء حتى يوافق مشغّل عليها في Plan Studio من عميل كامل
  • تبديل مساحات العمل من منتقي الهاتف نفسه

وهذا قريب من كل ما يستطيعه. الهاتف طرف بصلاحية أدنى من العميل الكامل. لا يستطيع إطلاق عمليات، ولا إنفاق ميزانية LLM، ولا الدفع إلى GitHub، ولا إنشاء مساحات عمل. انظر نموذج الوصول لكيف يُفرض ذلك فعلًا، لا لمجرد أنه مقصود.

يسير الاتصال على مرحّل بوساطة وسيط: ينضم الخادم إلى غرفة واحدة مشروطة بدعوة على وسيط wss:// بصفته مالكها، وينضم كل عميل مقترن — حاسوب أو ويب أو هاتف — إلى الغرفة نفسها برمز قبول محدود المدة. تجتمع ثلاث قطع:

القطعة الدور
Remote (تطبيق الهاتف) تطبيق الويب المرافق، مستضاف على remote.usectrl.dev افتراضيًا أو باستضافة ذاتية. يُحمَّل في المتصفح، ويحتفظ بسجل الاقتران في IndexedDB.
وسيط المرحّل مرحّل wss:// بلا حالة (cc_signaling_server) يستضيف غرفًا متعددة الأطراف. لا يحمل إلا إطارات معتمة: كل حمولة مختومة طرفًا لطرف بين الهاتف والخادم، فلا يرى الوسيط بيانات التطبيق ولا سر الاقتران، ولا يفسّر ما يمرّره.
cc_server مالك الغرفة. يجيب عن استدعاءات الهاتف عبر الموزّع نفسه الذي يستخدمه سائر العملاء.

يحمل عرض الاقتران واصف اتصال يسرد كل مسار إلى الخادم (LAN وtailnet وwss:// عام والمرحّل) مع بصمة هويته. يختار محلّل الهاتف أفضل مسار يمكن بلوغه ويثبّت البصمة عند أول اتصال (TOFU). يضمن المرحّل الاتصال حتى حين لا يوجد مسار مباشر، من غير أن يستطيع قراءة الحركة.

يُصدر الاقتران من التطبيق ويُسلَّم رابطًا عميقًا. انظر اقتران جهاز للإجراء. التشريح هو ما يهم هنا.

https://<pwa-host>/#<payload>

تسير الحمولة في جزء العنوان، وهو ما بعد #، ولا ترسله المتصفحات إلى الخادم، فلا يراه مضيف HTTPS لتطبيق PWA. تحمل كل ما يحتاج إليه الهاتف ليبلغ الخادم ويثبت من يكون: واصف الاتصال (كل مسار مع بصمة الهوية)، ومعرّف جهاز صادر للتو، ومفتاحًا مشتركًا مسبقًا بطول 32 بايتًا، وختم انتهاء. يفك الهاتف ترميزها، ويخزّن سجل اقتران محليًا، وينزع الجزء حتى يخرج السر من العنوان.

لشكل الحمولة اثنان، وهما غير قابلين للتبادل. رمز QR للهاتف الصادر من لوحة الاقتران داخل التطبيق هو PairingPayload من الإصدار v2 أعلاه، وموجّه إلى مضيف PWA لتطبيق Remote. يُصدر cc_server pair --client-url رابط v1 أقدم ومختلفًا ({s, i, k} — عنوان الخادم، ومعرّف الجهاز، والمفتاح) مخصّصًا لعميل الويب وحده.

ويختلفان أيضًا في مدة الصلاحية، وهذا مما يسهل الخطأ فيه:

صادرة عن انتهاء صلاحية بيانات الاعتماد
لوحة الاقتران داخل التطبيق (pairing.mint) 30 يومًا، دائمًا
cc_server pair من سطر الأوامر لا شيء — بيانات الاعتماد لا تنتهي

الجهاز المقترن مصادَق عليه وغير موثوق. تُبقي بوابات مستقلة عدة اقترانًا مقبولًا (أو مسرّبًا) دون أن يصير تحكمًا كاملًا بالخادم.

1. العضوية هي الحد، لا الاقتران

قسم بعنوان “1. العضوية هي الحد، لا الاقتران”

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

يُشتق الحد الأدنى للدور من نوع العملية، ما لم تصرّح هي بحدها: القراءة تحتاج guest، والتعديل يحتاج member، والعمليات التدميرية تحتاج admin.

إلى جانب فحص الدور، تحمل جلسة الهاتف قدرة أدنى من جلسة الحاسوب أو الويب. العمليات المصرَّح بأنها للعميل الكامل وحده تُرفض للهاتف قبل أن يعمل المعالج، مهما بلغت صلاحية المستخدم خلفها: إصدار اقترانات الأجهزة وسردها وإعادة تسميتها وإبطالها، وقراءة اتصال النفق وضبطه، والنسخ الاحتياطي للخادم وتصدير مساحة العمل واستيرادها، وكشف العمليات وإنهاؤها، وفحوص المحوّلات، وإعدادات الخادم، وإدارة SSO، والتحكم في الأسطول، وتولّي وكيل يعمل أو إرجاعه.

لسطح أدوات MCP تحديدًا (tools/call)، تحكم قائمة سماح برفض افتراضي في ما يجوز للهاتف استدعاؤه. ما ليس في القائمة يُرفض قبل أن يعمل. القائمة تميل إلى القراءة والملاحظة، ومعها حفنة من كتابات محلية فقط — رسالة، وتحديث تذكرة، وعلامة مقالة — لا تنفق ميزانية LLM، ولا تطلق عملية، ولا تمس نظامًا خارجيًا.

يُرفض مثلًا: استشارة وكيل، وبدء مراجعة بالذكاء الاصطناعي، وإنهاء وكيل، ونشر مراجعة إلى GitHub، وتوظيف وكلاء أو فصلهم، وإنشاء مساحة عمل.

4. نطاق مساحة العمل في كل استدعاء

قسم بعنوان “4. نطاق مساحة العمل في كل استدعاء”

لا يحتفظ الخادم بأي «مساحة عمل حالية». هو بلا حالة عن قصد: كل استدعاء خاص بمساحة عمل يجب أن يسمّي workspace_id المستهدفة في وسائطه، ويرفض الموزّع الاستدعاء رفضًا باتًا إذا غاب المعرّف أو سمّى مساحة عمل غير مسجّلة لدى الخادم، قبل أن يُفتح أي قاعدة بيانات. لذلك لا يرث الهاتف نطاق عميل آخر ولا ينجرف إليه، وتسمية مساحة عمل غريبة عنه لا تنفع أيضًا، لأن فحص العضوية في البوابة 1 ما زال ساريًا. هذا هو ثابت عزل مساحة العمل نفسه الذي يفرضه بقية المنتج.

5. إطارات مختومة طرفًا لطرف بمفتاح مشترك مسبقًا

قسم بعنوان “5. إطارات مختومة طرفًا لطرف بمفتاح مشترك مسبقًا”

كل إطار بين الهاتف والخادم مختوم بمفتاح الاقتران. رمز القبول لا يُدخل العميل إلا إلى الغرفة، ولا يفك تشفير شيء. يرحّل الوسيط النص المشفّر ولا يرى المفتاح. الجهاز المُبطَل يجد بيانات اعتماده قد زالت، لذلك يفشل مغلقًا عند إعادة الاتصال.

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

يحدّ محدّد بنافذة منزلقة حركة أدوات الوصول البعيد عند 120 استدعاءً في الدقيقة، مع سقف فرعي أضيق بمقدار 30 استدعاءً في الدقيقة على أفعال التعديل. الرصيد يخص الطرف لا الجلسة: ثلاثة من أجهزتك تسحب من رصيد واحد، فلا يكسب عميل مُختطَف هامشًا بفتح جلسات أكثر، ولا يجوّع عضو كثير الحركة سواه.

وسيط المرحّل لا يعرف شيئًا عن قصد: يستضيف الغرف، ويمرّر الإطارات المختومة، ولا يحتفظ بحسابات ولا ببيانات تطبيق ولا بمفاتيح. الغرف مشروطة بدعوة وعابرة. تبقى بيانات التطبيق والصوت والنسخ النصي والمصدر وبيانات الاعتماد كلها على الخادم.

بعد الاقتران يتلقى الهاتف تحديثات حيّة في إطارات إشعار — رسائل وكلاء جديدة، وتذاكر مسنَدة إليك، وتغيّرات في الحالة — على غرار إشعارات الحاسوب نفسها. يبث الخادم تلك الإطارات إلى كل جلسة متصلة، ويُطبَّق مرشح مساحة العمل على جهة العميل، فما تراه محصور في مساحة العمل التي تنظر إليها.

السطح ما يعرضه
الإعدادات ← أنت ← أجهزتك (/workspaces/:workspaceId/settings/you/devices) عملاء مقترنون بحالتهم الحيّة، مع اقتران عميل جديد (متصفح ويب أو تطبيق سطح المكتب أو هاتف) والإبطال

تصدر اللوحة نفسها اقترانات لمتصفح ثانٍ أو لتطبيق سطح المكتب، لا للهواتف وحدها. المسار واحد، ولا يختلف إلا الرابط العميق.