macOS companion app

WebChat (macOS)

แอปแถบเมนู macOS ฝัง UI ของ WebChat เป็นมุมมอง SwiftUI แบบเนทีฟ โดยเชื่อมต่อกับ Gateway และใช้เซสชันหลักของเอเจนต์ที่เลือกเป็นค่าเริ่มต้น (main หรือ global เมื่อ session.scope เป็น global)

หน้าต่างแชตแบบเต็มเป็นมุมมองแยกแบบเนทีฟ:

  • แถบด้านข้างเซสชัน: รายการเซสชันที่ค้นหาได้ พร้อมส่วนที่ปักหมุด กลุ่มที่รองรับโดย Gateway และล่าสุด เซสชันลูกที่สร้างขึ้นจะซ้อนอยู่ใต้เซสชันแม่ในแต่ละส่วน ส่วนเซสชันแม่ที่ยุบอยู่จะแสดงสรุปเซสชันสืบทอดที่กำลังทำงาน ล้มเหลว และยังไม่ได้อ่าน เมนูบริบทรองรับข้อมูลเซสชัน การเปลี่ยนชื่อ การปักหมุด การแยกแขนง การทำเครื่องหมายว่าอ่านแล้ว/ยังไม่ได้อ่าน การเก็บถาวร/กู้คืน การคัดลอกคีย์เซสชัน และการลบ การดำเนินการหลักสำหรับสร้างเซสชันใหม่ (หรือ Shift-Cmd-N) จะสร้างทันทีผ่าน sessions.create ส่วนป๊อปโอเวอร์ตัวเลือกที่อยู่ติดกันใช้เลือกเอเจนต์และขอเวิร์กทรีที่มีการจัดการ โดยระบุ ref ฐานเพิ่มเติมได้
  • แถบเครื่องมือหน้าต่าง: วงแหวนการใช้บริบท (โทเค็นและค่าใช้จ่ายของเซสชัน พร้อมการดำเนินการแบบกะทัดรัด) ตัวควบคุมโมเดล และเมนูการดำเนินการของเซสชัน โมเดลจะจัดกลุ่มตามผู้ให้บริการ โดยให้ผู้ให้บริการเริ่มต้นอยู่ก่อน ส่วนโมเดลที่ปักหมุดและใช้ล่าสุดจะยังคงอยู่ด้านบน ตัวควบคุมสามารถรับช่วงหรือแทนที่ระดับการคิดของโมเดล เลือกระดับความละเอียดของการเรียกใช้เครื่องมือ และสลับการตอบกลับแบบเร็ว เมนูสามารถเปลี่ยนชื่อหรือแยกแขนงเซสชันปัจจุบัน และอัปเดตสถานะการปักหมุด การอ่าน หรือการเก็บถาวร เซสชัน… (Shift-Cmd-S) เปิดตัวจัดการใช้งานอยู่/เก็บถาวรสำหรับการค้นหาผ่าน Gateway การจัดการกลุ่ม การตรวจสอบเซสชัน การเปลี่ยนชื่อ การปักหมุด การเก็บถาวร และการกู้คืน โหมดเลือกใช้การปักหมุด เลิกปักหมุด เก็บถาวร หรือลบกับเซสชันที่ใช้งานอยู่หลายรายการ โดยยังคงแสดงความล้มเหลวของแต่ละรายการ เครื่องหมายถูกในเมนูแยกกันใช้แสดงหรือซ่อนกระบวนการให้เหตุผลของผู้ช่วยและกิจกรรมของเครื่องมือ ทั้งสองเปิดอยู่ตามค่าเริ่มต้นและระบบจดจำค่าข้ามการเปิดแอป
  • บทสนทนาและช่องเขียนข้อความ: ข้อความของผู้ช่วยแสดงเป็นข้อความธรรมดาพร้อมอวาตาร์ ส่วนข้อความของผู้ใช้แสดงเป็นบับเบิลสีเน้น คำถามของเอเจนต์ที่รอดำเนินการจะแสดงเป็นการ์ดแบบเนทีฟ พร้อมตัวเลือกแบบเลือกหนึ่งหรือหลายรายการ คำตอบแบบข้อความอิสระ อื่นๆ การนับถอยหลังจนหมดอายุ และสถานะปลายทางร่วม แชตว่างจะแสดงข้อความเริ่มต้นสำหรับเดสก์ท็อป การพิมพ์ / จะเปิดการเติมคำสั่งแบบสแลชอัตโนมัติที่รองรับโดย commands.list พร้อมการนำทางด้วยแป้นลูกศร/Tab/Return/Escape คลิกขวาที่ข้อความเพื่อคัดลอก Markdown ที่มองเห็นได้โดยไม่รวมกระบวนการให้เหตุผลที่ซ่อนอยู่ ข้อความผู้ช่วยที่ถูกตัดทอนยังมี เปิดข้อความฉบับเต็ม ซึ่งจะโหลดโปรแกรมอ่าน Markdown ที่เลือกข้อความได้ ใช้ ฟัง สำหรับ TTS ผ่าน Gateway พร้อมระบบสังเคราะห์เสียงในเครื่องเป็นทางเลือกสำรอง
  • ตัวควบคุมเสียง: ช่องเขียนข้อความสามารถเริ่มหรือหยุดโหมดสนทนาเดิมของ macOS ได้โดยไม่แทนที่โอเวอร์เลย์บนแถบเมนู ขณะที่โหมดสนทนาทำงาน ช่องเขียนข้อความจะแสดงสถานะกำลังฟัง/กำลังคิด/กำลังพูด กิจกรรมเสียงสด และบทถอดเสียงแบบเลื่อนต่อเนื่องที่ขยายได้ คลิกขวาที่ปุ่มสนทนาเพื่อเลือก System Default หรือไมโครโฟนที่เชื่อมต่ออยู่ โดยเป็นการเลือกไมโครโฟนเดียวกับที่ Voice Wake และการกดเพื่อพูดใช้ หากไมโครโฟนที่เลือกขาดการเชื่อมต่อ เซสชันสนทนาที่ทำงานอยู่จะเปลี่ยนไปใช้ค่าเริ่มต้นของระบบ และลองใช้ตัวเลือกนั้นอีกครั้งเมื่อเริ่มโหมดสนทนาครั้งถัดไป การดำเนินการไมโครโฟนแยกต่างหากจะบันทึกโน้ตเสียงเมื่อโหมดสนทนาไม่ได้ครอบครองการบันทึกเสียง

