Gateway
نطاقات المشغّل
تحدد نطاقات المشغّل ما يمكن لعميل Gateway فعله بعد المصادقة. وهي آلية حماية لمستوى التحكم داخل نطاق مشغّل Gateway واحد موثوق، وليست عزلاً عدائياً متعدد المستأجرين. ولتحقيق فصل قوي بين الأشخاص أو الفرق أو الأجهزة، شغّل Gateways منفصلة تحت مستخدمي نظام تشغيل أو مضيفين منفصلين.
ذو صلة: الأمان، بروتوكول Gateway، إقران Gateway، CLI للأجهزة.
الأدوار
يتصل كل عميل WebSocket في Gateway بدور واحد:
operator: عملاء مستوى التحكم مثل CLI وواجهة التحكم والأتمتة وعمليات المساعدة الموثوقة.node: مضيفو القدرات (macOS وiOS وAndroid والأنظمة بلا واجهة رسومية) الذين يتيحون الأوامر عبرnode.invoke.
تتطلب أساليب RPC الخاصة بالمشغّل الدور operator؛ وتتطلب الأساليب الصادرة من Node
الدور node.
مستويات النطاق
| النطاق | المعنى |
|---|---|
operator.read |
الحالة والقوائم والفهرس والسجلات وقراءة الجلسات وغيرها من الاستدعاءات غير المعدِّلة للقراءة فقط. |
operator.write |
إجراءات المشغّل المعدِّلة: إرسال الرسائل واستدعاء الأدوات وتحديث إعدادات التحدث/الصوت وترحيل أوامر Node. ويستوفي أيضاً operator.read. |
operator.admin |
وصول إداري. يستوفي كل نطاقات operator.*. وهو مطلوب لتعديل الإعدادات والتحديثات والخطافات الأصلية ومساحات الأسماء المحجوزة والموافقات عالية المخاطر. |
operator.pairing |
إدارة إقران الأجهزة وعُقد Node: العرض والموافقة والرفض والإزالة والتدوير والإبطال. |
operator.approvals |
واجهات API للموافقة على التنفيذ والـ Plugin. |
operator.talk.secrets |
قراءة إعدادات التحدث مع تضمين الأسرار. |
تتطلب نطاقات operator.* المستقبلية غير المعروفة تطابقاً تاماً، ما لم يكن المستدعي
يحمل بالفعل operator.admin.
نطاق الأسلوب هو البوابة الأولى فقط
لكل استدعاء RPC في Gateway نطاق أسلوب بأقل امتياز يحدد ما إذا كان الطلب سيصل إلى معالجه. ثم تطبق بعض المعالجات فحوصاً أكثر صرامة بناءً على الشيء المحدد الذي تجري الموافقة عليه أو تعديله:
- يمكن الوصول إلى
device.pair.approveباستخدامoperator.pairing، لكن الموافقة على جهاز مشغّل لا يمكنها إصدار نطاقات أو الاحتفاظ إلا بالنطاقات التي يحملها المستدعي بالفعل. - يمكن الوصول إلى
node.pair.approveباستخدامoperator.pairing، ثم يشتق نطاقات موافقة إضافية من قائمة الأوامر المعلنة لعقدة Node المعلّقة. chat.sendأسلوب ذو نطاق كتابة، لكن أمري الدردشة/config setو/config unsetيتطلبانoperator.adminبالإضافة إلى ذلك، بصرف النظر عن نطاق إرسال الدردشة لدى المستدعي.
يتيح ذلك للمشغّلين ذوي النطاقات الأدنى تنفيذ إجراءات إقران منخفضة المخاطر دون اشتراط صلاحيات إدارية لكل موافقات الإقران.
موافقات إقران الأجهزة
سجلات إقران الأجهزة هي المصدر الدائم للأدوار والنطاقات المعتمدة. لا يحصل جهاز مقترن بالفعل على وصول أوسع ضمنياً: فإعادة الاتصال التي تطلب دوراً أو نطاقات أوسع تنشئ طلب ترقية معلّقاً جديداً.
عند الموافقة على طلب جهاز:
- لا يحتاج الطلب الذي لا يتضمن دور مشغّل إلى موافقة على نطاق المشغّل.
- يتطلب طلب دور جهاز غير مشغّل (مثل
node) النطاقoperator.admin، رغم أنdevice.pair.approveنفسه لا يحتاج إلا إلىoperator.pairing. - يتطلب طلب
operator.readأوoperator.writeأوoperator.approvalsأوoperator.pairingأوoperator.talk.secretsأن يكون المستدعي حاملاً لذلك النطاق بالفعل، أو لـoperator.admin. - يتطلب طلب
operator.adminالنطاقoperator.admin. - يمكن لطلب إصلاح لا يتضمن نطاقات صريحة أن يرث نطاقات رمز المشغّل
الحالي؛ وإذا كان ذلك الرمز ذا نطاق إداري، فستظل الموافقة تتطلب
operator.admin.
لا يمكن لجلسات السر المشترك غير الإدارية وجلسات الوكيل الموثوق إلا الموافقة على
طلبات أجهزة المشغّل ضمن نطاقات المشغّل المعلنة الخاصة بها؛ أما الموافقة
على الأدوار غير المشغّلة فهي إدارية فقط، حتى عندما تستطيع تلك الجلسات استخدام
operator.pairing بخلاف ذلك.
بالنسبة إلى جلسات رموز الأجهزة المقترنة، تقتصر الإدارة على الذات ما لم يكن المستدعي
يحمل operator.admin: لا يرى المستدعي غير الإداري إلا إدخالات الإقران الخاصة به،
ولا يمكنه الموافقة أو الرفض أو التدوير أو الإبطال أو الإزالة إلا لإدخال جهازه.
موافقات إقران Node
تستخدم أساليب node.pair.* القديمة مخزن إقران Node منفصلاً تملكه Gateway.
أما عُقد WS فتستخدم إقران الأجهزة (role: node) بدلاً منه، لكن مفردات الموافقة
نفسها تنطبق. راجع إقران Gateway لمعرفة العلاقة بين
المخزنين.
يشتق node.pair.approve نطاقات مطلوبة إضافية من قائمة أوامر
الطلب المعلّق:
| الأوامر المعلنة | النطاقات المطلوبة |
|---|---|
| لا شيء | operator.pairing |
| أوامر Node العادية | operator.pairing + operator.write |
system.run أو system.run.prepare أو system.which أو browser.proxy أو fs.listDir أو system.execApprovals.get/set |
operator.pairing + operator.admin |
لا تؤدي الموافقة على إعلان Node إلى تمكين الأوامر التي لها بوابة
قائمة سماح منفصلة وقت التشغيل. على سبيل المثال، تتطلب الموافقة على Node تعلن
computer.act الإقران ونطاق الكتابة، لكنها لا تسجل سوى السطح.
ويجب على مسؤول أو مالك أن يفعّل computer.act مع ذلك. وما دامت
مفعّلة، فإن استدعاءها عبر الأسلوب node.invoke ذي نطاق الكتابة لا
يتطلب نطاقاً إدارياً لكل إجراء.
يؤسس إقران Node الهوية والثقة؛ لكنه لا يحل محل سياسة موافقة التنفيذ
system.run الخاصة بـ Node.
مصادقة السر المشترك
تُعامل مصادقة رمز/كلمة مرور Gateway المشتركة بوصفها وصول مشغّل موثوقاً
إلى Gateway تلك. وتستعيد أسطح HTTP المتوافقة مع OpenAI و/tools/invoke
ونقاط نهاية سجل الجلسات عبر HTTP مجموعة نطاقات المشغّل الافتراضية الكاملة
لمصادقة حامل السر المشترك، حتى إذا أرسل المستدعي نطاقات معلنة أضيق.
لا يزال بإمكان الأوضاع الحاملة للهوية، مثل مصادقة الوكيل الموثوق أو none للدخول الخاص،
احترام النطاقات المعلنة الصريحة. استخدم Gateways منفصلة لتحقيق فصل فعلي
لحدود الثقة.