macOS companion app

วงจรชีวิตของ Gateway บน macOS

แอป macOS จัดการ Gateway ผ่าน launchd เป็นค่าเริ่มต้น และไม่สร้าง Gateway เป็นกระบวนการลูก ก่อนอื่นแอปจะพยายามแนบเข้ากับ Gateway ที่ทำงานอยู่แล้ว บนพอร์ตที่กำหนดค่าไว้ หากไม่สามารถเข้าถึงได้ แอปจะเปิดใช้งานบริการ launchd ผ่าน CLI openclaw ภายนอก (ไม่มีรันไทม์ฝังในตัว) วิธีนี้ช่วยให้เริ่มทำงาน อัตโนมัติได้อย่างเชื่อถือได้เมื่อเข้าสู่ระบบ และรีสตาร์ตเมื่อเกิดการขัดข้อง

โหมดกระบวนการลูก (Gateway ที่แอปสร้างขึ้นโดยตรง) ไม่ได้ใช้งาน ในปัจจุบัน หากคุณต้องการให้ผูกกับ UI แน่นขึ้น ให้รัน Gateway ด้วยตนเองในเทอร์มินัล

ลักษณะการทำงานเริ่มต้น (launchd)

  • แอปติดตั้ง LaunchAgent แบบต่อผู้ใช้ที่มีป้ายกำกับ ai.openclaw.gateway (หรือ ai.openclaw.<profile> เมื่อใช้ --profile/OPENCLAW_PROFILE; รองรับ com.openclaw.* แบบเดิม)
  • เมื่อเปิดใช้งานโหมดภายในเครื่อง แอปจะตรวจสอบให้แน่ใจว่า LaunchAgent ถูกโหลดแล้ว และ เริ่ม Gateway หากจำเป็น
  • บันทึกจะถูกเขียนไปยังเส้นทางบันทึก Gateway ของ launchd (ดูได้ในการตั้งค่าดีบัก)

คำสั่งทั่วไป:

launchctl kickstart -k gui/$UID/ai.openclaw.gateway
launchctl bootout gui/$UID/ai.openclaw.gateway

แทนที่ป้ายกำกับด้วย ai.openclaw.<profile> เมื่อรันโปรไฟล์ที่มีชื่อ

บิลด์สำหรับพัฒนาที่ไม่ได้ลงนาม

scripts/restart-mac.sh --no-sign ใช้สำหรับบิลด์ภายในเครื่องอย่างรวดเร็วเมื่อคุณไม่มี คีย์สำหรับลงนาม เพื่อป้องกันไม่ให้ launchd ชี้ไปยังไบนารี relay ที่ไม่ได้ลงนาม สคริปต์จะ:

  • เขียน ~/.openclaw/disable-launchagent

การรัน scripts/restart-mac.sh แบบลงนามจะล้างการแทนที่ค่านี้ หากมีมาร์กเกอร์อยู่ หากต้องการรีเซ็ตด้วยตนเอง:

rm ~/.openclaw/disable-launchagent

โหมดแนบเท่านั้น

หากต้องการบังคับให้แอป macOS ไม่ติดตั้งหรือจัดการ launchd เลย ให้เปิดแอปด้วย --attach-only (หรือ --no-launchd) ค่านี้จะตั้ง ~/.openclaw/disable-launchagent ดังนั้นแอปจะแนบเข้ากับ Gateway ที่ทำงานอยู่แล้วเท่านั้น คุณสามารถสลับลักษณะการทำงานเดียวกันนี้ ได้ในการตั้งค่าดีบัก

โหมดระยะไกล

โหมดระยะไกลจะไม่เริ่ม Gateway ภายในเครื่อง แอปใช้ทันเนล SSH ไปยัง โฮสต์ระยะไกลและเชื่อมต่อผ่านทันเนลนั้น

เหตุผลที่เราเลือกใช้ launchd

  • เริ่มทำงานอัตโนมัติเมื่อเข้าสู่ระบบ
  • มีความหมายเชิง restart/KeepAlive ในตัว
  • บันทึกและการกำกับดูแลที่คาดเดาได้

หากต้องการโหมดกระบวนการลูกจริงอีกครั้งในอนาคต ควรจัดทำเอกสารให้เป็น โหมดเฉพาะสำหรับนักพัฒนาแยกต่างหากและชัดเจน

ที่เกี่ยวข้อง