OpenClaw macOS IPC आर्किटेक्चर
एक स्थानीय Unix सॉकेट, exec अनुमोदनों औरsystem.run के लिए Node होस्ट सेवा को macOS ऐप से जोड़ता है। खोज/कनेक्शन जाँच के लिए एक openclaw-mac डीबग CLI (apps/macos/Sources/OpenClawMacCLI) उपलब्ध है; एजेंट क्रियाएँ अब भी Gateway WebSocket और node.invoke के माध्यम से प्रवाहित होती हैं। Node-समर्थित computer.act पथ, एम्बेडेड Peekaboo ऑटोमेशन को प्रक्रिया के भीतर चलाता है; स्वतंत्र Peekaboo क्लाइंट PeekabooBridge का उपयोग करते हैं।
लक्ष्य
- एकल GUI ऐप इंस्टेंस, जो TCC से संबंधित सभी कार्यों (सूचनाएँ, स्क्रीन रिकॉर्डिंग, माइक्रोफ़ोन, वाक्, AppleScript) का स्वामी होता है।
- ऑटोमेशन के लिए एक छोटा इंटरफ़ेस: Gateway + Node कमांड, प्रक्रिया के भीतर
computer.act, साथ ही स्वतंत्र UI ऑटोमेशन क्लाइंट के लिए PeekabooBridge। - पूर्वानुमेय अनुमतियाँ: हमेशा वही हस्ताक्षरित बंडल ID, जिसे 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 होस्ट सेवा Gateway WebSocket से जुड़ती है।
system.runअनुरोधों को एक स्थानीय Unix सॉकेट (ExecApprovalsSocket.swift) के माध्यम से macOS ऐप को अग्रेषित किया जाता है।- ऐप UI संदर्भ में exec करता है, आवश्यकता होने पर संकेत देता है और आउटपुट लौटाता है।
PeekabooBridge (UI ऑटोमेशन)
- अंतर्निहित एजेंट
computerटूल इस सॉकेट का उपयोग नहीं करता। युग्मित macOS Node, एम्बेडेड Peekaboo सेवाओं के साथ ऐप प्रक्रिया मेंcomputer.actको पूरा करता है। - UI ऑटोमेशन एक अलग UNIX सॉकेट (
~/Library/Application Support/OpenClaw/<socket>) और PeekabooBridge JSON प्रोटोकॉल का उपयोग करता है। - होस्ट वरीयता क्रम (क्लाइंट-साइड): 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की अपनी पहचान स्वतः-पहचान प्रमाणपत्र चुन सके। - एकल इंस्टेंस: ऐप डुप्लिकेट बंडल ID के लिए
NSWorkspace.runningApplicationsकी जाँच करता है और एक से अधिक इंस्टेंस मिलने पर बाहर निकल जाता है (MenuBar.swiftमेंisDuplicateInstance())।
सुदृढ़ीकरण संबंधी टिप्पणियाँ
- सभी विशेषाधिकार-प्राप्त इंटरफ़ेस के लिए TeamID मिलान अनिवार्य करना बेहतर है।
- PeekabooBridge:
PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1(केवल DEBUG) स्थानीय विकास के लिए समान-UID कॉलर को अनुमति दे सकता है। - सभी संचार केवल स्थानीय रहते हैं; कोई नेटवर्क सॉकेट उजागर नहीं किया जाता।
- TCC संकेत केवल GUI ऐप बंडल से उत्पन्न होते हैं; पुनर्निर्माणों में हस्ताक्षरित बंडल ID को स्थिर रखें।
- Exec अनुमोदन सॉकेट सुदृढ़ीकरण: फ़ाइल मोड
0600, साझा टोकन, पीयर-UID जाँच (getpeereid), HMAC-SHA256 चुनौती/प्रतिक्रिया और अनुरोधों पर छोटी TTL।