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