แผงแชตแบบกะทัดรัดที่ยึดกับแถบเมนูยังคงใช้เค้าโครงคอลัมน์เดียวแบบกะทัดรัด โดยมีตัวควบคุมโมเดล การคิด ความละเอียด และแบบเร็วอยู่ในบรรทัดเดียวกัน รวมถึงข้อความเริ่มต้น โหมดสนทนา โน้ตเสียง และฟังก์ชันฟัง กระบวนการให้เหตุผลของผู้ช่วยและกิจกรรมของเครื่องมือจะยังคงซ่อนอยู่ในพื้นที่แบบกะทัดรัดนี้

หน้าต่าง Gateway หลายหน้าต่าง

เปิด Settings → Gateways เพื่อเพิ่มหรือลบโปรไฟล์ Gateway ที่นำกลับมาใช้ใหม่ได้ แต่ละ โปรไฟล์ประกอบด้วยปลายทาง ws:// หรือ wss:// และโทเค็นหรือ รหัสผ่านที่ระบุเพิ่มเติมได้ ข้อมูลรับรองจะจัดเก็บไว้ในพวงกุญแจ macOS การลบโปรไฟล์ จะปิดหน้าต่างที่เปิดอยู่ของโปรไฟล์นั้นและยุติการเชื่อมต่อรองด้วย

เลือก File → New Gateway Window… หรือกด Cmd-N จากนั้นเลือกหนึ่งใน โปรไฟล์ที่บันทึกไว้ ตัวเลือกจะจดจำโปรไฟล์ที่ใช้ล่าสุด การเลือกแต่ละครั้ง จะสร้างหน้าต่างอิสระใหม่ ดังนั้น Gateway เดียวกันจึงสามารถปรากฏใน หลายหน้าต่างที่มีเซสชันที่ใช้งานอยู่และสถานะการนำทางต่างกันได้

