Community translations by veiseule.ai — Help improve them on Crowdin
Skip to main content

สถาปัตยกรรมIPCบนmacOSของOpenClaw

โมเดลปัจจุบัน: ซ็อกเก็ตUnixภายในเครื่องเชื่อมต่อ บริการโฮสต์โหนด กับ แอปmacOS เพื่อการอนุมัติการรันคำสั่งและ system.run. มี openclaw-mac เป็น CLI ดีบักสำหรับการค้นหา/ตรวจสอบการเชื่อมต่อ; การกระทำของเอเจนต์ยังคงไหลผ่าน WebSocket ของGateway(เกตเวย์) และ node.invoke. การทำอัตโนมัติของUIใช้ PeekabooBridge

เป้าหมาย

  • แอปGUIเพียงอินสแตนซ์เดียวที่เป็นเจ้าของงานที่เกี่ยวข้องกับTCCทั้งหมด (การแจ้งเตือน การบันทึกหน้าจอ ไมโครโฟน การพูด AppleScript)
  • พื้นผิวสำหรับการทำอัตโนมัติที่เล็ก: Gateway(เกตเวย์) + คำสั่งโหนด และ PeekabooBridge สำหรับการทำอัตโนมัติของUI
  • สิทธิ์ที่คาดเดาได้: ใช้ bundle ID ที่ลงนามเดียวกันเสมอ เปิดโดย launchd เพื่อให้การอนุญาตของTCCคงอยู่

ทำงานอย่างไร

Gateway(เกตเวย์) + การขนส่งโหนด

  • แอปรัน Gateway(เกตเวย์) (โหมดภายในเครื่อง) และเชื่อมต่อเข้าหาในฐานะโหนด
  • การกระทำของเอเจนต์ดำเนินการผ่าน node.invoke (เช่น system.run, system.notify, canvas.*)

บริการโหนด + IPCของแอป

  • บริการโฮสต์โหนดแบบไม่มีหน้าจอเชื่อมต่อกับ WebSocket ของGateway(เกตเวย์)
  • คำขอ system.run ถูกส่งต่อไปยังแอปmacOSผ่านซ็อกเก็ตUnixภายในเครื่อง
  • แอปดำเนินการรันคำสั่งในบริบทของUI แจ้งเตือนหากจำเป็น และส่งคืนเอาต์พุต

แผนภาพ (SCI):

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

PeekabooBridge (การทำอัตโนมัติของUI)

  • การทำอัตโนมัติของUIใช้ซ็อกเก็ตUNIXแยกต่างหากชื่อ bridge.sock และโปรโตคอล JSON ของPeekabooBridge
  • ลำดับความชอบของโฮสต์ (ฝั่งไคลเอนต์): Peekaboo.app → Claude.app → OpenClaw.app → การรันภายในเครื่อง
  • ความปลอดภัย: โฮสต์ของบริดจ์ต้องมี TeamID ที่อยู่ในรายการอนุญาต; ช่องทางหลบหนี DEBUG-only แบบ same-UID ถูกคุ้มครองด้วย PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1 (ธรรมเนียมของPeekaboo)
  • ดู: การใช้งานPeekabooBridge สำหรับรายละเอียด

โฟลว์การปฏิบัติงาน

  • รีสตาร์ต/สร้างใหม่: SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh
  • ฆ่าอินสแตนซ์ที่มีอยู่
  • สร้างและแพ็กเกจด้วยSwift
  • เขียน/บูตสแตรป/คิกสตาร์ต LaunchAgent
  • อินสแตนซ์เดียว: แอปจะออกทันทีหากมีอินสแตนซ์อื่นที่มี bundle ID เดียวกันกำลังทำงาน

หมายเหตุการเสริมความแข็งแกร่ง

  • แนะนำให้บังคับการตรงกันของTeamIDสำหรับพื้นผิวที่มีสิทธิ์พิเศษทั้งหมด
  • PeekabooBridge: PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1 (DEBUG-only) อาจอนุญาตผู้เรียกแบบ same-UID สำหรับการพัฒนาในเครื่อง
  • การสื่อสารทั้งหมดคงอยู่เฉพาะภายในเครื่อง; ไม่มีการเปิดพอร์ตเครือข่าย
  • การแจ้งเตือนTCCเกิดจากบันเดิลแอปGUIเท่านั้น; รักษา bundle ID ที่ลงนามให้คงที่ข้ามการสร้างใหม่
  • การเสริมความแข็งแกร่งของIPC: โหมดซ็อกเก็ต 0600, โทเคน, การตรวจสอบ peer-UID, การท้าทาย/ตอบกลับด้วยHMAC, TTL สั้น