macOS companion app
แถบเมนู
สิ่งที่แสดง
- สถานะการทำงานปัจจุบันของเอเจนต์จะแสดงในไอคอนแถบเมนูและในแถวสถานะแรกของเมนู
- สถานะความพร้อมใช้งานจะถูกซ่อนขณะมีงานกำลังดำเนินอยู่ และจะแสดงอีกครั้งเมื่อเซสชันทั้งหมดไม่มีการใช้งาน
- รายการ "บริบท" ที่ระดับรากจะเปิดเมนูย่อยซึ่งมีเซสชันล่าสุด แทนที่จะขยายรายการเหล่านั้นในเมนูระดับราก
- บล็อก "โหนด" ในเมนูระดับรากจะแสดงเฉพาะ อุปกรณ์ ที่จับคู่แล้ว (จาก
node.list) ไม่ใช่รายการไคลเอ็นต์/การแสดงตน - ส่วน "การใช้งาน" ที่ระดับรากจะปรากฏใต้บริบทเมื่อมีสแนปช็อตการใช้งานของผู้ให้บริการ และตามด้วยรายละเอียดค่าใช้จ่ายเมื่อมีข้อมูล
- แชตด่วน จะเปิดช่องเขียนข้อความแบบลอยสำหรับเซสชันหลัก โดยทางลัดส่วนกลางปัจจุบันจะแสดงข้างรายการ
โมเดลสถานะ
- แหล่งที่มา:
WorkActivityStore(apps/macos/Sources/OpenClaw/WorkActivityStore.swift) - เหตุการณ์จะเข้ามาในรูปแบบ
ControlAgentEventพร้อมrunId; ตัวจัดการ (ControlChannel.routeWorkActivity) จะอ่านsessionKeyจากเพย์โหลดของเหตุการณ์ และใช้ค่าเริ่มต้นเป็น"main"หากไม่มีค่า - ลำดับความสำคัญ: เซสชันหลัก (ค่าเริ่มต้นคือ
sessionKey == "main") มีสิทธิ์เหนือกว่าเสมอ หากเซสชันหลักทำงานอยู่ สถานะของเซสชันนั้นจะแสดงทันที หากเซสชันหลักไม่มีการใช้งาน ระบบจะแสดงเซสชันอื่นที่ใช้งานล่าสุดแทน สโตร์จะไม่สลับระหว่างที่กิจกรรมกำลังดำเนินอยู่ โดยจะสลับเฉพาะเมื่อเซสชันปัจจุบันไม่มีการใช้งานหรือเซสชันหลักเริ่มทำงาน - ประเภทกิจกรรม:
job: การดำเนินการคำสั่งระดับสูง (state: started|streaming|done|error|...)tool:phase: start|resultพร้อมnameและmeta/argsที่ไม่บังคับ
enum IconState (Swift)
idleworkingMain(ActivityKind)workingOther(ActivityKind)overridden(ActivityKind)(การแทนที่สำหรับดีบัก)
ActivityKind -> สัญลักษณ์ป้าย
ActivityKind ครอบ ToolKind (bash, read, write, edit, attach, other) หรือ job แบบเดี่ยว แต่ละค่าจะแมปกับป้าย SF Symbol ที่วาดทับไอคอนตัวสัตว์ (IconState.badgeSymbolName):
| ประเภท | สัญลักษณ์ |
|---|---|
bash |
chevron.left.slash.chevron.right |
read |
doc |
write |
pencil |
edit |
pencil.tip |
attach |
paperclip |
other / job |
gearshape.fill |
การแมปภาพ
idle: ตัวสัตว์ตามปกติ ไม่มีป้ายworkingMain: ป้ายพร้อมสัญลักษณ์ ใช้สีเต็ม (.primaryprominence) และแอนิเมชันขาแบบ "กำลังทำงาน"workingOther: ป้ายพร้อมสัญลักษณ์ ใช้สีหม่น (.secondaryprominence) และไม่มีการเคลื่อนไหวลุกลี้ลุกลนoverridden: ใช้สัญลักษณ์/สีที่เลือกโดยไม่คำนึงถึงกิจกรรมจริง
เมนูย่อยบริบท
- เมนูระดับรากจะแสดงแถว "บริบท" หนึ่งแถวพร้อมจำนวน/สถานะเซสชัน และจะเปิดเมนูย่อย (
MenuSessionsInjector) - ส่วนหัวของเมนูย่อยจะแสดงจำนวนเซสชันที่ใช้งานในช่วง 24 ชั่วโมงที่ผ่านมา
- แต่ละแถวของเซสชันจะยังคงมีแถบโทเค็น อายุ ตัวอย่างเนื้อหา ตัวสลับการคิด/รายละเอียด การรีเซ็ต การย่อ และการดำเนินการลบ
- ข้อความการโหลด การตัดการเชื่อมต่อ และข้อผิดพลาดในการโหลดเซสชันจะแสดงภายในเมนูย่อยบริบท
- ส่วนการใช้งานและค่าใช้จ่ายจะยังคงอยู่ที่ระดับรากใต้บริบท เพื่อให้ดูข้อมูลได้อย่างรวดเร็วโดยไม่ต้องเปิดเมนูย่อย
ข้อความแถวสถานะ (เมนู)
- ขณะมีงานกำลังดำเนินอยู่:
<Session role> · <activity label>("\(roleLabel) · \(activity.label)"ในMenuContentView) โดยป้ายบทบาทคือMainหรือOther - เมื่อไม่มีการใช้งาน: จะย้อนกลับไปแสดงสรุปความพร้อมใช้งาน
การรับเหตุการณ์
- แหล่งที่มา: เหตุการณ์
agentของช่องทางควบคุม ซึ่งกำหนดเส้นทางโดยControlChannel.routeWorkActivity(from:) - ฟิลด์ที่แยกวิเคราะห์:
stream: "job"พร้อมdata.stateสำหรับเริ่ม/หยุดstream: "tool"พร้อมdata.phase,data.nameและdata.meta/data.argsที่ไม่บังคับ
- ป้ายเครื่องมือมาจาก
ToolDisplayRegistry.resolve(name:args:meta:); ชื่อที่ไม่สามารถระบุได้จะย้อนกลับไปใช้ชื่อเครื่องมือดิบ
การแทนที่สำหรับดีบัก
- การตั้งค่า > ดีบัก > ตัวเลือก "การแทนที่ไอคอน":
System (auto)(ค่าเริ่มต้น)Working: main/Working: other(ตามประเภทเครื่องมือ: bash, read, write, edit, other)Idle
- จัดเก็บภายใต้คีย์
openclaw.iconOverrideของUserDefaults; แมปไปยังIconState.overridden
รายการตรวจสอบการทดสอบ
- เรียกใช้งานเซสชันหลัก: ไอคอนจะสลับทันทีและแถวสถานะจะแสดงป้ายเซสชันหลัก
- เรียกใช้งานเซสชันอื่นขณะที่เซสชันหลักไม่มีการใช้งาน: ไอคอน/สถานะจะแสดงเซสชันอื่น และจะคงที่จนกว่าเซสชันนั้นจะเสร็จสิ้น
- เริ่มเซสชันหลักขณะที่อีกเซสชันหนึ่งกำลังทำงาน: ไอคอนจะสลับไปยังเซสชันหลักทันที
- การเรียกใช้เครื่องมืออย่างรวดเร็วต่อเนื่อง: ป้ายจะไม่กะพริบ (ช่วงผ่อนผัน 2 วินาทีก่อนล้างเครื่องมือที่ทำงานเสร็จแล้ว,
WorkActivityStore.toolResultGrace) - แถวความพร้อมใช้งานจะปรากฏอีกครั้งเมื่อเซสชันทั้งหมดไม่มีการใช้งาน
ที่เกี่ยวข้อง
Was this useful?