แต่ละโปรไฟล์ที่บันทึกไว้จะเป็นเจ้าของการเชื่อมต่อ Gateway ร่วมหนึ่งรายการ ขอบเขตการยืนยันตัวตนของอุปกรณ์ แคชบทสนทนา กล่องขาออกแบบออฟไลน์ และสิทธิ์เช่าเส้นทาง หน้าต่างสำหรับโปรไฟล์นั้น จะใช้ทรัพยากรเหล่านี้ร่วมกัน แต่ยังสามารถนำทางได้อย่างอิสระ หน้าต่างสำหรับ โปรไฟล์ต่างกันจะยังคงเชื่อมต่อและเรียกใช้แชตพร้อมกัน

Gateway ที่กำหนดค่าไว้ของแอปแถบเมนูยังคงเป็นเจ้าของความสามารถของ Node บน Mac และโหมดสนทนา หน้าต่าง Gateway เพิ่มเติมมีไว้สำหรับผู้ปฏิบัติงานเท่านั้น ดังนั้น Gateway ที่สองจึงไม่สามารถเปลี่ยนเป้าหมายไมโครโฟนส่วนกลางหรือตัวควบคุมอุปกรณ์ โดยไม่แจ้งให้ทราบ ฟังก์ชันฟัง/TTS และการดำเนินการแชตทั่วไปใช้การเชื่อมต่อ Gateway ของหน้าต่างเอง

แถบแชตด่วน

กด Option-Space (⌥Space) หรือเลือก แชตด่วน จากเมนูแถบเมนูเพื่อเปิดช่องเขียนข้อความแบบลอยสำหรับเซสชันหลัก เปลี่ยนแป้นพิมพ์ลัดส่วนกลางด้วยตัวบันทึกใน การตั้งค่า → ทั่วไป → แป้นพิมพ์ลัดแชตด่วน

แชตด่วนจะแสดงเอเจนต์เป้าหมาย (อวาตาร์หรืออีโมจิ โดยใช้ชื่อเอเจนต์เป็นข้อความตัวอย่าง) และส่งไปยังเซสชันหลักของเอเจนต์นั้น หลังจาก Return ยอมรับการส่ง แถบจะยังคงเปิดอยู่และขยายลงด้านล่างพร้อมการตอบกลับ Markdown แบบสตรีมและบทสนทนาล่าสุด ช่องป้อนข้อมูลของแถบยังคงเป็นช่องเขียนข้อความ กด Command-Return เพื่อส่งและเปิดเป้าหมายเดียวกันในหน้าต่างแชตแบบเต็ม กด Shift-Return เพื่อขึ้นบรรทัดใหม่ หรือ Escape เพื่อปิดทั้งแถบและพื้นที่ตอบกลับ การคลิกภายนอกจะปิดเช่นกัน เมื่อไม่มีสิทธิ์ macOS ที่เกี่ยวข้อง แถบที่แนบมาจะเสนอการดำเนินการ อนุญาต และ ไว้ภายหลัง

ใช้ปุ่มไมโครโฟนเพื่อป้อนข้อความด้วยเสียงในช่องเขียนข้อความ ผลลัพธ์เสียงพูดบางส่วนจะแทนที่ช่วงข้อความที่ป้อนด้วยเสียงแบบสด โดยรักษาข้อความที่มีอยู่ในช่องเขียนข้อความไว้ กดปุ่มอีกครั้ง กด Return หรือ Escape เพื่อหยุด การส่ง การซ่อน หรือการเลิกโฟกัสแชตด่วนจะปล่อยไมโครโฟนด้วย การใช้งานครั้งแรกจะขอสิทธิ์เข้าถึงไมโครโฟนและการรู้จำเสียงพูดของ macOS แชตด่วนใช้ Apple Speech และอาจใช้บริการเครือข่ายของ Apple เฉพาะ Voice Wake แบบพาสซีฟเท่านั้นที่ต้องใช้การรู้จำบนอุปกรณ์

