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)

  • idle
  • workingMain(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: ป้ายพร้อมสัญลักษณ์ ใช้สีเต็ม (.primary prominence) และแอนิเมชันขาแบบ "กำลังทำงาน"
  • workingOther: ป้ายพร้อมสัญลักษณ์ ใช้สีหม่น (.secondary prominence) และไม่มีการเคลื่อนไหวลุกลี้ลุกลน
  • overridden: ใช้สัญลักษณ์/สีที่เลือกโดยไม่คำนึงถึงกิจกรรมจริง

เมนูย่อยบริบท

  • เมนูระดับรากจะแสดงแถว "บริบท" หนึ่งแถวพร้อมจำนวน/สถานะเซสชัน และจะเปิดเมนูย่อย (MenuSessionsInjector)
  • ส่วนหัวของเมนูย่อยจะแสดงจำนวนเซสชันที่ใช้งานในช่วง 24 ชั่วโมงที่ผ่านมา
  • แต่ละแถวของเซสชันจะยังคงมีแถบโทเค็น อายุ ตัวอย่างเนื้อหา ตัวสลับการคิด/รายละเอียด การรีเซ็ต การย่อ และการดำเนินการลบ
  • ข้อความการโหลด การตัดการเชื่อมต่อ และข้อผิดพลาดในการโหลดเซสชันจะแสดงภายในเมนูย่อยบริบท
  • ส่วนการใช้งานและค่าใช้จ่ายจะยังคงอยู่ที่ระดับรากใต้บริบท เพื่อให้ดูข้อมูลได้อย่างรวดเร็วโดยไม่ต้องเปิดเมนูย่อย

ข้อความแถวสถานะ (เมนู)

  • ขณะมีงานกำลังดำเนินอยู่: &lt;Session role&gt; · <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?
On this page

On this page