> ## Documentation Index
> Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# वॉइस ओवरले

# वॉइस ओवरले लाइफसाइकल (macOS)

लक्षित पाठक: macOS ऐप योगदानकर्ता। लक्ष्य: वेक-वर्ड और पुश-टू-टॉक के ओवरलैप होने पर वॉइस ओवरले को पूर्वानुमेय बनाए रखना।

## मौजूदा इरादा

* यदि ओवरले पहले से वेक-वर्ड से दिख रहा है और उपयोगकर्ता हॉटकी दबाता है, तो हॉटकी सेशन मौजूदा टेक्स्ट को रीसेट करने के बजाय उसे *अपना* लेता है। हॉटकी दबाए रखने तक ओवरले दिखता रहता है। जब उपयोगकर्ता छोड़ता है: यदि ट्रिम किया हुआ टेक्स्ट है तो भेजें, अन्यथा खारिज करें।
* केवल वेक-वर्ड अब भी मौन पर अपने आप भेजता है; पुश-टू-टॉक छोड़ते ही तुरंत भेजता है।

## लागू किया गया (9 दिसंबर, 2025)

* ओवरले सेशन अब हर कैप्चर (वेक-वर्ड या पुश-टू-टॉक) के लिए एक टोकन रखते हैं। टोकन मेल न खाने पर partial/final/send/dismiss/level अपडेट छोड़ दिए जाते हैं, जिससे पुराने कॉलबैक से बचा जाता है।
* पुश-टू-टॉक किसी भी दिख रहे ओवरले टेक्स्ट को उपसर्ग के रूप में अपना लेता है (इसलिए वेक ओवरले दिखते समय हॉटकी दबाने पर टेक्स्ट बना रहता है और नई स्पीच जुड़ जाती है)। यह मौजूदा टेक्स्ट पर वापस जाने से पहले अंतिम ट्रांसक्रिप्ट के लिए 1.5s तक प्रतीक्षा करता है।
* चाइम/ओवरले लॉगिंग `voicewake.overlay`, `voicewake.ptt`, और `voicewake.chime` श्रेणियों में `info` पर उत्सर्जित की जाती है (सेशन शुरू, partial, final, send, dismiss, chime reason)।

## अगले चरण

1. **VoiceSessionCoordinator (actor)**
   * एक समय में ठीक एक `VoiceSession` का मालिक होता है।
   * API (टोकन-आधारित): `beginWakeCapture`, `beginPushToTalk`, `updatePartial`, `endCapture`, `cancel`, `applyCooldown`।
   * पुराने टोकन वाले कॉलबैक छोड़ देता है (पुराने रिकग्नाइज़र को ओवरले फिर से खोलने से रोकता है)।
2. **VoiceSession (model)**
   * फ़ील्ड: `token`, `source` (wakeWord|pushToTalk), committed/volatile टेक्स्ट, चाइम फ़्लैग, टाइमर (auto-send, idle), `overlayMode` (display|editing|sending), कूलडाउन डेडलाइन।
3. **ओवरले बाइंडिंग**
   * `VoiceSessionPublisher` (`ObservableObject`) सक्रिय सेशन को SwiftUI में मिरर करता है।
   * `VoiceWakeOverlayView` केवल पब्लिशर के माध्यम से रेंडर करता है; यह ग्लोबल सिंगलटन को सीधे कभी म्यूटेट नहीं करता।
   * ओवरले उपयोगकर्ता कार्रवाइयां (`sendNow`, `dismiss`, `edit`) सेशन टोकन के साथ कोऑर्डिनेटर में वापस कॉल करती हैं।
4. **एकीकृत भेजने का पथ**
   * `endCapture` पर: यदि ट्रिम किया हुआ टेक्स्ट खाली है → खारिज करें; अन्यथा `performSend(session:)` (सेंड चाइम एक बार बजाता है, आगे भेजता है, खारिज करता है)।
   * पुश-टू-टॉक: कोई देरी नहीं; वेक-वर्ड: auto-send के लिए वैकल्पिक देरी।
   * पुश-टू-टॉक समाप्त होने के बाद वेक रनटाइम पर छोटा कूलडाउन लागू करें ताकि वेक-वर्ड तुरंत फिर से ट्रिगर न हो।
5. **लॉगिंग**
   * कोऑर्डिनेटर `ai.openclaw` सबसिस्टम में `voicewake.overlay` और `voicewake.chime` श्रेणियों के साथ `.info` लॉग उत्सर्जित करता है।
   * मुख्य इवेंट: `session_started`, `adopted_by_push_to_talk`, `partial`, `finalized`, `send`, `dismiss`, `cancel`, `cooldown`।

## डीबगिंग चेकलिस्ट

* अटके हुए ओवरले को पुन: उत्पन्न करते समय लॉग स्ट्रीम करें:

  ```bash theme={"theme":{"light":"min-light","dark":"min-dark"}}
  sudo log stream --predicate 'subsystem == "ai.openclaw" AND category CONTAINS "voicewake"' --level info --style compact
  ```

* सत्यापित करें कि केवल एक सक्रिय सेशन टोकन है; पुराने कॉलबैक को कोऑर्डिनेटर द्वारा छोड़ दिया जाना चाहिए।

* सुनिश्चित करें कि पुश-टू-टॉक छोड़ना हमेशा सक्रिय टोकन के साथ `endCapture` कॉल करता है; यदि टेक्स्ट खाली है, तो चाइम या सेंड के बिना `dismiss` अपेक्षित है।

## माइग्रेशन चरण (सुझाए गए)

1. `VoiceSessionCoordinator`, `VoiceSession`, और `VoiceSessionPublisher` जोड़ें।
2. `VoiceWakeOverlayController` को सीधे छूने के बजाय सेशन बनाने/अपडेट करने/समाप्त करने के लिए `VoiceWakeRuntime` को रीफ़ैक्टर करें।
3. मौजूदा सेशन अपनाने और छोड़ने पर `endCapture` कॉल करने के लिए `VoicePushToTalk` को रीफ़ैक्टर करें; रनटाइम कूलडाउन लागू करें।
4. `VoiceWakeOverlayController` को पब्लिशर से वायर करें; रनटाइम/PTT से सीधे कॉल हटाएं।
5. सेशन अपनाने, कूलडाउन, और खाली-टेक्स्ट खारिज करने के लिए इंटीग्रेशन टेस्ट जोड़ें।

## संबंधित

* [macOS ऐप](/hi/platforms/macos)
* [वॉइस वेक (macOS)](/hi/platforms/mac/voicewake)
* [टॉक मोड](/hi/nodes/talk)