ตัวควบคุมโมเดลแบบกะทัดรัดจะแสดงโมเดลและระดับการให้เหตุผลปัจจุบันของเซสชันเป้าหมาย การเลือกโมเดลจะอัปเดตเซสชันนั้นและจึงคงอยู่ในเซสชัน ส่วนการเลือกระดับการให้เหตุผลจะใช้เฉพาะกับแต่ละข้อความที่ส่งจากการแสดงแชตด่วนปัจจุบัน ตัวเลือกในเครื่องจะรีเซ็ตเมื่อซ่อนแถบ การสลับเอเจนต์หรือเลือกเซสชันล่าสุดจะคงตัวเลือกที่กำหนดไว้อย่างชัดเจน แต่จะโหลดสถานะโมเดลพื้นฐานของเซสชันเป้าหมายใหม่

คลิกปุ่มประวัติเพื่อเลือกจากห้าเซสชันที่อัปเดตล่าสุด หรือกลับไปที่ ข้อความใหม่ถึง <agent> การเลือกรายการล่าสุดจะส่งไปยังเซสชันนั้นโดยตรง และเปลี่ยนข้อความตัวอย่างเป็น ตอบกลับใน <session> การซ่อนแชตด่วนจะรีเซ็ตเป้าหมายชั่วคราวนี้เป็นเซสชันหลักของเอเจนต์ที่เลือก การสลับเอเจนต์จากเมนูอวาตาร์จะล้างเป้าหมายนี้ด้วย

Command-Return จะเปิดการสนทนาของเอเจนต์ที่ได้รับข้อความ รวมถึงเมื่อขอบเขตเซสชันเป็นแบบส่วนกลาง

ปุ่มกล้องจะเปิดเมนูสำหรับ จับภาพหน้าต่าง… หรือ จับภาพพื้นที่… การจับภาพหน้าต่างจะติดป้ายกำกับหน้าต่างที่มองเห็นได้ทุกหน้าต่าง การจับภาพพื้นที่จะทำให้แต่ละจอมืดลงขณะที่ลากเลือกบริเวณ และแสดงขนาดแบบสด ภาพหน้าจอที่เลือกจะถูกส่งไปยังเอเจนต์ที่เลือก โดยใช้ข้อความที่พิมพ์เป็นคำบรรยาย การใช้งานครั้งแรกจะขอสิทธิ์การบันทึกหน้าจอของ macOS การกด Escape การคลิกพื้นที่ว่าง หรือการคลิกโดยไม่ได้ลากเลือกพื้นที่อย่างมีนัยสำคัญจะยกเลิก

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

หลังจากการตอบกลับเสร็จสิ้น ให้เลือก วางใน <app> เพื่อคัดลอกข้อความผู้ช่วยที่มองเห็นได้ โดยไม่รวมกระบวนการให้เหตุผลที่ซ่อนอยู่ ไปยังคลิปบอร์ดทั่วไป แล้ววางลงในแอปที่อยู่ด้านหน้าสุด การดำเนินการนี้ต้องใช้สิทธิ์การช่วยการเข้าถึงของ macOS การดำเนินการจะแทนที่เนื้อหาปัจจุบันในคลิปบอร์ด แล้วซ่อนแชตด่วน

ปิดใช้งานคุณสมบัตินี้ทั้งหมดได้ด้วย การตั้งค่า → ทั่วไป → แชตด่วน ส่วนเดียวกันนี้มีตัวบันทึกแป้นพิมพ์ลัดด้วย

  • โหมดในเครื่อง: เชื่อมต่อโดยตรงกับ WebSocket ของ Gateway ในเครื่อง
  • โหมดระยะไกล: ส่งต่อพอร์ตควบคุมของ Gateway ผ่าน SSH และใช้อุโมงค์นั้นเป็นระนาบข้อมูล

