Các Trạng Thái Icon Thanh Menu
Tác giả: steipete · Cập nhật: 06/12/2025 · Phạm vi: ứng dụng macOS (apps/macos)
- Idle (Nghỉ): Hiệu ứng icon bình thường (chớp mắt, thỉnh thoảng lắc lư).
- Paused (Tạm dừng): Status item dùng
appearsDisabled; không có chuyển động. - Voice trigger (tai to): Bộ phát hiện giọng nói gọi
AppState.triggerVoiceEars(ttl: nil)khi nghe thấy wake word, giữearBoostActive=truetrong khi đang thu âm. Tai phóng to (1.9x), có lỗ tai hình tròn để dễ nhìn, sau đó thu nhỏ lại quastopVoiceEars()sau 1 giây im lặng. Chỉ kích hoạt từ voice pipeline trong ứng dụng. - Working (agent đang chạy):
AppState.isWorking=truetạo hiệu ứng “đuôi/chân chạy rón rén”: chân lắc nhanh hơn và hơi lệch trong khi đang làm việc. Hiện tại được bật/tắt khi WebChat agent chạy; các bạn thêm toggle tương tự cho các tác vụ dài khác khi tích hợp nhé.
Điểm kết nối
- Voice wake: runtime/tester gọi
AppState.triggerVoiceEars(ttl: nil)khi kích hoạt vàstopVoiceEars()sau 1 giây im lặng để khớp với cửa sổ thu âm. - Hoạt động Agent: set
AppStateStore.shared.setWorking(true/false)xung quanh các khoảng thời gian làm việc (đã làm trong WebChat agent call). Giữ khoảng thời gian ngắn và reset trong các blockdeferđể tránh hiệu ứng bị kẹt.
Hình dạng & kích thước
- Icon cơ bản được vẽ trong
CritterIconRenderer.makeIcon(blink:legWiggle:earWiggle:earScale:earHoles:). - Ear scale mặc định là
1.0; voice boost setearScale=1.9và bậtearHoles=truemà không thay đổi khung tổng thể (template image 18×18 pt được render thành Retina backing store 36×36 px). - Scurry dùng leg wiggle lên đến ~1.0 với một chút jiggle ngang; nó cộng thêm vào idle wiggle hiện có.
Lưu ý hành vi
- Không có toggle CLI/broker bên ngoài cho ears/working; giữ nó nội bộ trong các tín hiệu của chính ứng dụng để tránh flapping không mong muốn.
- Giữ TTL ngắn (<10s) để icon quay về trạng thái cơ bản nhanh chóng nếu một job bị treo.