macOS companion app
IPC در macOS
معماری IPC در macOS برای OpenClaw
یک سوکت محلی Unix، سرویس میزبان Node را برای تأییدهای اجرا و system.run به برنامه macOS متصل میکند. یک CLI اشکالزدایی به نام openclaw-mac (apps/macos/Sources/OpenClawMacCLI) برای بررسیهای کشف/اتصال وجود دارد؛ کنشهای عامل همچنان از طریق WebSocket مربوط به Gateway و node.invoke جریان مییابند. مسیر مبتنی بر Node یعنی computer.act، خودکارسازی تعبیهشده Peekaboo را درون همان فرایند اجرا میکند؛ کلاینتهای مستقل Peekaboo از PeekabooBridge استفاده میکنند.
اهداف
- یک نمونه واحد از برنامه رابط گرافیکی که مالک همه کارهای مرتبط با TCC باشد (اعلانها، ضبط صفحه، میکروفون، گفتار، AppleScript).
- سطحی کوچک برای خودکارسازی: Gateway + فرمانهای Node، اجرای درونفرایندی
computer.act، بهعلاوه PeekabooBridge برای کلاینتهای مستقل خودکارسازی رابط کاربری. - مجوزهای قابلپیشبینی: همیشه همان شناسه بسته امضاشده که توسط launchd راهاندازی میشود، تا مجوزهای TCC پایدار بمانند.
نحوه کار
انتقال Gateway + Node
- برنامه Gateway را (در حالت محلی) اجرا میکند و بهعنوان یک Node به آن متصل میشود.
- کنشهای عامل از طریق
node.invokeانجام میشوند (برای نمونهsystem.run،system.notify،canvas.*). - فرمانهای Node شامل
canvas.*،camera.snap،camera.clip،screen.snapshot،screen.record،computer.act،system.runوsystem.notifyهستند. - Node یک نگاشت
permissionsگزارش میکند تا عاملها بتوانند ببینند آیا دسترسی به صفحه، دوربین، میکروفون، گفتار، خودکارسازی یا دسترسپذیری فراهم است یا نه.
سرویس Node + ارتباط IPC برنامه
- یک سرویس میزبان Node بدون رابط گرافیکی به WebSocket مربوط به Gateway متصل میشود.
- درخواستهای
system.runاز طریق یک سوکت محلی Unix (ExecApprovalsSocket.swift) به برنامه macOS هدایت میشوند. - برنامه اجرا را در زمینه رابط کاربری انجام میدهد، در صورت نیاز درخواست تأیید میکند و خروجی را بازمیگرداند.
نمودار (SCI):
Agent -> Gateway -> Node Service (WS) | IPC (UDS + token + HMAC + TTL) v Mac App (UI + TCC + system.run)PeekabooBridge (خودکارسازی رابط کاربری)
- ابزار داخلی
computerعامل از این سوکت استفاده نمیکند. یک Node جفتشده macOS، با سرویسهای تعبیهشده Peekaboo،computer.actرا در فرایند برنامه اجرا میکند. - خودکارسازی رابط کاربری از یک سوکت UNIX جداگانه (
~/Library/Application Support/OpenClaw/<socket>) و پروتکل JSON مربوط به PeekabooBridge استفاده میکند. - ترتیب ترجیح میزبان (در سمت کلاینت): Peekaboo.app -> Claude.app -> OpenClaw.app -> اجرای محلی.
- امنیت: میزبانهای پل به TeamID موجود در فهرست مجاز نیاز دارند (
PeekabooBridgeHostCoordinatorهمراه برنامه، یک تیم ثابت و همچنین تیم امضاکننده خود برنامه را در فهرست مجاز قرار میدهد)؛ یک راه گریز فقط مخصوص DEBUG برای UID یکسان، باPEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1محافظت میشود (قرارداد Peekaboo). - برای جزئیات، ببینید: کاربرد PeekabooBridge.
جریانهای عملیاتی
- راهاندازی مجدد/ساخت مجدد:
scripts/restart-mac.shنمونههای موجود را متوقف میکند، از طریق Swift دوباره میسازد، مجدداً بستهبندی میکند و دوباره راه میاندازد. این اسکریپت بهطور خودکار یک هویت امضای موجود را تشخیص میدهد و اگر هیچکدام پیدا نشود، به--no-signبازمیگردد؛ برای الزامیکردن امضا،--signرا ارسال کنید (اگر کلیدی موجود نباشد، ناموفق میشود) یا برای اجبار مسیر بدون امضا،--no-signرا ارسال کنید. در مسیر امضاشده، متغیر محیطیSIGN_IDENTITYحذف میشود تا سازوکار تشخیص خودکار هویت در خودscripts/codesign-mac-app.shگواهی را انتخاب کند. - نمونه واحد: برنامه
NSWorkspace.runningApplicationsرا برای یافتن شناسه بسته تکراری بررسی میکند و اگر بیش از یک نمونه پیدا شود، خارج میشود (isDuplicateInstance()درMenuBar.swift).
نکات مقاومسازی
- برای همه سطوح دارای دسترسی ویژه، ترجیحاً تطابق TeamID را الزامی کنید.
- PeekabooBridge: متغیر
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(فقط مخصوص DEBUG) ممکن است برای توسعه محلی به فراخوانهای دارای UID یکسان اجازه دسترسی دهد. - همه ارتباطات فقط محلی باقی میمانند؛ هیچ سوکت شبکهای در معرض دسترسی قرار نمیگیرد.
- درخواستهای TCC فقط از بسته برنامه رابط گرافیکی منشأ میگیرند؛ شناسه بسته امضاشده را در ساختهای مجدد ثابت نگه دارید.
- مقاومسازی سوکت تأییدهای اجرا: حالت فایل
0600، توکن مشترک، بررسی UID همتا (getpeereid)، چالش/پاسخ HMAC-SHA256 و TTL کوتاه برای درخواستها.
مرتبط
Was this useful?