การเปิดใช้และการดีบัก

  • ด้วยตนเอง: เมนู Lobster -> "เปิดแชต"

  • เปิดอัตโนมัติสำหรับการทดสอบ:

    bash
    dist/OpenClaw.app/Contents/MacOS/OpenClaw --chat

    (--webchat ยังรองรับเป็นนามแฝงแบบเดิม)

  • บันทึก: ./scripts/clawlog.sh (ระบบย่อย ai.openclaw, หมวดหมู่ WebChatSwiftUI)

การเชื่อมต่อภายใน

  • ระนาบข้อมูล: เมธอด WS ของ Gateway ได้แก่ chat.history, chat.message.get, chat.send, chat.abort, chat.inject รวมถึง question.list และ question.resolve และเหตุการณ์ chat, agent, presence, tick, health; การ์ดคำถามจะติดตามเหตุการณ์ question.requested และ question.resolved และรีเฟรชจาก question.list หลังเชื่อมต่อใหม่
  • chat.history ส่งคืนบทสนทนาที่ปรับให้เหมาะกับการแสดงผล: แท็กคำสั่งแบบอินไลน์จะถูกตัดออกจากข้อความที่มองเห็นได้ เพย์โหลด XML ของการเรียกใช้เครื่องมือแบบข้อความธรรมดา (<tool_call>, <function_call>, <tool_calls>, <function_calls> รวมถึงบล็อกที่ถูกตัดทอน) และโทเค็นควบคุมโมเดลที่รั่วไหลจะถูกตัดออก แถวผู้ช่วยที่มีเฉพาะโทเค็นเงียบ เช่น NO_REPLY/no_reply แบบตรงกันทุกประการจะถูกละเว้น และแถวที่มีขนาดใหญ่เกินไปอาจถูกแทนที่ด้วยข้อความตัวอย่างที่ถูกตัดทอน
  • เซสชัน: ใช้เซสชันหลักเป็นค่าเริ่มต้นตามที่กล่าวข้างต้น UI สามารถสลับระหว่างเซสชันได้
  • กลุ่มเซสชัน: sessions.groups.list, sessions.groups.put, sessions.groups.rename และ sessions.groups.delete เป็นเจ้าของแค็ตตาล็อกกลุ่ม การเป็นสมาชิกคือ category ของเซสชัน ซึ่งอัปเดตผ่าน sessions.patch
  • สถานะยังไม่ได้อ่าน: หลังจากเซสชันเปิดใช้งานและโหลดประวัติสดสำเร็จ แอปจะล้างเครื่องหมายยังไม่ได้อ่านของเซสชันนั้น การโหลดประวัติที่ล้มเหลวจะไม่ล้างเครื่องหมายนี้ ความล้มเหลวชั่วคราวในการใช้แพตช์จะลองใหม่เมื่อเปิดใช้งานครั้งถัดไป
  • การเริ่มต้นใช้งานใช้เซสชันเฉพาะเพื่อแยกการตั้งค่าครั้งแรกออกจากกัน
  • แคชออฟไลน์: แอปเก็บแคชแบบอ่านอย่างเดียวขนาดเล็กของเซสชันแชตและบทสนทนาล่าสุดแยกตาม Gateway (~/Library/Application Support/OpenClaw/chat-cache.sqlite): เมื่อเปิดแบบเริ่มต้นใหม่ ระบบจะแสดงบทสนทนาล่าสุดที่ทราบทันทีและรีเฟรชเมื่อ Gateway ตอบกลับ และยังสามารถเรียกดูแชตล่าสุดได้ขณะขาดการเชื่อมต่อ (การส่งจะยังคงปิดใช้งานจนกว่าการเชื่อมต่อจะกลับมา)

พื้นผิวด้านความปลอดภัย

  • โหมดระยะไกลส่งต่อเฉพาะพอร์ตควบคุม WebSocket ของ Gateway ผ่าน SSH

ข้อจำกัดที่ทราบ

  • UI ได้รับการปรับให้เหมาะกับเซสชันแชต ไม่ใช่แซนด์บ็อกซ์เบราว์เซอร์เต็มรูปแบบ

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

Was this useful?
On this page

On this page