Voice Overlay¶
Voice Overlay Lifecycle (macOS) 1. Maqsad: uyg‘otuvchi so‘z va push-to-talk bir vaqtda ustma-ust kelganda ovoz overlay’ini bashoratli saqlash.
2. Joriy niyat¶
-
- Agar overlay uyg‘otuvchi so‘z orqali allaqachon ko‘rinib turgan bo‘lsa va foydalanuvchi hotkey’ni bossa, hotkey sessiyasi matnni qayta tiklash o‘rniga mavjud matnni o‘zlashtiradi. 4. Hotkey bosib turilgan paytda overlay ekranda qoladi. 5. Foydalanuvchi qo‘yib yuborganda: agar kesilgan (trimmed) matn bo‘lsa — yuboriladi, aks holda yopiladi.
- Faqat uyg‘otuvchi so‘z (wake-word) jimlikda hamon avtomatik yuboradi; push-to-talk esa qo‘yib yuborilganda darhol yuboradi.
7. Amalga oshirilgan (2025-yil 9-dekabr)¶
- Overlay sessions now carry a token per capture (wake-word or push-to-talk). 9. Token mos kelmasa, partial/final/send/dismiss/level yangilanishlari bekor qilinadi, bu eskirgan callback’lardan saqlaydi.
-
- Push-to-talk ko‘rinib turgan overlay matnini prefiks sifatida o‘zlashtiradi (ya’ni, uyg‘otuvchi overlay ochiq turganda hotkey bosilsa, matn saqlanadi va yangi nutq qo‘shiladi). 11. U yakuniy transkriptni kutish uchun 1.5 soniyagacha kutadi, so‘ngra joriy matnga qaytadi.
-
- Chime/overlay loglari
infodarajasidavoicewake.overlay,voicewake.pttvavoicewake.chimekategoriyalarida chiqariladi (sessiya boshlanishi, partial, final, send, dismiss, chime sababi).
- Chime/overlay loglari
13. Keyingi qadamlar¶
-
- VoiceSessionCoordinator (aktor)
- 15. Bir vaqtning o‘zida aniq bitta
VoiceSessionga egalik qiladi. - 16. API (token asosida):beginWakeCapture,beginPushToTalk,updatePartial,endCapture,cancel,applyCooldown. - 17. Eskirgan token olib kelgan callback’larni bekor qiladi (eski recognizer’larning overlay’ni qayta ochib yuborishining oldini oladi).
- VoiceSessionCoordinator (aktor)
- 15. Bir vaqtning o‘zida aniq bitta
- VoiceSession (model)
- 19. Maydonlar:
token,source(wakeWord|pushToTalk), tasdiqlangan/vaqtinchalik matn, chime flaglari, taymerlar (auto-send, idle),overlayMode(display|editing|sending), cooldown muddati. - Overlay bog‘lanishi
- 21.
VoiceSessionPublisher(ObservableObject) faol sessiyani SwiftUI’ga aks ettiradi. - 22.VoiceWakeOverlayViewfaqat publisher orqali render qiladi; u hech qachon global singleton’larni bevosita o‘zgartirmaydi. - 23. Overlay foydalanuvchi amallari (sendNow,dismiss,edit) sessiya tokeni bilan coordinator’ga qayta chaqiriq qiladi. -
- Yagona yuborish yo‘li
- 25.
endCaptureda: agar kesilgan matn bo‘sh bo‘lsa → dismiss; aks holdaperformSend(session:)(send chime’ni bir marta chaladi, yo‘naltiradi, yopadi). - 26. Push-to-talk: kechikishsiz; uyg‘otuvchi so‘z: auto-send uchun ixtiyoriy kechikish. - 27. Push-to-talk tugagach, uyg‘otuvchi so‘z darhol qayta ishga tushmasligi uchun wake runtime’ga qisqa cooldown qo‘llanadi.
- Yagona yuborish yo‘li
- 25.
-
- Logging
- 29. Coordinator
bot.moltsubsistemasidavoicewake.overlayvavoicewake.chimekategoriyalarida.infologlarini chiqaradi. - 30. Asosiy hodisalar:session_started,adopted_by_push_to_talk,partial,finalized,send,dismiss,cancel,cooldown.
- Logging
- 29. Coordinator
31) Debugging tekshiruv ro‘yxati¶
-
- Yopishib qolgan overlay’ni qayta yaratishda loglarni oqimda kuzating:
bash
33. sudo log stream --predicate 'subsystem == "bot.molt" AND category CONTAINS "voicewake"' --level info --style compact
-
- Faqat bitta faol sessiya tokeni borligini tekshiring; eskirgan callback’lar coordinator tomonidan bekor qilinishi kerak.
-
- Push-to-talk qo‘yib yuborilishi har doim faol token bilan
endCaptureni chaqirishini ta’minlang; agar matn bo‘sh bo‘lsa, chime yoki yuborishsizdismisskutiladi.
- Push-to-talk qo‘yib yuborilishi har doim faol token bilan
36. Migratsiya bosqichlari (tavsiya etiladi)¶
-
VoiceSessionCoordinator,VoiceSessionvaVoiceSessionPublisherni qo‘shing.
-
VoiceWakeRuntimeniVoiceWakeOverlayControllerga bevosita tegmasdan, sessiyalarni yaratish/yangilash/yakunlashga refaktor qiling.
-
VoicePushToTalkni mavjud sessiyalarni o‘zlashtirishga va qo‘yib yuborilgandaendCaptureni chaqirishga refaktor qiling; runtime cooldown’ni qo‘llang.
-
VoiceWakeOverlayControllerni publisher’ga ulang; runtime/PTT’dan to‘g‘ridan-to‘g‘ri chaqiriqlarni olib tashlang.
-
- Sessiyani o‘zlashtirish, cooldown va bo‘sh-matn dismiss uchun integratsion testlar qo‘shing.