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:) หากไม่สามารถระบุชื่อได้ ระบบจะใช้ชื่อเครื่องมือดิบแทน

การแทนที่สำหรับการดีบัก

  • ตัวเลือก Settings > Debug > "Icon override":
    • System (auto) (ค่าเริ่มต้น)
    • Working: main / Working: other (แยกตามประเภทเครื่องมือ: bash, read, write, edit, other)
    • Idle
  • จัดเก็บภายใต้คีย์ UserDefaults ชื่อ openclaw.iconOverride และแมปกับ IconState.overridden

รายการตรวจสอบการทดสอบ

  • เรียกใช้งานงานของเซสชันหลัก: ไอคอนเปลี่ยนทันทีและแถวสถานะแสดงป้ายกำกับของเซสชันหลัก
  • เรียกใช้งานงานของเซสชันที่ไม่ใช่เซสชันหลักขณะที่เซสชันหลักไม่ได้ทำงาน: ไอคอน/สถานะแสดงเซสชันที่ไม่ใช่เซสชันหลัก และคงที่จนกว่างานจะเสร็จ
  • เริ่มเซสชันหลักขณะที่เซสชันอื่นกำลังทำงาน: ไอคอนเปลี่ยนเป็นเซสชันหลักทันที
  • การเรียกใช้เครื่องมือถี่ ๆ อย่างรวดเร็ว: ป้ายสถานะไม่กะพริบ (มีช่วงผ่อนผัน 2 วินาทีก่อนล้างเครื่องมือที่ทำงานเสร็จแล้ว WorkActivityStore.toolResultGrace)
  • แถวสถานภาพปรากฏขึ้นอีกครั้งเมื่อทุกเซสชันไม่ได้ทำงาน

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

Was this useful?
On this page

On this page