Ses Katmanı Yaşam Döngüsü (macOS)
Hedef kitle: macOS uygulaması katkıcıları. Amaç: uyandırma sözcüğü ve bas-konuş çakıştığında ses katmanını öngörülebilir tutmak.Mevcut amaç
- Katman zaten uyandırma sözcüğü nedeniyle görünür durumdaysa ve kullanıcı kısayol tuşuna basarsa, kısayol oturumu metni sıfırlamak yerine mevcut metni devralır. Kısayol tuşu basılı tutulduğu sürece katman görünür kalır. Kullanıcı bıraktığında: kırpılmış metin varsa gönder, aksi takdirde kapat.
- Yalnızca uyandırma sözcüğü hâlâ sessizlikte otomatik gönderir; bas-konuş ise bırakıldığında hemen gönderir.
Uygulananlar (9 Aralık 2025)
- Katman oturumları artık her yakalama için bir token taşır (uyandırma sözcüğü veya bas-konuş). Token eşleşmediğinde kısmi/son/gönder/kapat/seviye güncellemeleri bırakılır; böylece eski geri çağrılar önlenir.
- Bas-konuş, görünür durumdaki tüm katman metnini önek olarak devralır (böylece uyandırma katmanı açıkken kısayol tuşuna basmak metni korur ve yeni konuşmayı ekler). Mevcut metne geri dönmeden önce son transkript için 1,5 saniyeye kadar bekler.
- Chime/katman günlük kaydı
voicewake.overlay,voicewake.pttvevoicewake.chimekategorilerindeinfodüzeyinde üretilir (oturum başlangıcı, kısmi, son, gönder, kapat, chime nedeni).
Sonraki adımlar
- VoiceSessionCoordinator (actor)
- Aynı anda tam olarak bir
VoiceSessionsahibi olur. - API (token tabanlı):
beginWakeCapture,beginPushToTalk,updatePartial,endCapture,cancel,applyCooldown. - Eski token taşıyan geri çağrıları bırakır (eski tanıyıcıların katmanı yeniden açmasını önler).
- Aynı anda tam olarak bir
- VoiceSession (model)
- Alanlar:
token,source(wakeWord|pushToTalk), kesinleşmiş/geçici metin, chime işaretleri, zamanlayıcılar (otomatik gönderme, boşta),overlayMode(display|editing|sending), bekleme süresi son tarihi.
- Alanlar:
- Katman bağlama
VoiceSessionPublisher(ObservableObject) etkin oturumu SwiftUI’ye yansıtır.VoiceWakeOverlayViewyalnızca publisher üzerinden oluşturulur; global singleton’ları asla doğrudan değiştirmez.- Katman kullanıcı işlemleri (
sendNow,dismiss,edit) oturum token’ı ile coordinator’a geri çağrı yapar.
- Birleşik gönderme yolu
endCapturesırasında: kırpılmış metin boşsa → kapat; değilseperformSend(session:)(gönderme chime’ını bir kez çalar, iletir, kapatır).- Bas-konuş: gecikme yok; uyandırma sözcüğü: otomatik gönderme için isteğe bağlı gecikme.
- Bas-konuş bittikten sonra uyandırma çalışma zamanına kısa bir bekleme süresi uygulayın; böylece uyandırma sözcüğü hemen yeniden tetiklenmez.
- Günlük kaydı
- Coordinator,
ai.openclawalt sistemi altındavoicewake.overlayvevoicewake.chimekategorilerinde.infogünlükleri üretir. - Temel olaylar:
session_started,adopted_by_push_to_talk,partial,finalized,send,dismiss,cancel,cooldown.
- Coordinator,
Hata ayıklama kontrol listesi
-
Yapışkan bir katmanı yeniden üretirken günlükleri akış halinde izleyin:
- Yalnızca bir etkin oturum token’ı olduğunu doğrulayın; eski geri çağrılar coordinator tarafından bırakılmalıdır.
-
Bas-konuş bırakmanın her zaman etkin token ile
endCaptureçağırdığından emin olun; metin boşsa chime veya gönderme olmadandismissbekleyin.
Geçiş adımları (önerilen)
VoiceSessionCoordinator,VoiceSessionveVoiceSessionPublisherekleyin.VoiceWakeRuntimeyapısınıVoiceWakeOverlayControlleröğesine doğrudan dokunmak yerine oturum oluşturacak/güncelleyecek/bitirecek şekilde yeniden düzenleyin.VoicePushToTalkyapısını mevcut oturumları devralacak ve bırakıldığındaendCaptureçağıracak şekilde yeniden düzenleyin; çalışma zamanı bekleme süresini uygulayın.VoiceWakeOverlayControlleröğesini publisher’a bağlayın; runtime/PTT’den gelen doğrudan çağrıları kaldırın.- Oturum devralma, bekleme süresi ve boş metin kapatma için entegrasyon testleri ekleyin.