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.
Levenscyclus van spraakoverlay (macOS)
Doelgroep: bijdragers aan de macOS-app. Doel: de spraakoverlay voorspelbaar houden wanneer wekwoord en drukken-om-te-praten overlappen.Huidige bedoeling
- Als de overlay al zichtbaar is door het wekwoord en de gebruiker op de sneltoets drukt, neemt de sessie voor drukken-om-te-praten de bestaande tekst over in plaats van die te resetten. De overlay blijft zichtbaar terwijl de sneltoets wordt ingedrukt. Wanneer de gebruiker loslaat: verzenden als er getrimde tekst is, anders sluiten.
- Alleen het wekwoord verzendt nog steeds automatisch bij stilte; drukken-om-te-praten verzendt direct bij loslaten.
Geïmplementeerd (9 dec. 2025)
- Overlaysessies dragen nu een token per opname (wekwoord of drukken-om-te-praten). Updates voor gedeeltelijk/eindresultaat/verzenden/sluiten/niveau worden genegeerd wanneer het token niet overeenkomt, waardoor verouderde callbacks worden voorkomen.
- Drukken-om-te-praten neemt zichtbare overlaytekst over als prefix (dus als de sneltoets wordt ingedrukt terwijl de wekoverlay zichtbaar is, blijft de tekst behouden en wordt nieuwe spraak toegevoegd). Het wacht maximaal 1,5 s op een definitief transcript voordat het terugvalt op de huidige tekst.
- Logging voor beltoon/overlay wordt op
infouitgegeven in de categorieënvoicewake.overlay,voicewake.pttenvoicewake.chime(sessiestart, gedeeltelijk, definitief, verzenden, sluiten, reden voor beltoon).
Volgende stappen
- VoiceSessionCoordinator (actor)
- Beheert exact één
VoiceSessiontegelijk. - API (op basis van tokens):
beginWakeCapture,beginPushToTalk,updatePartial,endCapture,cancel,applyCooldown. - Negeert callbacks die verouderde tokens dragen (voorkomt dat oude herkenners de overlay opnieuw openen).
- Beheert exact één
- VoiceSession (model)
- Velden:
token,source(wakeWord|pushToTalk), vastgelegde/vluchtige tekst, beltoonvlaggen, timers (automatisch verzenden, inactief),overlayMode(display|editing|sending), deadline voor cooldown.
- Velden:
- Overlaybinding
VoiceSessionPublisher(ObservableObject) spiegelt de actieve sessie naar SwiftUI.VoiceWakeOverlayViewrendert alleen via de publisher; het muteert globale singletons nooit rechtstreeks.- Gebruikersacties in de overlay (
sendNow,dismiss,edit) roepen terug naar de coördinator met het sessietoken.
- Uniform verzendpad
- Bij
endCapture: als getrimde tekst leeg is → sluiten; andersperformSend(session:)(speelt verzendbeltoon één keer af, stuurt door, sluit). - Drukken-om-te-praten: geen vertraging; wekwoord: optionele vertraging voor automatisch verzenden.
- Pas een korte cooldown toe op de wekruntime nadat drukken-om-te-praten is voltooid, zodat het wekwoord niet direct opnieuw triggert.
- Bij
- Logging
- Coördinator geeft
.info-logs uit in subsystemai.openclaw, categorieënvoicewake.overlayenvoicewake.chime. - Belangrijke gebeurtenissen:
session_started,adopted_by_push_to_talk,partial,finalized,send,dismiss,cancel,cooldown.
- Coördinator geeft
Checklist voor foutopsporing
-
Stream logs tijdens het reproduceren van een vastzittende overlay:
- Controleer dat er slechts één actief sessietoken is; verouderde callbacks moeten door de coördinator worden genegeerd.
-
Zorg ervoor dat loslaten bij drukken-om-te-praten altijd
endCaptureaanroept met het actieve token; als tekst leeg is, verwacht dandismisszonder beltoon of verzending.
Migratiestappen (voorgesteld)
- Voeg
VoiceSessionCoordinator,VoiceSessionenVoiceSessionPublishertoe. - Refactor
VoiceWakeRuntimezodat sessies worden aangemaakt/bijgewerkt/beëindigd in plaats vanVoiceWakeOverlayControllerrechtstreeks aan te raken. - Refactor
VoicePushToTalkzodat bestaande sessies worden overgenomen enendCapturewordt aangeroepen bij loslaten; pas runtime-cooldown toe. - Verbind
VoiceWakeOverlayControllermet de publisher; verwijder rechtstreekse aanroepen vanuit runtime/PTT. - Voeg integratietests toe voor sessie-overname, cooldown en sluiten bij lege tekst.