macOS companion app

IPC في macOS

بنية IPC في macOS الخاصة بـ OpenClaw

النموذج الحالي: يربط Unix socket محلي خدمة node host بـ تطبيق macOS من أجل موافقات exec + system.run. وتوجد أداة CLI للتصحيح باسم openclaw-mac من أجل فحوصات الاكتشاف/الاتصال؛ لكن إجراءات الوكيل لا تزال تتدفق عبر Gateway WebSocket وnode.invoke. وتستخدم أتمتة واجهة المستخدم PeekabooBridge.

الأهداف

  • نسخة واحدة من تطبيق GUI تملك جميع الأعمال المواجهة لـ TCC ‏(الإشعارات، وتسجيل الشاشة، والميكروفون، والكلام، وAppleScript).
  • سطح صغير للأتمتة: Gateway + أوامر node، بالإضافة إلى PeekabooBridge لأتمتة واجهة المستخدم.
  • أذونات قابلة للتنبؤ: المعرّف نفسه للحزمة الموقّعة دائمًا، ويتم تشغيله بواسطة launchd، بحيث تبقى منح TCC ثابتة.

كيف يعمل

نقل Gateway + node

  • يشغّل التطبيق Gateway ‏(الوضع المحلي) ويتصل بها باعتباره node.
  • تُنفَّذ إجراءات الوكيل عبر node.invoke ‏(مثل system.run وsystem.notify وcanvas.*).

خدمة Node + IPC الخاصة بالتطبيق

  • تتصل خدمة node host بلا واجهة بـ Gateway WebSocket.
  • تُعاد توجيه طلبات system.run إلى تطبيق macOS عبر Unix socket محلي.
  • ينفّذ التطبيق الأمر في سياق واجهة المستخدم، ويطلب الموافقة إذا لزم الأمر، ويعيد المخرجات.

مخطط (SCI):

Agent -> Gateway -> Node Service (WS)
                      |  IPC (UDS + token + HMAC + TTL)
                      v
                  Mac App (UI + TCC + system.run)

PeekabooBridge ‏(أتمتة واجهة المستخدم)

  • تستخدم أتمتة واجهة المستخدم UNIX socket منفصلة باسم bridge.sock وبروتوكول JSON الخاص بـ PeekabooBridge.
  • ترتيب تفضيل المضيف (من جهة العميل): ‏Peekaboo.app → Claude.app → OpenClaw.app → التنفيذ المحلي.
  • الأمان: تتطلب مضيفات الجسر TeamID مسموحًا به؛ ويكون مسار الهروب same-UID في وضع DEBUG فقط محميًا بواسطة PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1 ‏(وفق اصطلاح Peekaboo).
  • راجع: استخدام PeekabooBridge للتفاصيل.

التدفقات التشغيلية

  • إعادة التشغيل/إعادة البناء: SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh
    • يقتل النسخ الموجودة
    • بناء Swift + الحزمة
    • يكتب LaunchAgent ويهيئها ويعيد تشغيلها
  • نسخة واحدة: يخرج التطبيق مبكرًا إذا كانت نسخة أخرى تحمل معرّف الحزمة نفسه قيد التشغيل.

ملاحظات التقوية

  • يُفضّل طلب تطابق TeamID لجميع الأسطح ذات الامتيازات.
  • PeekabooBridge: قد تسمح PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1 ‏(في وضع DEBUG فقط) للمتصلين من same-UID من أجل التطوير المحلي.
  • تبقى جميع الاتصالات محلية فقط؛ ولا يتم كشف أي network sockets.
  • تصدر مطالبات TCC من حزمة تطبيق GUI فقط؛ أبقِ معرّف الحزمة الموقّعة ثابتًا عبر عمليات إعادة البناء.
  • تقوية IPC: نمط socket ‏0600، ورمز، وفحوصات peer-UID، وتحدي/استجابة HMAC، وTTL قصيرة.

ذو صلة