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 استفاده میکنند.
اهداف
- یک نمونه واحد از برنامه GUI که مالک تمام کارهای مرتبط با 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):
عامل -> Gateway -> سرویس Node (WS) | IPC (UDS + توکن + HMAC + TTL) v برنامه Mac (رابط کاربری + TCC + system.run)PeekabooBridge (خودکارسازی رابط کاربری)
- ابزار داخلی
computerعامل از این سوکت استفاده نمیکند. یک Node جفتشده macOS، درخواستcomputer.actرا در فرایند برنامه با سرویسهای تعبیهشده Peekaboo برآورده میکند. - خودکارسازی رابط کاربری از یک سوکت UNIX جداگانه (
~/Library/Application Support/OpenClaw/<socket>) و پروتکل JSON مربوط به PeekabooBridge استفاده میکند. - ترتیب ترجیح میزبان (سمت کلاینت): Peekaboo.app -> Claude.app -> OpenClaw.app -> اجرای محلی.
- امنیت: میزبانهای پل به TeamID موجود در فهرست مجاز نیاز دارند (
PeekabooBridgeHostCoordinatorهمراه برنامه، یک تیم ثابت بهعلاوه تیم امضاکننده خود برنامه را در فهرست مجاز قرار میدهد)؛ یک راه گریز با UID یکسان و مختص DEBUG، توسط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 فقط از بسته برنامه GUI منشأ میگیرند؛ شناسه بسته امضاشده را در ساختهای مجدد ثابت نگه دارید.
- مقاومسازی سوکت تأییدیههای اجرا: حالت فایل
0600، توکن مشترک، بررسی UID همتا (getpeereid)، چالش/پاسخ HMAC-SHA256 و یک TTL کوتاه برای درخواستها.
مرتبط
Was this useful?