Asosiy tarkibga o'tish

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

    1. 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.
    1. 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.
    1. Chime/overlay loglari info darajasida voicewake.overlay, voicewake.ptt va voicewake.chime kategoriyalarida chiqariladi (sessiya boshlanishi, partial, final, send, dismiss, chime sababi).

13. Keyingi qadamlar

    1. VoiceSessionCoordinator (aktor)
      1. Bir vaqtning o‘zida aniq bitta VoiceSessionga egalik qiladi.
      1. API (token asosida): beginWakeCapture, beginPushToTalk, updatePartial, endCapture, cancel, applyCooldown.
      1. Eskirgan token olib kelgan callback’larni bekor qiladi (eski recognizer’larning overlay’ni qayta ochib yuborishining oldini oladi).
  1. VoiceSession (model)
    • 19. Maydonlar: token, source (wakeWord|pushToTalk), tasdiqlangan/vaqtinchalik matn, chime flaglari, taymerlar (auto-send, idle), overlayMode (display|editing|sending), cooldown muddati.
  2. Overlay bog‘lanishi
    • 21. VoiceSessionPublisher (ObservableObject) faol sessiyani SwiftUI’ga aks ettiradi.
      1. VoiceWakeOverlayView faqat publisher orqali render qiladi; u hech qachon global singleton’larni bevosita o‘zgartirmaydi.
      1. Overlay foydalanuvchi amallari (sendNow, dismiss, edit) sessiya tokeni bilan coordinator’ga qayta chaqiriq qiladi.
    1. Yagona yuborish yo‘li
      1. endCaptureda: agar kesilgan matn bo‘sh bo‘lsa → dismiss; aks holda performSend(session:) (send chime’ni bir marta chaladi, yo‘naltiradi, yopadi).
      1. Push-to-talk: kechikishsiz; uyg‘otuvchi so‘z: auto-send uchun ixtiyoriy kechikish.
      1. Push-to-talk tugagach, uyg‘otuvchi so‘z darhol qayta ishga tushmasligi uchun wake runtime’ga qisqa cooldown qo‘llanadi.
  3. Logging
    • 29. Coordinator bot.molt subsistemasida voicewake.overlay va voicewake.chime kategoriyalarida .info loglarini chiqaradi.
      1. Asosiy hodisalar: session_started, adopted_by_push_to_talk, partial, finalized, send, dismiss, cancel, cooldown.

31) Debugging tekshiruv ro‘yxati

    1. Yopishib qolgan overlay’ni qayta yaratishda loglarni oqimda kuzating:
    33. sudo log stream --predicate 'subsystem == "bot.molt" AND category CONTAINS "voicewake"' --level info --style compact
    
    1. Faqat bitta faol sessiya tokeni borligini tekshiring; eskirgan callback’lar coordinator tomonidan bekor qilinishi kerak.
    1. Push-to-talk qo‘yib yuborilishi har doim faol token bilan endCaptureni chaqirishini ta’minlang; agar matn bo‘sh bo‘lsa, chime yoki yuborishsiz dismiss kutiladi.

36. Migratsiya bosqichlari (tavsiya etiladi)

    1. VoiceSessionCoordinator, VoiceSession va VoiceSessionPublisherni qo‘shing.
    1. VoiceWakeRuntimeni VoiceWakeOverlayControllerga bevosita tegmasdan, sessiyalarni yaratish/yangilash/yakunlashga refaktor qiling.
    1. VoicePushToTalkni mavjud sessiyalarni o‘zlashtirishga va qo‘yib yuborilganda endCaptureni chaqirishga refaktor qiling; runtime cooldown’ni qo‘llang.
    1. VoiceWakeOverlayControllerni publisher’ga ulang; runtime/PTT’dan to‘g‘ridan-to‘g‘ri chaqiriqlarni olib tashlang.
    1. Sessiyani o‘zlashtirish, cooldown va bo‘sh-matn dismiss uchun integratsion testlar qo‘shing.