Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Vòng đời lớp phủ thoại (macOS)
Đối tượng: người đóng góp cho ứng dụng macOS. Mục tiêu: giữ cho lớp phủ thoại có hành vi dự đoán được khi từ đánh thức và nhấn-để-nói chồng lấp.Ý định hiện tại
- Nếu lớp phủ đã hiển thị do từ đánh thức và người dùng nhấn phím tắt, phiên phím tắt sẽ tiếp nhận văn bản hiện có thay vì đặt lại văn bản đó. Lớp phủ vẫn hiển thị trong khi phím tắt được giữ. Khi người dùng nhả phím: gửi nếu có văn bản sau khi cắt khoảng trắng, nếu không thì đóng.
- Chỉ dùng từ đánh thức vẫn tự động gửi khi im lặng; nhấn-để-nói gửi ngay khi nhả phím.
Đã triển khai (ngày 9 tháng 12 năm 2025)
- Các phiên lớp phủ giờ mang một token cho mỗi lần thu âm (từ đánh thức hoặc nhấn-để-nói). Các cập nhật partial/final/send/dismiss/level bị bỏ qua khi token không khớp, tránh callback lỗi thời.
- Nhấn-để-nói tiếp nhận mọi văn bản lớp phủ đang hiển thị làm tiền tố (vì vậy nhấn phím tắt trong khi lớp phủ đánh thức đang mở sẽ giữ văn bản và nối thêm lời nói mới). Nó chờ tối đa 1,5 giây để có bản chép lời cuối cùng trước khi quay về văn bản hiện tại.
- Nhật ký chuông/lớp phủ được phát ở mức
infotrong các danh mụcvoicewake.overlay,voicewake.ptt, vàvoicewake.chime(bắt đầu phiên, partial, final, send, dismiss, lý do chuông).
Các bước tiếp theo
- VoiceSessionCoordinator (actor)
- Sở hữu đúng một
VoiceSessiontại một thời điểm. - API (dựa trên token):
beginWakeCapture,beginPushToTalk,updatePartial,endCapture,cancel,applyCooldown. - Bỏ qua các callback mang token lỗi thời (ngăn các bộ nhận dạng cũ mở lại lớp phủ).
- Sở hữu đúng một
- VoiceSession (model)
- Trường:
token,source(wakeWord|pushToTalk), văn bản đã xác nhận/tạm thời, cờ chuông, bộ hẹn giờ (tự động gửi, nhàn rỗi),overlayMode(display|editing|sending), hạn chót cooldown.
- Trường:
- Liên kết lớp phủ
VoiceSessionPublisher(ObservableObject) phản chiếu phiên đang hoạt động vào SwiftUI.VoiceWakeOverlayViewchỉ render qua publisher; nó không bao giờ trực tiếp thay đổi singleton toàn cục.- Hành động của người dùng trên lớp phủ (
sendNow,dismiss,edit) gọi ngược vào coordinator với token của phiên.
- Đường gửi thống nhất
- Khi
endCapture: nếu văn bản sau khi cắt khoảng trắng rỗng → đóng; nếu không thìperformSend(session:)(phát chuông gửi một lần, chuyển tiếp, đóng). - Nhấn-để-nói: không trì hoãn; từ đánh thức: có thể trì hoãn để tự động gửi.
- Áp dụng cooldown ngắn cho runtime đánh thức sau khi nhấn-để-nói kết thúc để từ đánh thức không kích hoạt lại ngay lập tức.
- Khi
- Ghi nhật ký
- Coordinator phát nhật ký
.infotrong subsystemai.openclaw, các danh mụcvoicewake.overlayvàvoicewake.chime. - Sự kiện chính:
session_started,adopted_by_push_to_talk,partial,finalized,send,dismiss,cancel,cooldown.
- Coordinator phát nhật ký
Danh sách kiểm tra gỡ lỗi
-
Truyền luồng nhật ký trong khi tái hiện lớp phủ bị kẹt:
- Xác minh chỉ có một token phiên đang hoạt động; các callback lỗi thời phải bị coordinator bỏ qua.
-
Đảm bảo việc nhả nhấn-để-nói luôn gọi
endCapturevới token đang hoạt động; nếu văn bản rỗng, kỳ vọngdismissmà không có chuông hoặc gửi.
Các bước di chuyển (đề xuất)
- Thêm
VoiceSessionCoordinator,VoiceSession, vàVoiceSessionPublisher. - Tái cấu trúc
VoiceWakeRuntimeđể tạo/cập nhật/kết thúc phiên thay vì chạm trực tiếp vàoVoiceWakeOverlayController. - Tái cấu trúc
VoicePushToTalkđể tiếp nhận các phiên hiện có và gọiendCapturekhi nhả phím; áp dụng cooldown runtime. - Nối
VoiceWakeOverlayControllervào publisher; xóa các lệnh gọi trực tiếp từ runtime/PTT. - Thêm kiểm thử tích hợp cho việc tiếp nhận phiên, cooldown, và đóng khi văn bản rỗng.