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 ได้รับการปรับให้เหมาะกับเซสชันแชต ไม่ใช่แซนด์บ็อกซ์เบราว์เซอร์เต็มรูปแบบ