Community translations by veiseule.ai — Help improve them on Crowdin
Skip to main content

ตรรกะสถานะแถบเมนู

สิ่งที่แสดง

  • เราแสดงสถานะการทำงานปัจจุบันของเอเจนต์ในไอคอนแถบเมนูและในแถวสถานะแรกของเมนู
  • สถานะสุขภาพจะถูกซ่อนไว้ขณะมีงานทำอยู่; จะกลับมาเมื่อทุกเซสชันว่าง
  • บล็อก “Nodes” ในเมนูจะแสดงเฉพาะ อุปกรณ์ เท่านั้น (โหนดที่จับคู่ผ่าน node.list) ไม่รวมรายการไคลเอนต์/การแสดงตน
  • ส่วน “Usage” จะปรากฏใต้ Context เมื่อมีสแน็ปช็อตการใช้งานของผู้ให้บริการ

โมเดลสถานะ

  • เซสชัน: อีเวนต์มาพร้อมกับ runId (ต่อการรัน) และ sessionKey ในเพย์โหลด เซสชัน “หลัก” คือคีย์ main; หากไม่มี จะใช้เซสชันที่อัปเดตล่าสุดแทน 19. เซสชัน “main” คือคีย์ main; หากไม่มี เราจะย้อนกลับไปใช้เซสชันที่มีการอัปเดตล่าสุด
    1. ลำดับความสำคัญ: main ชนะเสมอ 21. หาก main ทำงานอยู่ สถานะของมันจะแสดงทันที ลำดับความสำคัญ: เซสชันหลักชนะเสมอ หากเซสชันหลักกำลังทำงาน จะแสดงสถานะทันที หากเซสชันหลักว่าง จะแสดงเซสชันที่ไม่ใช่หลักซึ่งทำงานล่าสุด เราจะไม่สลับไปมาระหว่างกิจกรรม; จะสลับเฉพาะเมื่อเซสชันปัจจุบันว่างหรือเซสชันหลักเริ่มทำงาน 22. เราจะไม่สลับไปมาระหว่างกิจกรรม; เราจะสลับเฉพาะเมื่อเซสชันปัจจุบันว่างหรือ main เริ่มทำงาน
  • ประเภทกิจกรรม:
  • job: การรันคำสั่งระดับสูง (state: started|streaming|done|error).
  • tool: phase: start|result พร้อม toolName และ meta/args.

Enum IconState (Swift)

  • idle
  • workingMain(ActivityKind)
  • workingOther(ActivityKind)
  • overridden(ActivityKind) (ดีบัก override)

ActivityKind → ไอคอน

  • exec → 💻
  • read → 📄
  • write → ✍️
  • edit → 📝
  • attach → 📎
  • ค่าเริ่มต้น → 🛠️

23. การแมปเชิงภาพ

  • idle: ตัว critter ปกติ
  • workingMain: ป้ายพร้อมไอคอน สีเต็ม แอนิเมชันขา “ทำงาน”
  • workingOther: ป้ายพร้อมไอคอน สีหม่น ไม่มีการวิ่งวุ่น
  • overridden: ใช้ไอคอน/สีที่เลือกไว้โดยไม่คำนึงถึงกิจกรรม

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

  • ระหว่างที่มีงานทำ: <Session role> · <activity label>
  • ตัวอย่าง: Main · exec: pnpm test, Other · read: apps/macos/Sources/OpenClaw/AppState.swift.
  • เมื่อว่าง: จะย้อนกลับไปใช้สรุปสถานะสุขภาพ

การรับอีเวนต์

  • แหล่งที่มา: อีเวนต์จาก control‑channel agent (ControlChannel.handleAgentEvent).
  • ฟิลด์ที่แยกได้:
  • stream: "job" พร้อม data.state สำหรับเริ่ม/หยุด
  • stream: "tool" พร้อม data.phase, name, และตัวเลือก meta/args.
  • ป้ายกำกับ:
  • exec: บรรทัดแรกของ args.command.
  • read/write: พาธที่ย่อแล้ว
  • edit: พาธพร้อมชนิดการเปลี่ยนแปลงที่อนุมานจาก meta/จำนวน diff
  • ค่า fallback: ชื่อเครื่องมือ

การแทนที่เพื่อการดีบัก

  • การตั้งค่า ▸ Debug ▸ ตัวเลือก “Icon override”:
  • System (auto) (ค่าเริ่มต้น)
  • Working: main (ตามชนิดเครื่องมือ)
  • Working: other (ตามชนิดเครื่องมือ)
  • Idle
  • จัดเก็บผ่าน @AppStorage("iconOverride"); แม็ปไปยัง IconState.overridden.

เช็กลิสต์การทดสอบ

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