@glassly/engine 0.1.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +96 -0
- package/build/devtools.d.ts +11 -0
- package/build/devtools.d.ts.map +1 -0
- package/build/devtools.js +13 -0
- package/build/devtools.js.map +1 -0
- package/build/engine.d.ts +336 -0
- package/build/engine.d.ts.map +1 -0
- package/build/engine.js +198 -0
- package/build/engine.js.map +1 -0
- package/build/facades/dev.d.ts +69 -0
- package/build/facades/dev.d.ts.map +1 -0
- package/build/facades/dev.js +204 -0
- package/build/facades/dev.js.map +1 -0
- package/build/facades/display.d.ts +21 -0
- package/build/facades/display.d.ts.map +1 -0
- package/build/facades/display.js +17 -0
- package/build/facades/display.js.map +1 -0
- package/build/facades/displayMirror.d.ts +15 -0
- package/build/facades/displayMirror.d.ts.map +1 -0
- package/build/facades/displayMirror.js +29 -0
- package/build/facades/displayMirror.js.map +1 -0
- package/build/facades/gallery.d.ts +62 -0
- package/build/facades/gallery.d.ts.map +1 -0
- package/build/facades/gallery.js +61 -0
- package/build/facades/gallery.js.map +1 -0
- package/build/facades/glasses.d.ts +142 -0
- package/build/facades/glasses.d.ts.map +1 -0
- package/build/facades/glasses.js +214 -0
- package/build/facades/glasses.js.map +1 -0
- package/build/facades/glassesSettings.d.ts +13 -0
- package/build/facades/glassesSettings.d.ts.map +1 -0
- package/build/facades/glassesSettings.js +55 -0
- package/build/facades/glassesSettings.js.map +1 -0
- package/build/facades/glassesWifi.d.ts +25 -0
- package/build/facades/glassesWifi.d.ts.map +1 -0
- package/build/facades/glassesWifi.js +57 -0
- package/build/facades/glassesWifi.js.map +1 -0
- package/build/facades/maps.d.ts +18 -0
- package/build/facades/maps.d.ts.map +1 -0
- package/build/facades/maps.js +13 -0
- package/build/facades/maps.js.map +1 -0
- package/build/facades/memory.d.ts +38 -0
- package/build/facades/memory.d.ts.map +1 -0
- package/build/facades/memory.js +33 -0
- package/build/facades/memory.js.map +1 -0
- package/build/facades/miniapps.d.ts +47 -0
- package/build/facades/miniapps.d.ts.map +1 -0
- package/build/facades/miniapps.js +54 -0
- package/build/facades/miniapps.js.map +1 -0
- package/build/facades/notifications.d.ts +13 -0
- package/build/facades/notifications.d.ts.map +1 -0
- package/build/facades/notifications.js +12 -0
- package/build/facades/notifications.js.map +1 -0
- package/build/facades/ota.d.ts +106 -0
- package/build/facades/ota.d.ts.map +1 -0
- package/build/facades/ota.js +159 -0
- package/build/facades/ota.js.map +1 -0
- package/build/facades/pairing.d.ts +115 -0
- package/build/facades/pairing.d.ts.map +1 -0
- package/build/facades/pairing.js +275 -0
- package/build/facades/pairing.js.map +1 -0
- package/build/facades/permissions.d.ts +33 -0
- package/build/facades/permissions.d.ts.map +1 -0
- package/build/facades/permissions.js +155 -0
- package/build/facades/permissions.js.map +1 -0
- package/build/facades/phoneNotifications.d.ts +17 -0
- package/build/facades/phoneNotifications.d.ts.map +1 -0
- package/build/facades/phoneNotifications.js +41 -0
- package/build/facades/phoneNotifications.js.map +1 -0
- package/build/facades/providerKeys.d.ts +26 -0
- package/build/facades/providerKeys.d.ts.map +1 -0
- package/build/facades/providerKeys.js +26 -0
- package/build/facades/providerKeys.js.map +1 -0
- package/build/facades/reports.d.ts +36 -0
- package/build/facades/reports.d.ts.map +1 -0
- package/build/facades/reports.js +134 -0
- package/build/facades/reports.js.map +1 -0
- package/build/facades/session.d.ts +21 -0
- package/build/facades/session.d.ts.map +1 -0
- package/build/facades/session.js +52 -0
- package/build/facades/session.js.map +1 -0
- package/build/facades/settings.d.ts +37 -0
- package/build/facades/settings.d.ts.map +1 -0
- package/build/facades/settings.js +55 -0
- package/build/facades/settings.js.map +1 -0
- package/build/facades/speakers.d.ts +41 -0
- package/build/facades/speakers.d.ts.map +1 -0
- package/build/facades/speakers.js +139 -0
- package/build/facades/speakers.js.map +1 -0
- package/build/facades/speech.d.ts +44 -0
- package/build/facades/speech.d.ts.map +1 -0
- package/build/facades/speech.js +46 -0
- package/build/facades/speech.js.map +1 -0
- package/build/index.d.ts +48 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +49 -0
- package/build/index.js.map +1 -0
- package/build/internal.d.ts +67 -0
- package/build/internal.d.ts.map +1 -0
- package/build/internal.js +90 -0
- package/build/internal.js.map +1 -0
- package/build/runtime/bootstrap.d.ts +115 -0
- package/build/runtime/bootstrap.d.ts.map +1 -0
- package/build/runtime/bootstrap.js +73 -0
- package/build/runtime/bootstrap.js.map +1 -0
- package/build/runtime/config.d.ts +152 -0
- package/build/runtime/config.d.ts.map +1 -0
- package/build/runtime/config.js +19 -0
- package/build/runtime/config.js.map +1 -0
- package/build/runtime/scanQrSeam.d.ts +7 -0
- package/build/runtime/scanQrSeam.d.ts.map +1 -0
- package/build/runtime/scanQrSeam.js +16 -0
- package/build/runtime/scanQrSeam.js.map +1 -0
- package/build/runtime/streamConfig.d.ts +4 -0
- package/build/runtime/streamConfig.d.ts.map +1 -0
- package/build/runtime/streamConfig.js +38 -0
- package/build/runtime/streamConfig.js.map +1 -0
- package/build/services/AiTierResolution.d.ts +61 -0
- package/build/services/AiTierResolution.d.ts.map +1 -0
- package/build/services/AiTierResolution.js +83 -0
- package/build/services/AiTierResolution.js.map +1 -0
- package/build/services/AppRegistry.d.ts +303 -0
- package/build/services/AppRegistry.d.ts.map +1 -0
- package/build/services/AppRegistry.js +1108 -0
- package/build/services/AppRegistry.js.map +1 -0
- package/build/services/AudioCloudUplink.d.ts +15 -0
- package/build/services/AudioCloudUplink.d.ts.map +1 -0
- package/build/services/AudioCloudUplink.js +54 -0
- package/build/services/AudioCloudUplink.js.map +1 -0
- package/build/services/AudioPlaybackService.d.ts +183 -0
- package/build/services/AudioPlaybackService.d.ts.map +1 -0
- package/build/services/AudioPlaybackService.js +750 -0
- package/build/services/AudioPlaybackService.js.map +1 -0
- package/build/services/AutomaticReportResult.d.ts +20 -0
- package/build/services/AutomaticReportResult.d.ts.map +1 -0
- package/build/services/AutomaticReportResult.js +29 -0
- package/build/services/AutomaticReportResult.js.map +1 -0
- package/build/services/BlobStore.d.ts +106 -0
- package/build/services/BlobStore.d.ts.map +1 -0
- package/build/services/BlobStore.js +741 -0
- package/build/services/BlobStore.js.map +1 -0
- package/build/services/CaptionsTesterReportService.d.ts +4 -0
- package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
- package/build/services/CaptionsTesterReportService.js +80 -0
- package/build/services/CaptionsTesterReportService.js.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
- package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
- package/build/services/CloudAudioSubscriptionSync.js +51 -0
- package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
- package/build/services/CloudClientService.d.ts +293 -0
- package/build/services/CloudClientService.d.ts.map +1 -0
- package/build/services/CloudClientService.js +965 -0
- package/build/services/CloudClientService.js.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
- package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
- package/build/services/CloudTranscriptE2EMetrics.js +24 -0
- package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
- package/build/services/ConnectionCoordinator.d.ts +51 -0
- package/build/services/ConnectionCoordinator.d.ts.map +1 -0
- package/build/services/ConnectionCoordinator.js +34 -0
- package/build/services/ConnectionCoordinator.js.map +1 -0
- package/build/services/DevServerBridge.d.ts +63 -0
- package/build/services/DevServerBridge.d.ts.map +1 -0
- package/build/services/DevServerBridge.js +296 -0
- package/build/services/DevServerBridge.js.map +1 -0
- package/build/services/DeviceEventRouter.d.ts +3 -0
- package/build/services/DeviceEventRouter.d.ts.map +1 -0
- package/build/services/DeviceEventRouter.js +214 -0
- package/build/services/DeviceEventRouter.js.map +1 -0
- package/build/services/DeviceStoreHydration.d.ts +38 -0
- package/build/services/DeviceStoreHydration.d.ts.map +1 -0
- package/build/services/DeviceStoreHydration.js +124 -0
- package/build/services/DeviceStoreHydration.js.map +1 -0
- package/build/services/DisplayProcessor.d.ts +223 -0
- package/build/services/DisplayProcessor.d.ts.map +1 -0
- package/build/services/DisplayProcessor.js +552 -0
- package/build/services/DisplayProcessor.js.map +1 -0
- package/build/services/ForegroundLocationPermission.d.ts +13 -0
- package/build/services/ForegroundLocationPermission.d.ts.map +1 -0
- package/build/services/ForegroundLocationPermission.js +12 -0
- package/build/services/ForegroundLocationPermission.js.map +1 -0
- package/build/services/GlassesReadiness.d.ts +41 -0
- package/build/services/GlassesReadiness.d.ts.map +1 -0
- package/build/services/GlassesReadiness.js +82 -0
- package/build/services/GlassesReadiness.js.map +1 -0
- package/build/services/GlassesSettingsSync.d.ts +33 -0
- package/build/services/GlassesSettingsSync.d.ts.map +1 -0
- package/build/services/GlassesSettingsSync.js +127 -0
- package/build/services/GlassesSettingsSync.js.map +1 -0
- package/build/services/GlassesStatusProjection.d.ts +3 -0
- package/build/services/GlassesStatusProjection.d.ts.map +1 -0
- package/build/services/GlassesStatusProjection.js +65 -0
- package/build/services/GlassesStatusProjection.js.map +1 -0
- package/build/services/HeadingService.d.ts +33 -0
- package/build/services/HeadingService.d.ts.map +1 -0
- package/build/services/HeadingService.js +123 -0
- package/build/services/HeadingService.js.map +1 -0
- package/build/services/HotspotOtaTransport.d.ts +29 -0
- package/build/services/HotspotOtaTransport.d.ts.map +1 -0
- package/build/services/HotspotOtaTransport.js +146 -0
- package/build/services/HotspotOtaTransport.js.map +1 -0
- package/build/services/HotspotShutdown.d.ts +17 -0
- package/build/services/HotspotShutdown.d.ts.map +1 -0
- package/build/services/HotspotShutdown.js +29 -0
- package/build/services/HotspotShutdown.js.map +1 -0
- package/build/services/JSCrashController.d.ts +97 -0
- package/build/services/JSCrashController.d.ts.map +1 -0
- package/build/services/JSCrashController.js +138 -0
- package/build/services/JSCrashController.js.map +1 -0
- package/build/services/JSCrashloopReportService.d.ts +9 -0
- package/build/services/JSCrashloopReportService.d.ts.map +1 -0
- package/build/services/JSCrashloopReportService.js +54 -0
- package/build/services/JSCrashloopReportService.js.map +1 -0
- package/build/services/JSLogPipeline.d.ts +87 -0
- package/build/services/JSLogPipeline.d.ts.map +1 -0
- package/build/services/JSLogPipeline.js +137 -0
- package/build/services/JSLogPipeline.js.map +1 -0
- package/build/services/JSRouter.d.ts +203 -0
- package/build/services/JSRouter.d.ts.map +1 -0
- package/build/services/JSRouter.js +482 -0
- package/build/services/JSRouter.js.map +1 -0
- package/build/services/LocalDisplayManager.d.ts +162 -0
- package/build/services/LocalDisplayManager.d.ts.map +1 -0
- package/build/services/LocalDisplayManager.js +687 -0
- package/build/services/LocalDisplayManager.js.map +1 -0
- package/build/services/LocalMiniappDataMigration.d.ts +46 -0
- package/build/services/LocalMiniappDataMigration.d.ts.map +1 -0
- package/build/services/LocalMiniappDataMigration.js +78 -0
- package/build/services/LocalMiniappDataMigration.js.map +1 -0
- package/build/services/LocalMiniappRuntime.d.ts +677 -0
- package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
- package/build/services/LocalMiniappRuntime.js +5068 -0
- package/build/services/LocalMiniappRuntime.js.map +1 -0
- package/build/services/LocalMiniappStorage.d.ts +32 -0
- package/build/services/LocalMiniappStorage.d.ts.map +1 -0
- package/build/services/LocalMiniappStorage.js +66 -0
- package/build/services/LocalMiniappStorage.js.map +1 -0
- package/build/services/LocalMiniappUserIdentity.d.ts +41 -0
- package/build/services/LocalMiniappUserIdentity.d.ts.map +1 -0
- package/build/services/LocalMiniappUserIdentity.js +73 -0
- package/build/services/LocalMiniappUserIdentity.js.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts +101 -0
- package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
- package/build/services/LocalSttFallbackCoordinator.js +210 -0
- package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
- package/build/services/MapboxTokenService.d.ts +33 -0
- package/build/services/MapboxTokenService.d.ts.map +1 -0
- package/build/services/MapboxTokenService.js +115 -0
- package/build/services/MapboxTokenService.js.map +1 -0
- package/build/services/MemoryCapture.d.ts +40 -0
- package/build/services/MemoryCapture.d.ts.map +1 -0
- package/build/services/MemoryCapture.js +42 -0
- package/build/services/MemoryCapture.js.map +1 -0
- package/build/services/MemoryStore.d.ts +184 -0
- package/build/services/MemoryStore.d.ts.map +1 -0
- package/build/services/MemoryStore.js +541 -0
- package/build/services/MemoryStore.js.map +1 -0
- package/build/services/MicStateCoordinator.d.ts +78 -0
- package/build/services/MicStateCoordinator.d.ts.map +1 -0
- package/build/services/MicStateCoordinator.js +219 -0
- package/build/services/MicStateCoordinator.js.map +1 -0
- package/build/services/MiniappEngine.d.ts +31 -0
- package/build/services/MiniappEngine.d.ts.map +1 -0
- package/build/services/MiniappEngine.js +119 -0
- package/build/services/MiniappEngine.js.map +1 -0
- package/build/services/MiniappLauncher.d.ts +127 -0
- package/build/services/MiniappLauncher.d.ts.map +1 -0
- package/build/services/MiniappLauncher.js +309 -0
- package/build/services/MiniappLauncher.js.map +1 -0
- package/build/services/MiniappLiveness.d.ts +12 -0
- package/build/services/MiniappLiveness.d.ts.map +1 -0
- package/build/services/MiniappLiveness.js +16 -0
- package/build/services/MiniappLiveness.js.map +1 -0
- package/build/services/MiniappRunningRegistry.d.ts +24 -0
- package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
- package/build/services/MiniappRunningRegistry.js +52 -0
- package/build/services/MiniappRunningRegistry.js.map +1 -0
- package/build/services/NativeHttpResponse.d.ts +3 -0
- package/build/services/NativeHttpResponse.d.ts.map +1 -0
- package/build/services/NativeHttpResponse.js +6 -0
- package/build/services/NativeHttpResponse.js.map +1 -0
- package/build/services/NativeNavigationService.d.ts +51 -0
- package/build/services/NativeNavigationService.d.ts.map +1 -0
- package/build/services/NativeNavigationService.js +154 -0
- package/build/services/NativeNavigationService.js.map +1 -0
- package/build/services/NavigationHandlers.d.ts +107 -0
- package/build/services/NavigationHandlers.d.ts.map +1 -0
- package/build/services/NavigationHandlers.js +479 -0
- package/build/services/NavigationHandlers.js.map +1 -0
- package/build/services/NavigationService.d.ts +283 -0
- package/build/services/NavigationService.d.ts.map +1 -0
- package/build/services/NavigationService.js +696 -0
- package/build/services/NavigationService.js.map +1 -0
- package/build/services/NotificationsEmitter.d.ts +28 -0
- package/build/services/NotificationsEmitter.d.ts.map +1 -0
- package/build/services/NotificationsEmitter.js +22 -0
- package/build/services/NotificationsEmitter.js.map +1 -0
- package/build/services/OfflineSpeechModelService.d.ts +33 -0
- package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
- package/build/services/OfflineSpeechModelService.js +136 -0
- package/build/services/OfflineSpeechModelService.js.map +1 -0
- package/build/services/OtaArtifactDownloader.d.ts +65 -0
- package/build/services/OtaArtifactDownloader.d.ts.map +1 -0
- package/build/services/OtaArtifactDownloader.js +226 -0
- package/build/services/OtaArtifactDownloader.js.map +1 -0
- package/build/services/OtaInstallCoordinator.d.ts +275 -0
- package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
- package/build/services/OtaInstallCoordinator.js +1491 -0
- package/build/services/OtaInstallCoordinator.js.map +1 -0
- package/build/services/OtaService.d.ts +3 -0
- package/build/services/OtaService.d.ts.map +1 -0
- package/build/services/OtaService.js +72 -0
- package/build/services/OtaService.js.map +1 -0
- package/build/services/OtaUpdateCheckService.d.ts +100 -0
- package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
- package/build/services/OtaUpdateCheckService.js +380 -0
- package/build/services/OtaUpdateCheckService.js.map +1 -0
- package/build/services/PairingIdentity.d.ts +80 -0
- package/build/services/PairingIdentity.d.ts.map +1 -0
- package/build/services/PairingIdentity.js +145 -0
- package/build/services/PairingIdentity.js.map +1 -0
- package/build/services/PhoneCalendarHelpers.d.ts +32 -0
- package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
- package/build/services/PhoneCalendarHelpers.js +157 -0
- package/build/services/PhoneCalendarHelpers.js.map +1 -0
- package/build/services/PhoneCalendarService.d.ts +5 -0
- package/build/services/PhoneCalendarService.d.ts.map +1 -0
- package/build/services/PhoneCalendarService.js +45 -0
- package/build/services/PhoneCalendarService.js.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts +30 -0
- package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
- package/build/services/PhoneCameraFovCoordinator.js +194 -0
- package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
- package/build/services/PhoneLocationService.d.ts +36 -0
- package/build/services/PhoneLocationService.d.ts.map +1 -0
- package/build/services/PhoneLocationService.js +115 -0
- package/build/services/PhoneLocationService.js.map +1 -0
- package/build/services/PhoneNotificationsSync.d.ts +3 -0
- package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
- package/build/services/PhoneNotificationsSync.js +37 -0
- package/build/services/PhoneNotificationsSync.js.map +1 -0
- package/build/services/PhonePhotoCoordinator.d.ts +110 -0
- package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
- package/build/services/PhonePhotoCoordinator.js +344 -0
- package/build/services/PhonePhotoCoordinator.js.map +1 -0
- package/build/services/PhoneStreamCoordinator.d.ts +175 -0
- package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
- package/build/services/PhoneStreamCoordinator.js +740 -0
- package/build/services/PhoneStreamCoordinator.js.map +1 -0
- package/build/services/PhoneVideoCoordinator.d.ts +52 -0
- package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
- package/build/services/PhoneVideoCoordinator.js +157 -0
- package/build/services/PhoneVideoCoordinator.js.map +1 -0
- package/build/services/ProviderKeyValidation.d.ts +27 -0
- package/build/services/ProviderKeyValidation.d.ts.map +1 -0
- package/build/services/ProviderKeyValidation.js +42 -0
- package/build/services/ProviderKeyValidation.js.map +1 -0
- package/build/services/STTModelManager.d.ts +65 -0
- package/build/services/STTModelManager.d.ts.map +1 -0
- package/build/services/STTModelManager.js +366 -0
- package/build/services/STTModelManager.js.map +1 -0
- package/build/services/SceneRenderer.d.ts +90 -0
- package/build/services/SceneRenderer.d.ts.map +1 -0
- package/build/services/SceneRenderer.js +274 -0
- package/build/services/SceneRenderer.js.map +1 -0
- package/build/services/SentenceTtsPipeline.d.ts +31 -0
- package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
- package/build/services/SentenceTtsPipeline.js +67 -0
- package/build/services/SentenceTtsPipeline.js.map +1 -0
- package/build/services/SpeakerIdModelManager.d.ts +36 -0
- package/build/services/SpeakerIdModelManager.d.ts.map +1 -0
- package/build/services/SpeakerIdModelManager.js +132 -0
- package/build/services/SpeakerIdModelManager.js.map +1 -0
- package/build/services/SpeakerIdSync.d.ts +14 -0
- package/build/services/SpeakerIdSync.d.ts.map +1 -0
- package/build/services/SpeakerIdSync.js +62 -0
- package/build/services/SpeakerIdSync.js.map +1 -0
- package/build/services/SpeakerLabelResolver.d.ts +80 -0
- package/build/services/SpeakerLabelResolver.d.ts.map +1 -0
- package/build/services/SpeakerLabelResolver.js +108 -0
- package/build/services/SpeakerLabelResolver.js.map +1 -0
- package/build/services/SpeakerProfileStore.d.ts +90 -0
- package/build/services/SpeakerProfileStore.d.ts.map +1 -0
- package/build/services/SpeakerProfileStore.js +213 -0
- package/build/services/SpeakerProfileStore.js.map +1 -0
- package/build/services/SpeakerSegmentResolver.d.ts +87 -0
- package/build/services/SpeakerSegmentResolver.d.ts.map +1 -0
- package/build/services/SpeakerSegmentResolver.js +137 -0
- package/build/services/SpeakerSegmentResolver.js.map +1 -0
- package/build/services/StreamLifecycleController.d.ts +63 -0
- package/build/services/StreamLifecycleController.d.ts.map +1 -0
- package/build/services/StreamLifecycleController.js +148 -0
- package/build/services/StreamLifecycleController.js.map +1 -0
- package/build/services/SupportProfileSync.d.ts +22 -0
- package/build/services/SupportProfileSync.d.ts.map +1 -0
- package/build/services/SupportProfileSync.js +213 -0
- package/build/services/SupportProfileSync.js.map +1 -0
- package/build/services/TTSModelManager.d.ts +90 -0
- package/build/services/TTSModelManager.d.ts.map +1 -0
- package/build/services/TTSModelManager.js +366 -0
- package/build/services/TTSModelManager.js.map +1 -0
- package/build/services/TranscriptionRouting.d.ts +22 -0
- package/build/services/TranscriptionRouting.d.ts.map +1 -0
- package/build/services/TranscriptionRouting.js +34 -0
- package/build/services/TranscriptionRouting.js.map +1 -0
- package/build/services/TtsTextSanitizer.d.ts +5 -0
- package/build/services/TtsTextSanitizer.d.ts.map +1 -0
- package/build/services/TtsTextSanitizer.js +61 -0
- package/build/services/TtsTextSanitizer.js.map +1 -0
- package/build/services/UIRouter.d.ts +137 -0
- package/build/services/UIRouter.d.ts.map +1 -0
- package/build/services/UIRouter.js +210 -0
- package/build/services/UIRouter.js.map +1 -0
- package/build/services/WebviewBridge.d.ts +22 -0
- package/build/services/WebviewBridge.d.ts.map +1 -0
- package/build/services/WebviewBridge.js +47 -0
- package/build/services/WebviewBridge.js.map +1 -0
- package/build/services/WifiAdbRequest.d.ts +17 -0
- package/build/services/WifiAdbRequest.d.ts.map +1 -0
- package/build/services/WifiAdbRequest.js +35 -0
- package/build/services/WifiAdbRequest.js.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
- package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
- package/build/services/asg/asgCameraApi.d.ts +208 -0
- package/build/services/asg/asgCameraApi.d.ts.map +1 -0
- package/build/services/asg/asgCameraApi.js +1480 -0
- package/build/services/asg/asgCameraApi.js.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
- package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportCoordinator.js +618 -0
- package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
- package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
- package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
- package/build/services/asg/cameraRollExportLedger.js +78 -0
- package/build/services/asg/cameraRollExportLedger.js.map +1 -0
- package/build/services/asg/galleryMediaValidation.d.ts +29 -0
- package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
- package/build/services/asg/galleryMediaValidation.js +149 -0
- package/build/services/asg/galleryMediaValidation.js.map +1 -0
- package/build/services/asg/galleryNotices.d.ts +33 -0
- package/build/services/asg/galleryNotices.d.ts.map +1 -0
- package/build/services/asg/galleryNotices.js +29 -0
- package/build/services/asg/galleryNotices.js.map +1 -0
- package/build/services/asg/galleryPathMigration.d.ts +3 -0
- package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
- package/build/services/asg/galleryPathMigration.js +26 -0
- package/build/services/asg/galleryPathMigration.js.map +1 -0
- package/build/services/asg/gallerySettingsService.d.ts +20 -0
- package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
- package/build/services/asg/gallerySettingsService.js +53 -0
- package/build/services/asg/gallerySettingsService.js.map +1 -0
- package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
- package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
- package/build/services/asg/gallerySyncNotifications.js +198 -0
- package/build/services/asg/gallerySyncNotifications.js.map +1 -0
- package/build/services/asg/gallerySyncService.d.ts +137 -0
- package/build/services/asg/gallerySyncService.d.ts.map +1 -0
- package/build/services/asg/gallerySyncService.js +1945 -0
- package/build/services/asg/gallerySyncService.js.map +1 -0
- package/build/services/asg/galleryTransferLedger.d.ts +58 -0
- package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
- package/build/services/asg/galleryTransferLedger.js +225 -0
- package/build/services/asg/galleryTransferLedger.js.map +1 -0
- package/build/services/asg/localNetworkTransport.d.ts +15 -0
- package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
- package/build/services/asg/localNetworkTransport.js +144 -0
- package/build/services/asg/localNetworkTransport.js.map +1 -0
- package/build/services/asg/localStorageService.d.ts +146 -0
- package/build/services/asg/localStorageService.d.ts.map +1 -0
- package/build/services/asg/localStorageService.js +572 -0
- package/build/services/asg/localStorageService.js.map +1 -0
- package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
- package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
- package/build/services/asg/mediaProcessingQueue.js +451 -0
- package/build/services/asg/mediaProcessingQueue.js.map +1 -0
- package/build/services/audioPlaybackAssets.d.ts +8 -0
- package/build/services/audioPlaybackAssets.d.ts.map +1 -0
- package/build/services/audioPlaybackAssets.js +7 -0
- package/build/services/audioPlaybackAssets.js.map +1 -0
- package/build/services/blobPaths.d.ts +31 -0
- package/build/services/blobPaths.d.ts.map +1 -0
- package/build/services/blobPaths.js +86 -0
- package/build/services/blobPaths.js.map +1 -0
- package/build/services/cloudStreamApi.d.ts +59 -0
- package/build/services/cloudStreamApi.d.ts.map +1 -0
- package/build/services/cloudStreamApi.js +81 -0
- package/build/services/cloudStreamApi.js.map +1 -0
- package/build/services/effectiveCapabilities.d.ts +8 -0
- package/build/services/effectiveCapabilities.d.ts.map +1 -0
- package/build/services/effectiveCapabilities.js +23 -0
- package/build/services/effectiveCapabilities.js.map +1 -0
- package/build/services/gallerySyncClock.d.ts +17 -0
- package/build/services/gallerySyncClock.d.ts.map +1 -0
- package/build/services/gallerySyncClock.js +21 -0
- package/build/services/gallerySyncClock.js.map +1 -0
- package/build/services/glassesClockSync.d.ts +20 -0
- package/build/services/glassesClockSync.d.ts.map +1 -0
- package/build/services/glassesClockSync.js +97 -0
- package/build/services/glassesClockSync.js.map +1 -0
- package/build/services/manifestActions.d.ts +31 -0
- package/build/services/manifestActions.d.ts.map +1 -0
- package/build/services/manifestActions.js +54 -0
- package/build/services/manifestActions.js.map +1 -0
- package/build/services/manifestVersionGate.d.ts +28 -0
- package/build/services/manifestVersionGate.d.ts.map +1 -0
- package/build/services/manifestVersionGate.js +41 -0
- package/build/services/manifestVersionGate.js.map +1 -0
- package/build/services/memoryStoreInstance.d.ts +19 -0
- package/build/services/memoryStoreInstance.d.ts.map +1 -0
- package/build/services/memoryStoreInstance.js +65 -0
- package/build/services/memoryStoreInstance.js.map +1 -0
- package/build/services/navigation/roadNameResolver.d.ts +67 -0
- package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
- package/build/services/navigation/roadNameResolver.js +87 -0
- package/build/services/navigation/roadNameResolver.js.map +1 -0
- package/build/services/navigation/routesApiCodec.d.ts +38 -0
- package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
- package/build/services/navigation/routesApiCodec.js +68 -0
- package/build/services/navigation/routesApiCodec.js.map +1 -0
- package/build/services/otaDisplayState.d.ts +53 -0
- package/build/services/otaDisplayState.d.ts.map +1 -0
- package/build/services/otaDisplayState.js +114 -0
- package/build/services/otaDisplayState.js.map +1 -0
- package/build/services/otaInstallPolicy.d.ts +93 -0
- package/build/services/otaInstallPolicy.d.ts.map +1 -0
- package/build/services/otaInstallPolicy.js +117 -0
- package/build/services/otaInstallPolicy.js.map +1 -0
- package/build/services/otaLegacyMapping.d.ts +22 -0
- package/build/services/otaLegacyMapping.d.ts.map +1 -0
- package/build/services/otaLegacyMapping.js +56 -0
- package/build/services/otaLegacyMapping.js.map +1 -0
- package/build/services/otaManifestUrl.d.ts +2 -0
- package/build/services/otaManifestUrl.d.ts.map +1 -0
- package/build/services/otaManifestUrl.js +46 -0
- package/build/services/otaManifestUrl.js.map +1 -0
- package/build/services/slimStreamStatus.d.ts +18 -0
- package/build/services/slimStreamStatus.d.ts.map +1 -0
- package/build/services/slimStreamStatus.js +36 -0
- package/build/services/slimStreamStatus.js.map +1 -0
- package/build/services/soniox/SonioxDirectService.d.ts +109 -0
- package/build/services/soniox/SonioxDirectService.d.ts.map +1 -0
- package/build/services/soniox/SonioxDirectService.js +449 -0
- package/build/services/soniox/SonioxDirectService.js.map +1 -0
- package/build/services/soniox/SonioxRealtimeClient.d.ts +121 -0
- package/build/services/soniox/SonioxRealtimeClient.d.ts.map +1 -0
- package/build/services/soniox/SonioxRealtimeClient.js +301 -0
- package/build/services/soniox/SonioxRealtimeClient.js.map +1 -0
- package/build/services/soniox/SonioxTokenAssembler.d.ts +98 -0
- package/build/services/soniox/SonioxTokenAssembler.d.ts.map +1 -0
- package/build/services/soniox/SonioxTokenAssembler.js +394 -0
- package/build/services/soniox/SonioxTokenAssembler.js.map +1 -0
- package/build/services/speakerProfileStoreInstance.d.ts +8 -0
- package/build/services/speakerProfileStoreInstance.d.ts.map +1 -0
- package/build/services/speakerProfileStoreInstance.js +24 -0
- package/build/services/speakerProfileStoreInstance.js.map +1 -0
- package/build/services/uiShim.d.ts +38 -0
- package/build/services/uiShim.d.ts.map +1 -0
- package/build/services/uiShim.js +369 -0
- package/build/services/uiShim.js.map +1 -0
- package/build/stores/apps.d.ts +104 -0
- package/build/stores/apps.d.ts.map +1 -0
- package/build/stores/apps.js +503 -0
- package/build/stores/apps.js.map +1 -0
- package/build/stores/bluetoothSettingKeys.d.ts +4 -0
- package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
- package/build/stores/bluetoothSettingKeys.js +33 -0
- package/build/stores/bluetoothSettingKeys.js.map +1 -0
- package/build/stores/cloudClientStatus.d.ts +9 -0
- package/build/stores/cloudClientStatus.d.ts.map +1 -0
- package/build/stores/cloudClientStatus.js +24 -0
- package/build/stores/cloudClientStatus.js.map +1 -0
- package/build/stores/connection.d.ts +22 -0
- package/build/stores/connection.d.ts.map +1 -0
- package/build/stores/connection.js +43 -0
- package/build/stores/connection.js.map +1 -0
- package/build/stores/core.d.ts +15 -0
- package/build/stores/core.d.ts.map +1 -0
- package/build/stores/core.js +21 -0
- package/build/stores/core.js.map +1 -0
- package/build/stores/display.d.ts +24 -0
- package/build/stores/display.d.ts.map +1 -0
- package/build/stores/display.js +96 -0
- package/build/stores/display.js.map +1 -0
- package/build/stores/gallerySync.d.ts +103 -0
- package/build/stores/gallerySync.d.ts.map +1 -0
- package/build/stores/gallerySync.js +219 -0
- package/build/stores/gallerySync.js.map +1 -0
- package/build/stores/glasses.d.ts +62 -0
- package/build/stores/glasses.d.ts.map +1 -0
- package/build/stores/glasses.js +208 -0
- package/build/stores/glasses.js.map +1 -0
- package/build/stores/settings.d.ts +54 -0
- package/build/stores/settings.d.ts.map +1 -0
- package/build/stores/settings.js +1200 -0
- package/build/stores/settings.js.map +1 -0
- package/build/stores/transcriptionDebug.d.ts +25 -0
- package/build/stores/transcriptionDebug.d.ts.map +1 -0
- package/build/stores/transcriptionDebug.js +0 -0
- package/build/stores/transcriptionDebug.js.map +1 -0
- package/build/types/applet.d.ts +101 -0
- package/build/types/applet.d.ts.map +1 -0
- package/build/types/applet.js +5 -0
- package/build/types/applet.js.map +1 -0
- package/build/types/asg.d.ts +53 -0
- package/build/types/asg.d.ts.map +1 -0
- package/build/types/asg.js +2 -0
- package/build/types/asg.js.map +1 -0
- package/build/types/capabilities/even-realities-g1.d.ts +12 -0
- package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g1.js +57 -0
- package/build/types/capabilities/even-realities-g1.js.map +1 -0
- package/build/types/capabilities/even-realities-g2.d.ts +12 -0
- package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
- package/build/types/capabilities/even-realities-g2.js +83 -0
- package/build/types/capabilities/even-realities-g2.js.map +1 -0
- package/build/types/capabilities/mentra-display.d.ts +12 -0
- package/build/types/capabilities/mentra-display.d.ts.map +1 -0
- package/build/types/capabilities/mentra-display.js +65 -0
- package/build/types/capabilities/mentra-display.js.map +1 -0
- package/build/types/capabilities/mentra-live.d.ts +12 -0
- package/build/types/capabilities/mentra-live.d.ts.map +1 -0
- package/build/types/capabilities/mentra-live.js +94 -0
- package/build/types/capabilities/mentra-live.js.map +1 -0
- package/build/types/capabilities/nimo.d.ts +13 -0
- package/build/types/capabilities/nimo.d.ts.map +1 -0
- package/build/types/capabilities/nimo.js +72 -0
- package/build/types/capabilities/nimo.js.map +1 -0
- package/build/types/capabilities/none.d.ts +13 -0
- package/build/types/capabilities/none.d.ts.map +1 -0
- package/build/types/capabilities/none.js +67 -0
- package/build/types/capabilities/none.js.map +1 -0
- package/build/types/capabilities/simulated-glasses.d.ts +13 -0
- package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
- package/build/types/capabilities/simulated-glasses.js +82 -0
- package/build/types/capabilities/simulated-glasses.js.map +1 -0
- package/build/types/capabilities/vuzix-z100.d.ts +12 -0
- package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
- package/build/types/capabilities/vuzix-z100.js +54 -0
- package/build/types/capabilities/vuzix-z100.js.map +1 -0
- package/build/types/enums.d.ts +22 -0
- package/build/types/enums.d.ts.map +1 -0
- package/build/types/enums.js +27 -0
- package/build/types/enums.js.map +1 -0
- package/build/types/hardware.d.ts +155 -0
- package/build/types/hardware.d.ts.map +1 -0
- package/build/types/hardware.js +52 -0
- package/build/types/hardware.js.map +1 -0
- package/build/types/index.d.ts +11 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +10 -0
- package/build/types/index.js.map +1 -0
- package/build/utils/GlobalEventEmitter.d.ts +11 -0
- package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
- package/build/utils/GlobalEventEmitter.js +14 -0
- package/build/utils/GlobalEventEmitter.js.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
- package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
- package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
- package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
- package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
- package/build/utils/cloudClient/cloudSecureStore.js +26 -0
- package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
- package/build/utils/configuredDevHost.d.ts +6 -0
- package/build/utils/configuredDevHost.d.ts.map +1 -0
- package/build/utils/configuredDevHost.js +19 -0
- package/build/utils/configuredDevHost.js.map +1 -0
- package/build/utils/debouncedPatch.d.ts +6 -0
- package/build/utils/debouncedPatch.d.ts.map +1 -0
- package/build/utils/debouncedPatch.js +25 -0
- package/build/utils/debouncedPatch.js.map +1 -0
- package/build/utils/devLogging.d.ts +26 -0
- package/build/utils/devLogging.d.ts.map +1 -0
- package/build/utils/devLogging.js +116 -0
- package/build/utils/devLogging.js.map +1 -0
- package/build/utils/devMiniappLaunch.d.ts +55 -0
- package/build/utils/devMiniappLaunch.d.ts.map +1 -0
- package/build/utils/devMiniappLaunch.js +175 -0
- package/build/utils/devMiniappLaunch.js.map +1 -0
- package/build/utils/diagnosticContext.d.ts +3 -0
- package/build/utils/diagnosticContext.d.ts.map +1 -0
- package/build/utils/diagnosticContext.js +122 -0
- package/build/utils/diagnosticContext.js.map +1 -0
- package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
- package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
- package/build/utils/display/composer/ColumnComposer.js +204 -0
- package/build/utils/display/composer/ColumnComposer.js.map +1 -0
- package/build/utils/display/composer/index.d.ts +9 -0
- package/build/utils/display/composer/index.d.ts.map +1 -0
- package/build/utils/display/composer/index.js +9 -0
- package/build/utils/display/composer/index.js.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
- package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
- package/build/utils/display/helpers/DisplayHelpers.js +312 -0
- package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
- package/build/utils/display/helpers/ScrollView.d.ts +183 -0
- package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
- package/build/utils/display/helpers/ScrollView.js +257 -0
- package/build/utils/display/helpers/ScrollView.js.map +1 -0
- package/build/utils/display/helpers/index.d.ts +11 -0
- package/build/utils/display/helpers/index.d.ts.map +1 -0
- package/build/utils/display/helpers/index.js +10 -0
- package/build/utils/display/helpers/index.js.map +1 -0
- package/build/utils/display/index.d.ts +174 -0
- package/build/utils/display/index.d.ts.map +1 -0
- package/build/utils/display/index.js +188 -0
- package/build/utils/display/index.js.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
- package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
- package/build/utils/display/measurer/TextMeasurer.js +273 -0
- package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
- package/build/utils/display/measurer/index.d.ts +10 -0
- package/build/utils/display/measurer/index.d.ts.map +1 -0
- package/build/utils/display/measurer/index.js +11 -0
- package/build/utils/display/measurer/index.js.map +1 -0
- package/build/utils/display/measurer/script-detection.d.ts +53 -0
- package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
- package/build/utils/display/measurer/script-detection.js +184 -0
- package/build/utils/display/measurer/script-detection.js.map +1 -0
- package/build/utils/display/profiles/g1.d.ts +33 -0
- package/build/utils/display/profiles/g1.d.ts.map +1 -0
- package/build/utils/display/profiles/g1.js +213 -0
- package/build/utils/display/profiles/g1.js.map +1 -0
- package/build/utils/display/profiles/g2.d.ts +13 -0
- package/build/utils/display/profiles/g2.d.ts.map +1 -0
- package/build/utils/display/profiles/g2.js +34 -0
- package/build/utils/display/profiles/g2.js.map +1 -0
- package/build/utils/display/profiles/index.d.ts +12 -0
- package/build/utils/display/profiles/index.d.ts.map +1 -0
- package/build/utils/display/profiles/index.js +15 -0
- package/build/utils/display/profiles/index.js.map +1 -0
- package/build/utils/display/profiles/nex.d.ts +10 -0
- package/build/utils/display/profiles/nex.d.ts.map +1 -0
- package/build/utils/display/profiles/nex.js +150 -0
- package/build/utils/display/profiles/nex.js.map +1 -0
- package/build/utils/display/profiles/types.d.ts +103 -0
- package/build/utils/display/profiles/types.d.ts.map +1 -0
- package/build/utils/display/profiles/types.js +2 -0
- package/build/utils/display/profiles/types.js.map +1 -0
- package/build/utils/display/profiles/z100.d.ts +33 -0
- package/build/utils/display/profiles/z100.d.ts.map +1 -0
- package/build/utils/display/profiles/z100.js +182 -0
- package/build/utils/display/profiles/z100.js.map +1 -0
- package/build/utils/display/scene/anchor.d.ts +17 -0
- package/build/utils/display/scene/anchor.d.ts.map +1 -0
- package/build/utils/display/scene/anchor.js +33 -0
- package/build/utils/display/scene/anchor.js.map +1 -0
- package/build/utils/display/scene/degrade.d.ts +25 -0
- package/build/utils/display/scene/degrade.d.ts.map +1 -0
- package/build/utils/display/scene/degrade.js +64 -0
- package/build/utils/display/scene/degrade.js.map +1 -0
- package/build/utils/display/scene/differ.d.ts +38 -0
- package/build/utils/display/scene/differ.d.ts.map +1 -0
- package/build/utils/display/scene/differ.js +107 -0
- package/build/utils/display/scene/differ.js.map +1 -0
- package/build/utils/display/scene/index.d.ts +11 -0
- package/build/utils/display/scene/index.d.ts.map +1 -0
- package/build/utils/display/scene/index.js +7 -0
- package/build/utils/display/scene/index.js.map +1 -0
- package/build/utils/display/scene/process.d.ts +35 -0
- package/build/utils/display/scene/process.d.ts.map +1 -0
- package/build/utils/display/scene/process.js +201 -0
- package/build/utils/display/scene/process.js.map +1 -0
- package/build/utils/display/scene/store.d.ts +48 -0
- package/build/utils/display/scene/store.d.ts.map +1 -0
- package/build/utils/display/scene/store.js +0 -0
- package/build/utils/display/scene/store.js.map +1 -0
- package/build/utils/display/scene/types.d.ts +139 -0
- package/build/utils/display/scene/types.d.ts.map +1 -0
- package/build/utils/display/scene/types.js +0 -0
- package/build/utils/display/scene/types.js.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
- package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
- package/build/utils/display/wrapper/TextWrapper.js +471 -0
- package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
- package/build/utils/display/wrapper/index.d.ts +12 -0
- package/build/utils/display/wrapper/index.d.ts.map +1 -0
- package/build/utils/display/wrapper/index.js +12 -0
- package/build/utils/display/wrapper/index.js.map +1 -0
- package/build/utils/display/wrapper/types.d.ts +75 -0
- package/build/utils/display/wrapper/types.d.ts.map +1 -0
- package/build/utils/display/wrapper/types.js +11 -0
- package/build/utils/display/wrapper/types.js.map +1 -0
- package/build/utils/e2eMetrics.d.ts +6 -0
- package/build/utils/e2eMetrics.d.ts.map +1 -0
- package/build/utils/e2eMetrics.js +27 -0
- package/build/utils/e2eMetrics.js.map +1 -0
- package/build/utils/hardware/hardware.d.ts +42 -0
- package/build/utils/hardware/hardware.d.ts.map +1 -0
- package/build/utils/hardware/hardware.js +131 -0
- package/build/utils/hardware/hardware.js.map +1 -0
- package/build/utils/hardware/index.d.ts +2 -0
- package/build/utils/hardware/index.d.ts.map +1 -0
- package/build/utils/hardware/index.js +2 -0
- package/build/utils/hardware/index.js.map +1 -0
- package/build/utils/memory/search.d.ts +72 -0
- package/build/utils/memory/search.d.ts.map +1 -0
- package/build/utils/memory/search.js +178 -0
- package/build/utils/memory/search.js.map +1 -0
- package/build/utils/miniappDiagnostics.d.ts +64 -0
- package/build/utils/miniappDiagnostics.d.ts.map +1 -0
- package/build/utils/miniappDiagnostics.js +173 -0
- package/build/utils/miniappDiagnostics.js.map +1 -0
- package/build/utils/miniappGlobals.d.ts +59 -0
- package/build/utils/miniappGlobals.d.ts.map +1 -0
- package/build/utils/miniappGlobals.js +223 -0
- package/build/utils/miniappGlobals.js.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
- package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
- package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
- package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
- package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
- package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
- package/build/utils/permissions/galleryDisplayName.js +25 -0
- package/build/utils/permissions/galleryDisplayName.js.map +1 -0
- package/build/utils/speakerEmbedding.d.ts +8 -0
- package/build/utils/speakerEmbedding.d.ts.map +1 -0
- package/build/utils/speakerEmbedding.js +63 -0
- package/build/utils/speakerEmbedding.js.map +1 -0
- package/build/utils/storage/index.d.ts +3 -0
- package/build/utils/storage/index.d.ts.map +1 -0
- package/build/utils/storage/index.js +3 -0
- package/build/utils/storage/index.js.map +1 -0
- package/build/utils/storage/storage.d.ts +24 -0
- package/build/utils/storage/storage.d.ts.map +1 -0
- package/build/utils/storage/storage.js +85 -0
- package/build/utils/storage/storage.js.map +1 -0
- package/build/utils/storage/zip.d.ts +3 -0
- package/build/utils/storage/zip.d.ts.map +1 -0
- package/build/utils/storage/zip.js +14 -0
- package/build/utils/storage/zip.js.map +1 -0
- package/build/utils/timers/index.d.ts +3 -0
- package/build/utils/timers/index.d.ts.map +1 -0
- package/build/utils/timers/index.js +3 -0
- package/build/utils/timers/index.js.map +1 -0
- package/build/utils/timers/timers.d.ts +9 -0
- package/build/utils/timers/timers.d.ts.map +1 -0
- package/build/utils/timers/timers.js +142 -0
- package/build/utils/timers/timers.js.map +1 -0
- package/package.json +122 -0
- package/src/assets/silence.wav +0 -0
- package/src/devtools.ts +13 -0
- package/src/engine.ts +198 -0
- package/src/facades/dev.ts +213 -0
- package/src/facades/display.ts +17 -0
- package/src/facades/displayMirror.ts +33 -0
- package/src/facades/gallery.ts +69 -0
- package/src/facades/glasses.ts +219 -0
- package/src/facades/glassesSettings.ts +57 -0
- package/src/facades/glassesWifi.ts +68 -0
- package/src/facades/maps.ts +13 -0
- package/src/facades/memory.ts +46 -0
- package/src/facades/miniapps.ts +62 -0
- package/src/facades/notifications.ts +14 -0
- package/src/facades/ota.ts +177 -0
- package/src/facades/pairing.ts +329 -0
- package/src/facades/permissions.ts +165 -0
- package/src/facades/phoneNotifications.ts +41 -0
- package/src/facades/providerKeys.ts +31 -0
- package/src/facades/reports.ts +180 -0
- package/src/facades/session.ts +54 -0
- package/src/facades/settings.ts +57 -0
- package/src/facades/speakers.ts +152 -0
- package/src/facades/speech.ts +49 -0
- package/src/index.ts +214 -0
- package/src/internal.ts +155 -0
- package/src/runtime/bootstrap.ts +159 -0
- package/src/runtime/config.ts +155 -0
- package/src/runtime/scanQrSeam.ts +20 -0
- package/src/runtime/streamConfig.ts +34 -0
- package/src/services/AiTierResolution.ts +106 -0
- package/src/services/AppRegistry.ts +1245 -0
- package/src/services/AudioCloudUplink.ts +56 -0
- package/src/services/AudioPlaybackService.ts +873 -0
- package/src/services/AutomaticReportResult.ts +50 -0
- package/src/services/BlobStore.ts +823 -0
- package/src/services/CaptionsTesterReportService.ts +107 -0
- package/src/services/CloudAudioSubscriptionSync.ts +53 -0
- package/src/services/CloudClientService.ts +1031 -0
- package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
- package/src/services/ConnectionCoordinator.ts +65 -0
- package/src/services/DevServerBridge.ts +334 -0
- package/src/services/DeviceEventRouter.ts +266 -0
- package/src/services/DeviceStoreHydration.ts +130 -0
- package/src/services/DisplayProcessor.ts +775 -0
- package/src/services/ForegroundLocationPermission.ts +24 -0
- package/src/services/GlassesReadiness.ts +103 -0
- package/src/services/GlassesSettingsSync.ts +140 -0
- package/src/services/GlassesStatusProjection.ts +73 -0
- package/src/services/HeadingService.ts +122 -0
- package/src/services/HotspotOtaTransport.ts +184 -0
- package/src/services/HotspotShutdown.ts +41 -0
- package/src/services/JSCrashController.ts +189 -0
- package/src/services/JSCrashloopReportService.ts +66 -0
- package/src/services/JSLogPipeline.ts +166 -0
- package/src/services/JSRouter.ts +555 -0
- package/src/services/LocalDisplayManager.ts +815 -0
- package/src/services/LocalMiniappDataMigration.ts +102 -0
- package/src/services/LocalMiniappRuntime.ts +5747 -0
- package/src/services/LocalMiniappStorage.ts +82 -0
- package/src/services/LocalMiniappUserIdentity.ts +79 -0
- package/src/services/LocalSttFallbackCoordinator.ts +247 -0
- package/src/services/MapboxTokenService.ts +118 -0
- package/src/services/MemoryCapture.ts +61 -0
- package/src/services/MemoryStore.ts +633 -0
- package/src/services/MicStateCoordinator.ts +259 -0
- package/src/services/MiniappEngine.ts +143 -0
- package/src/services/MiniappLauncher.ts +365 -0
- package/src/services/MiniappLiveness.ts +24 -0
- package/src/services/MiniappRunningRegistry.ts +57 -0
- package/src/services/NativeHttpResponse.ts +6 -0
- package/src/services/NativeNavigationService.ts +176 -0
- package/src/services/NavigationHandlers.ts +527 -0
- package/src/services/NavigationService.ts +926 -0
- package/src/services/NotificationsEmitter.ts +49 -0
- package/src/services/OfflineSpeechModelService.ts +168 -0
- package/src/services/OtaArtifactDownloader.ts +312 -0
- package/src/services/OtaInstallCoordinator.ts +1707 -0
- package/src/services/OtaService.ts +89 -0
- package/src/services/OtaUpdateCheckService.ts +550 -0
- package/src/services/PairingIdentity.ts +154 -0
- package/src/services/PhoneCalendarHelpers.ts +212 -0
- package/src/services/PhoneCalendarService.ts +61 -0
- package/src/services/PhoneCameraFovCoordinator.ts +210 -0
- package/src/services/PhoneLocationService.ts +120 -0
- package/src/services/PhoneNotificationsSync.ts +46 -0
- package/src/services/PhonePhotoCoordinator.ts +435 -0
- package/src/services/PhoneStreamCoordinator.ts +874 -0
- package/src/services/PhoneVideoCoordinator.ts +203 -0
- package/src/services/ProviderKeyValidation.ts +57 -0
- package/src/services/STTModelManager.ts +434 -0
- package/src/services/SceneRenderer.ts +320 -0
- package/src/services/SentenceTtsPipeline.ts +106 -0
- package/src/services/SpeakerIdModelManager.ts +151 -0
- package/src/services/SpeakerIdSync.ts +79 -0
- package/src/services/SpeakerLabelResolver.ts +140 -0
- package/src/services/SpeakerProfileStore.ts +265 -0
- package/src/services/SpeakerSegmentResolver.ts +194 -0
- package/src/services/StreamLifecycleController.ts +203 -0
- package/src/services/SupportProfileSync.ts +218 -0
- package/src/services/TTSModelManager.ts +466 -0
- package/src/services/TranscriptionRouting.ts +47 -0
- package/src/services/TtsTextSanitizer.ts +66 -0
- package/src/services/UIRouter.ts +250 -0
- package/src/services/WebviewBridge.ts +50 -0
- package/src/services/WifiAdbRequest.ts +53 -0
- package/src/services/asg/GalleryMediaIntegrityReportService.ts +72 -0
- package/src/services/asg/asgCameraApi.ts +1786 -0
- package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
- package/src/services/asg/cameraRollExportLedger.ts +122 -0
- package/src/services/asg/galleryMediaValidation.ts +185 -0
- package/src/services/asg/galleryNotices.ts +61 -0
- package/src/services/asg/galleryPathMigration.ts +22 -0
- package/src/services/asg/gallerySettingsService.ts +68 -0
- package/src/services/asg/gallerySyncNotifications.ts +235 -0
- package/src/services/asg/gallerySyncService.ts +2278 -0
- package/src/services/asg/galleryTransferLedger.ts +312 -0
- package/src/services/asg/localNetworkTransport.ts +169 -0
- package/src/services/asg/localStorageService.ts +652 -0
- package/src/services/asg/mediaProcessingQueue.ts +518 -0
- package/src/services/audioPlaybackAssets.ts +8 -0
- package/src/services/blobPaths.ts +86 -0
- package/src/services/cloudStreamApi.ts +142 -0
- package/src/services/effectiveCapabilities.ts +27 -0
- package/src/services/gallerySyncClock.ts +39 -0
- package/src/services/glassesClockSync.ts +115 -0
- package/src/services/manifestActions.ts +80 -0
- package/src/services/manifestVersionGate.ts +43 -0
- package/src/services/memoryStoreInstance.ts +70 -0
- package/src/services/navigation/roadNameResolver.ts +103 -0
- package/src/services/navigation/routesApiCodec.ts +69 -0
- package/src/services/otaDisplayState.ts +156 -0
- package/src/services/otaInstallPolicy.ts +132 -0
- package/src/services/otaLegacyMapping.ts +71 -0
- package/src/services/otaManifestUrl.ts +53 -0
- package/src/services/slimStreamStatus.ts +39 -0
- package/src/services/soniox/SonioxDirectService.ts +517 -0
- package/src/services/soniox/SonioxRealtimeClient.ts +349 -0
- package/src/services/soniox/SonioxTokenAssembler.ts +451 -0
- package/src/services/speakerProfileStoreInstance.ts +25 -0
- package/src/services/uiShim.ts +375 -0
- package/src/stores/apps.ts +626 -0
- package/src/stores/bluetoothSettingKeys.ts +35 -0
- package/src/stores/cloudClientStatus.ts +37 -0
- package/src/stores/connection.ts +69 -0
- package/src/stores/core.ts +32 -0
- package/src/stores/display.ts +121 -0
- package/src/stores/gallerySync.ts +384 -0
- package/src/stores/glasses.ts +314 -0
- package/src/stores/settings.ts +1299 -0
- package/src/stores/transcriptionDebug.ts +0 -0
- package/src/types/applet.ts +121 -0
- package/src/types/asg.ts +58 -0
- package/src/types/capabilities/even-realities-g1.ts +70 -0
- package/src/types/capabilities/even-realities-g2.ts +98 -0
- package/src/types/capabilities/mentra-display.ts +78 -0
- package/src/types/capabilities/mentra-live.ts +106 -0
- package/src/types/capabilities/nimo.ts +84 -0
- package/src/types/capabilities/none.ts +79 -0
- package/src/types/capabilities/simulated-glasses.ts +95 -0
- package/src/types/capabilities/vuzix-z100.ts +67 -0
- package/src/types/enums.ts +27 -0
- package/src/types/hardware.ts +220 -0
- package/src/types/index.ts +38 -0
- package/src/utils/GlobalEventEmitter.ts +15 -0
- package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
- package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
- package/src/utils/configuredDevHost.ts +17 -0
- package/src/utils/debouncedPatch.ts +28 -0
- package/src/utils/devLogging.ts +140 -0
- package/src/utils/devMiniappLaunch.ts +196 -0
- package/src/utils/diagnosticContext.ts +159 -0
- package/src/utils/display/composer/ColumnComposer.ts +285 -0
- package/src/utils/display/composer/index.ts +15 -0
- package/src/utils/display/helpers/DisplayHelpers.ts +409 -0
- package/src/utils/display/helpers/ScrollView.ts +326 -0
- package/src/utils/display/helpers/index.ts +14 -0
- package/src/utils/display/index.ts +273 -0
- package/src/utils/display/measurer/TextMeasurer.ts +346 -0
- package/src/utils/display/measurer/index.ts +21 -0
- package/src/utils/display/measurer/script-detection.ts +218 -0
- package/src/utils/display/profiles/g1.ts +236 -0
- package/src/utils/display/profiles/g2.ts +39 -0
- package/src/utils/display/profiles/index.ts +28 -0
- package/src/utils/display/profiles/nex.ts +166 -0
- package/src/utils/display/profiles/types.ts +132 -0
- package/src/utils/display/profiles/z100.ts +198 -0
- package/src/utils/display/scene/anchor.ts +39 -0
- package/src/utils/display/scene/degrade.ts +80 -0
- package/src/utils/display/scene/differ.ts +128 -0
- package/src/utils/display/scene/index.ts +24 -0
- package/src/utils/display/scene/process.ts +228 -0
- package/src/utils/display/scene/store.ts +0 -0
- package/src/utils/display/scene/types.ts +0 -0
- package/src/utils/display/wrapper/TextWrapper.ts +546 -0
- package/src/utils/display/wrapper/index.ts +15 -0
- package/src/utils/display/wrapper/types.ts +102 -0
- package/src/utils/e2eMetrics.ts +30 -0
- package/src/utils/hardware/hardware.ts +171 -0
- package/src/utils/hardware/index.ts +1 -0
- package/src/utils/memory/search.ts +204 -0
- package/src/utils/miniappDiagnostics.ts +226 -0
- package/src/utils/miniappGlobals.ts +259 -0
- package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
- package/src/utils/permissions/galleryDisplayName.ts +28 -0
- package/src/utils/speakerEmbedding.ts +58 -0
- package/src/utils/storage/index.ts +2 -0
- package/src/utils/storage/storage.ts +101 -0
- package/src/utils/storage/zip.ts +13 -0
- package/src/utils/timers/index.ts +2 -0
- package/src/utils/timers/timers.ts +175 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpeakerLabelResolver — engine wiring around SpeakerSegmentResolver.
|
|
3
|
+
*
|
|
4
|
+
* Subscribes to native `speaker_detected` bridge events (on-device speaker
|
|
5
|
+
* identification windows) and annotates cloud transcription events with a
|
|
6
|
+
* user/other/unknown determination — WITHOUT mutating the raw provider
|
|
7
|
+
* `speakerId` label. The two label spaces stay distinguishable; resolution is
|
|
8
|
+
* additive.
|
|
9
|
+
*
|
|
10
|
+
* Voice recognition is owner-only (the store holds the user's own "Your
|
|
11
|
+
* voice" profile), so the determination is framed as `isUser`:
|
|
12
|
+
* - matched the enrolled voice → isUser: true
|
|
13
|
+
* - confidently a different voice → isUser: false
|
|
14
|
+
* - ambiguous / no evidence → no annotation (honest unknown)
|
|
15
|
+
*
|
|
16
|
+
* "Confidently different" uses a second, lower similarity gate: a no-match
|
|
17
|
+
* window only counts as OTHER evidence when its cosine similarity is clearly
|
|
18
|
+
* below the enrolled centroid (OTHER_MAX_SIMILARITY), not merely below the
|
|
19
|
+
* native match threshold (0.45). Windows in the ambiguous band in between —
|
|
20
|
+
* the user's own degraded audio (wind, short utterances, overlap) lands there
|
|
21
|
+
* — assert nothing.
|
|
22
|
+
*
|
|
23
|
+
* Cloud segment times (`startMs`/`endMs`) are stream-relative, not epoch, so
|
|
24
|
+
* segments are anchored on the JS receive time: the segment is assumed to
|
|
25
|
+
* have just ended at receipt, spanning [receivedAt - duration, receivedAt].
|
|
26
|
+
* Transport latency makes this approximate; the resolver's overlap voting
|
|
27
|
+
* absorbs it (accepted v1 caveat — no sample-accurate alignment).
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
import BluetoothSdk from "@glassly/bluetooth-sdk/internal"
|
|
31
|
+
|
|
32
|
+
import {SpeakerSegmentResolver} from "./SpeakerSegmentResolver"
|
|
33
|
+
|
|
34
|
+
/** Clamp for implausible provider durations (protects the epoch estimate). */
|
|
35
|
+
const MAX_SEGMENT_DURATION_MS = 30_000
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* No-match windows at or below this cosine similarity are affirmative OTHER
|
|
39
|
+
* evidence. The model's benchmarked cross-speaker range tops out near 0.46
|
|
40
|
+
* and same-speaker scores sit well above it; 0.35 leaves an ambiguous band
|
|
41
|
+
* (0.35–0.45, up to the native match threshold) where degraded own-voice
|
|
42
|
+
* windows fail to match without being mislabeled as someone else.
|
|
43
|
+
*/
|
|
44
|
+
export const OTHER_MAX_SIMILARITY = 0.35
|
|
45
|
+
|
|
46
|
+
export interface CloudSegmentLike {
|
|
47
|
+
isFinal: boolean
|
|
48
|
+
speakerId?: string
|
|
49
|
+
startMs?: number
|
|
50
|
+
endMs?: number
|
|
51
|
+
durationMs?: number
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
export interface SpeakerDetermination {
|
|
55
|
+
/**
|
|
56
|
+
* true = the enrolled voice (the user themself); false = confidently a
|
|
57
|
+
* different voice. Unknown segments never produce a determination.
|
|
58
|
+
*/
|
|
59
|
+
isUser: boolean
|
|
60
|
+
/** Enrolled profile id when isUser (stable opaque id for downstream). */
|
|
61
|
+
resolvedSpeakerId?: string
|
|
62
|
+
/** Enrolled display name when isUser — on-device PII, stripped before miniapp fan-out. */
|
|
63
|
+
resolvedSpeakerName?: string
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
class SpeakerLabelResolver {
|
|
67
|
+
private readonly resolver = new SpeakerSegmentResolver()
|
|
68
|
+
private sub: {remove: () => void} | null = null
|
|
69
|
+
|
|
70
|
+
start(): void {
|
|
71
|
+
if (this.sub) return
|
|
72
|
+
this.sub = BluetoothSdk.addListener("speaker_detected", (event) => {
|
|
73
|
+
const profileId = typeof event.speakerId === "string" && event.speakerId.length > 0 ? event.speakerId : null
|
|
74
|
+
const name = typeof event.name === "string" && event.name.length > 0 ? event.name : null
|
|
75
|
+
const similarity = typeof event.similarity === "number" ? event.similarity : null
|
|
76
|
+
const confidentOther = profileId === null && similarity !== null && similarity <= OTHER_MAX_SIMILARITY
|
|
77
|
+
console.log(
|
|
78
|
+
`SpeakerID: window ${profileId ? (name ?? "user") : confidentOther ? "other" : "ambiguous"} ` +
|
|
79
|
+
`sim=${similarity?.toFixed?.(3) ?? similarity} ` +
|
|
80
|
+
`span=${event.endMs - event.startMs}ms endAge=${Date.now() - event.endMs}ms`,
|
|
81
|
+
)
|
|
82
|
+
this.resolver.addWindow({profileId, name, confidentOther, startMs: event.startMs, endMs: event.endMs})
|
|
83
|
+
})
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
stop(): void {
|
|
87
|
+
this.sub?.remove()
|
|
88
|
+
this.sub = null
|
|
89
|
+
this.resolver.reset()
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Per audio session: drop identification evidence and carry-forward state. */
|
|
93
|
+
reset(): void {
|
|
94
|
+
this.resolver.reset()
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Resolve a FINAL cloud segment received just now. Returns null when there
|
|
99
|
+
* is no confident determination for it.
|
|
100
|
+
*/
|
|
101
|
+
resolveCloudSegment(d: CloudSegmentLike, receivedAtMs: number = Date.now()): SpeakerDetermination | null {
|
|
102
|
+
if (!d.isFinal) return null
|
|
103
|
+
const rawDuration = d.durationMs ?? (d.endMs != null && d.startMs != null ? d.endMs - d.startMs : 0)
|
|
104
|
+
const duration = Math.min(Math.max(rawDuration, 0), MAX_SEGMENT_DURATION_MS)
|
|
105
|
+
const resolution = this.resolver.resolve({
|
|
106
|
+
startMs: receivedAtMs - duration,
|
|
107
|
+
endMs: receivedAtMs,
|
|
108
|
+
label: d.speakerId,
|
|
109
|
+
})
|
|
110
|
+
const determination: SpeakerDetermination | null = resolution
|
|
111
|
+
? resolution.resolvedSpeakerId != null
|
|
112
|
+
? // Enrollment is owner-only (speakers.enrollSelf), so any enrolled
|
|
113
|
+
// match is the user — no owner-id lookup needed.
|
|
114
|
+
{
|
|
115
|
+
isUser: true,
|
|
116
|
+
resolvedSpeakerId: resolution.resolvedSpeakerId,
|
|
117
|
+
resolvedSpeakerName: resolution.resolvedSpeakerName ?? undefined,
|
|
118
|
+
}
|
|
119
|
+
: {isUser: false}
|
|
120
|
+
: null
|
|
121
|
+
console.log(
|
|
122
|
+
`SpeakerID: cloud final label=${d.speakerId ?? "-"} dur=${duration}ms → ` +
|
|
123
|
+
(determination ? (determination.isUser ? "user" : "other") : "unknown"),
|
|
124
|
+
)
|
|
125
|
+
return determination
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Local-STT transcripts are stamped natively (SpeakerIdEngine.recentMatch →
|
|
130
|
+
* `resolvedSpeakerId`); that join only produces positive matches, so this
|
|
131
|
+
* adds `isUser: true` when the native stamp is present and nothing else.
|
|
132
|
+
*/
|
|
133
|
+
annotateLocalTranscript<T extends {resolvedSpeakerId?: unknown}>(event: T): T & {isUser?: boolean} {
|
|
134
|
+
const matched = typeof event.resolvedSpeakerId === "string" && event.resolvedSpeakerId.length > 0
|
|
135
|
+
return matched ? {...event, isUser: true} : event
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
const speakerLabelResolver = new SpeakerLabelResolver()
|
|
140
|
+
export default speakerLabelResolver
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpeakerProfileStore — device-local voice profiles for on-device speaker
|
|
3
|
+
* identification (Settings > Voice Recognition). Since v2 the product surface
|
|
4
|
+
* is owner-only ("Your voice"), enrolled through `speakers.enrollSelf`; the
|
|
5
|
+
* store keeps its generic multi-profile shape underneath.
|
|
6
|
+
*
|
|
7
|
+
* Voice embeddings are biometric data: profiles are NEVER synced (no
|
|
8
|
+
* saveOnServer anywhere near this store), mirroring the repo's device-local
|
|
9
|
+
* conventions for memory and API keys. Raw enrollment audio is discarded by
|
|
10
|
+
* the native layer; only embeddings and their mean centroid persist here.
|
|
11
|
+
*
|
|
12
|
+
* Pure class + injected backend (same pattern as MemoryStore) so the store
|
|
13
|
+
* stays dependency-free for tests; speakerProfileStoreInstance.ts binds MMKV
|
|
14
|
+
* and the user-id resolver.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import {embeddingFromBase64, embeddingToBase64, meanEmbedding} from "../utils/speakerEmbedding"
|
|
18
|
+
|
|
19
|
+
const KEY_ROOT = "speaker_profiles_"
|
|
20
|
+
const MAX_PROFILES = 50
|
|
21
|
+
|
|
22
|
+
/** The model whose embedding space current profiles live in. Embeddings from
|
|
23
|
+
* different models are incompatible — a model swap must trigger re-enrollment
|
|
24
|
+
* (detectable via each profile's `modelId`). */
|
|
25
|
+
export const SPEAKER_ID_MODEL_ID = "3dspeaker_speech_campplus_sv_zh_en_16k-common_advanced"
|
|
26
|
+
export const SPEAKER_ID_EMBEDDING_DIM = 192
|
|
27
|
+
|
|
28
|
+
export type SpeakerSampleSource = "glasses" | "phone" | "unknown"
|
|
29
|
+
|
|
30
|
+
export interface SpeakerSample {
|
|
31
|
+
/** base64 Float32Array (little-endian), length = dim. */
|
|
32
|
+
embedding: string
|
|
33
|
+
source: SpeakerSampleSource
|
|
34
|
+
createdAt: number
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface SpeakerProfile {
|
|
38
|
+
/** "spk_"-prefixed id — this is what flows downstream as a speaker id. */
|
|
39
|
+
id: string
|
|
40
|
+
/** Display name, user-entered. On-device PII — never exposed to miniapps. */
|
|
41
|
+
name: string
|
|
42
|
+
modelId: string
|
|
43
|
+
dim: number
|
|
44
|
+
/** base64 Float32Array — the matching vector (mean of samples, normalized). */
|
|
45
|
+
centroid: string
|
|
46
|
+
samples: SpeakerSample[]
|
|
47
|
+
createdAt: number
|
|
48
|
+
updatedAt: number
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface SpeakerProfileStoreState {
|
|
52
|
+
/**
|
|
53
|
+
* v2 = owner-only voice recognition (2026-08-10): the store holds the
|
|
54
|
+
* device owner's "Your voice" profile, enrolled via `speakers.enrollSelf`.
|
|
55
|
+
* v1 multi-speaker rosters are cleared on load rather than migrated — the
|
|
56
|
+
* roster UI is gone and a v1 profile can't be assumed to be the owner.
|
|
57
|
+
*/
|
|
58
|
+
version: 2
|
|
59
|
+
profiles: SpeakerProfile[]
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
export interface SpeakerProfileStoreBackend {
|
|
63
|
+
get(key: string): unknown | null
|
|
64
|
+
set(key: string, value: unknown): void
|
|
65
|
+
remove(key: string): void
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export interface SpeakerProfileStoreHooks {
|
|
69
|
+
getUserId: () => Promise<string>
|
|
70
|
+
backend: SpeakerProfileStoreBackend
|
|
71
|
+
now?: () => number
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
function makeId(now: number): string {
|
|
75
|
+
return `spk_${now.toString(36)}${Math.random().toString(36).slice(2, 10)}`
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export class SpeakerProfileStore {
|
|
79
|
+
private profiles: SpeakerProfile[] = []
|
|
80
|
+
private loadedUserId: string | null = null
|
|
81
|
+
private loadPromise: Promise<void> | null = null
|
|
82
|
+
private readonly changeListeners = new Set<() => void>()
|
|
83
|
+
|
|
84
|
+
constructor(private readonly hooks: SpeakerProfileStoreHooks) {}
|
|
85
|
+
|
|
86
|
+
onChanged(listener: () => void): () => void {
|
|
87
|
+
this.changeListeners.add(listener)
|
|
88
|
+
return () => this.changeListeners.delete(listener)
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
async list(): Promise<SpeakerProfile[]> {
|
|
92
|
+
await this.ensureLoaded()
|
|
93
|
+
return [...this.profiles]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
async get(id: string): Promise<SpeakerProfile | null> {
|
|
97
|
+
await this.ensureLoaded()
|
|
98
|
+
return this.profiles.find((p) => p.id === id) ?? null
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Create a profile from enrollment chunk embeddings (base64 Float32Arrays).
|
|
103
|
+
* The centroid is their normalized mean. Throws when the cap is reached or
|
|
104
|
+
* no valid embeddings were provided.
|
|
105
|
+
*/
|
|
106
|
+
async add(name: string, embeddings: string[], source: SpeakerSampleSource): Promise<SpeakerProfile> {
|
|
107
|
+
const displayName = name.trim()
|
|
108
|
+
if (!displayName) throw new Error("Speaker name is required")
|
|
109
|
+
await this.ensureLoaded()
|
|
110
|
+
if (this.profiles.length >= MAX_PROFILES) {
|
|
111
|
+
throw new Error(`Speaker profile limit reached (${MAX_PROFILES})`)
|
|
112
|
+
}
|
|
113
|
+
const vectors = decodeAll(embeddings)
|
|
114
|
+
if (vectors.length === 0) throw new Error("No valid embeddings provided")
|
|
115
|
+
|
|
116
|
+
const now = this.now()
|
|
117
|
+
const profile: SpeakerProfile = {
|
|
118
|
+
id: makeId(now),
|
|
119
|
+
name: displayName,
|
|
120
|
+
modelId: SPEAKER_ID_MODEL_ID,
|
|
121
|
+
dim: vectors[0].length,
|
|
122
|
+
centroid: embeddingToBase64(meanEmbedding(vectors)),
|
|
123
|
+
samples: embeddings.map((embedding) => ({embedding, source, createdAt: now})),
|
|
124
|
+
createdAt: now,
|
|
125
|
+
updatedAt: now,
|
|
126
|
+
}
|
|
127
|
+
this.profiles.push(profile)
|
|
128
|
+
this.persist()
|
|
129
|
+
this.emitChanged()
|
|
130
|
+
return profile
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
/** Append "Improve recognition" samples and recompute the centroid. */
|
|
134
|
+
async addSamples(id: string, embeddings: string[], source: SpeakerSampleSource): Promise<SpeakerProfile | null> {
|
|
135
|
+
await this.ensureLoaded()
|
|
136
|
+
const profile = this.profiles.find((p) => p.id === id)
|
|
137
|
+
if (!profile) return null
|
|
138
|
+
const now = this.now()
|
|
139
|
+
profile.samples.push(...embeddings.map((embedding) => ({embedding, source, createdAt: now})))
|
|
140
|
+
const vectors = decodeAll(profile.samples.map((s) => s.embedding))
|
|
141
|
+
if (vectors.length > 0) {
|
|
142
|
+
profile.centroid = embeddingToBase64(meanEmbedding(vectors))
|
|
143
|
+
profile.dim = vectors[0].length
|
|
144
|
+
}
|
|
145
|
+
profile.updatedAt = now
|
|
146
|
+
this.persist()
|
|
147
|
+
this.emitChanged()
|
|
148
|
+
return profile
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
async rename(id: string, name: string): Promise<boolean> {
|
|
152
|
+
const displayName = name.trim()
|
|
153
|
+
if (!displayName) return false
|
|
154
|
+
await this.ensureLoaded()
|
|
155
|
+
const profile = this.profiles.find((p) => p.id === id)
|
|
156
|
+
if (!profile) return false
|
|
157
|
+
profile.name = displayName
|
|
158
|
+
profile.updatedAt = this.now()
|
|
159
|
+
this.persist()
|
|
160
|
+
this.emitChanged()
|
|
161
|
+
return true
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
async remove(id: string): Promise<boolean> {
|
|
165
|
+
await this.ensureLoaded()
|
|
166
|
+
const before = this.profiles.length
|
|
167
|
+
this.profiles = this.profiles.filter((p) => p.id !== id)
|
|
168
|
+
if (this.profiles.length === before) return false
|
|
169
|
+
this.persist()
|
|
170
|
+
this.emitChanged()
|
|
171
|
+
return true
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
/** Ids of profiles enrolled under a different (incompatible) model. */
|
|
175
|
+
async staleProfileIds(currentModelId: string = SPEAKER_ID_MODEL_ID): Promise<string[]> {
|
|
176
|
+
await this.ensureLoaded()
|
|
177
|
+
return this.profiles.filter((p) => p.modelId !== currentModelId).map((p) => p.id)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
// === Load / persist ===
|
|
181
|
+
|
|
182
|
+
private now(): number {
|
|
183
|
+
return this.hooks.now?.() ?? Date.now()
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
private async ensureLoaded(): Promise<void> {
|
|
187
|
+
const userId = (await this.hooks.getUserId()).trim()
|
|
188
|
+
if (!userId) throw new Error("Glassly user identity is unavailable")
|
|
189
|
+
if (this.loadedUserId === userId) return
|
|
190
|
+
if (!this.loadPromise) {
|
|
191
|
+
this.loadPromise = this.loadFor(userId).finally(() => {
|
|
192
|
+
this.loadPromise = null
|
|
193
|
+
})
|
|
194
|
+
}
|
|
195
|
+
await this.loadPromise
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
private async loadFor(userId: string): Promise<void> {
|
|
199
|
+
this.profiles = []
|
|
200
|
+
const raw = this.hooks.backend.get(this.key(userId))
|
|
201
|
+
const state = parseState(raw)
|
|
202
|
+
if (state) this.profiles = state.profiles
|
|
203
|
+
this.loadedUserId = userId
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
private key(userId: string): string {
|
|
207
|
+
return `${KEY_ROOT}${userId}`
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
private persist(): void {
|
|
211
|
+
if (this.loadedUserId == null) return
|
|
212
|
+
const state: SpeakerProfileStoreState = {version: 2, profiles: this.profiles}
|
|
213
|
+
this.hooks.backend.set(this.key(this.loadedUserId), JSON.stringify(state))
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
private emitChanged(): void {
|
|
217
|
+
for (const listener of this.changeListeners) {
|
|
218
|
+
try {
|
|
219
|
+
listener()
|
|
220
|
+
} catch (err) {
|
|
221
|
+
console.warn("SpeakerProfileStore: onChanged listener threw:", err instanceof Error ? err.message : err)
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
function decodeAll(embeddings: string[]): Float32Array[] {
|
|
228
|
+
const out: Float32Array[] = []
|
|
229
|
+
for (const b64 of embeddings) {
|
|
230
|
+
try {
|
|
231
|
+
const v = embeddingFromBase64(b64)
|
|
232
|
+
if (v.length > 0) out.push(v)
|
|
233
|
+
} catch {
|
|
234
|
+
// skip malformed sample
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
return out
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/** Stored value may be a JSON string or a raw object (backend-dependent). */
|
|
241
|
+
function parseState(raw: unknown): SpeakerProfileStoreState | null {
|
|
242
|
+
try {
|
|
243
|
+
const value = typeof raw === "string" ? (JSON.parse(raw) as unknown) : raw
|
|
244
|
+
if (!value || typeof value !== "object") return null
|
|
245
|
+
const state = value as Record<string, unknown>
|
|
246
|
+
// version 1 (multi-speaker roster) intentionally falls through to null —
|
|
247
|
+
// see SpeakerProfileStoreState: old rosters are cleared, not migrated.
|
|
248
|
+
if (state.version !== 2 || !Array.isArray(state.profiles)) return null
|
|
249
|
+
return {version: 2, profiles: (state.profiles as unknown[]).filter(isProfile)}
|
|
250
|
+
} catch {
|
|
251
|
+
return null
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
function isProfile(v: unknown): v is SpeakerProfile {
|
|
256
|
+
if (!v || typeof v !== "object") return false
|
|
257
|
+
const p = v as Record<string, unknown>
|
|
258
|
+
return (
|
|
259
|
+
typeof p.id === "string" &&
|
|
260
|
+
typeof p.name === "string" &&
|
|
261
|
+
typeof p.modelId === "string" &&
|
|
262
|
+
typeof p.centroid === "string" &&
|
|
263
|
+
Array.isArray(p.samples)
|
|
264
|
+
)
|
|
265
|
+
}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SpeakerSegmentResolver — pure per-segment speaker resolution logic.
|
|
3
|
+
*
|
|
4
|
+
* Joins on-device speaker-identification windows (native SpeakerIdEngine
|
|
5
|
+
* `speaker_detected` events) against transcription segments by time overlap.
|
|
6
|
+
*
|
|
7
|
+
* Design constraint (see notes/speaker-id-plan.md §3.3): provider diarization
|
|
8
|
+
* labels (Soniox "Speaker N") are NOT reliable — the same person can flicker
|
|
9
|
+
* across labels and one label can absorb two people. The label is never an
|
|
10
|
+
* identity and no label→profile map is kept; it is used only as a hint that
|
|
11
|
+
* the speaker MAY have changed:
|
|
12
|
+
* 1. Carry-forward: a segment with no overlapping ID window may inherit the
|
|
13
|
+
* previous segment's resolution only if its label is unchanged and the
|
|
14
|
+
* gap is small. A label change breaks carry-forward.
|
|
15
|
+
* 2. Conflict damping: if the resolved identity changes while the label did
|
|
16
|
+
* NOT change, a stronger vote is required before switching — this absorbs
|
|
17
|
+
* phone/cloud clock skew at turn boundaries without ever letting the
|
|
18
|
+
* label veto strong embedding evidence.
|
|
19
|
+
* Segments without sufficient ID evidence carry no resolution — unknown is
|
|
20
|
+
* the honest default, never "whatever this label resolved to last time".
|
|
21
|
+
*
|
|
22
|
+
* Resolution is tri-state: an enrolled identity, a confident OTHER
|
|
23
|
+
* (`resolvedSpeakerId: null` — a voice that is affirmatively not enrolled;
|
|
24
|
+
* windows in the ambiguous similarity band never produce it), or null.
|
|
25
|
+
*
|
|
26
|
+
* Clock caveat accepted for v1: phone/cloud alignment is approximate
|
|
27
|
+
* (transport latency); overlap voting over ≥2 s windows absorbs it. Do not
|
|
28
|
+
* attempt sample-accurate alignment.
|
|
29
|
+
*/
|
|
30
|
+
|
|
31
|
+
export interface SpeakerIdWindow {
|
|
32
|
+
/** Matched profile id, or null when the voice matched no enrolled profile. */
|
|
33
|
+
profileId: string | null
|
|
34
|
+
name: string | null
|
|
35
|
+
/**
|
|
36
|
+
* For null-profile windows only: true when the similarity was clearly BELOW
|
|
37
|
+
* the enrolled voice (not merely below the match threshold) — affirmative
|
|
38
|
+
* evidence of a different person. Null-profile windows without this flag are
|
|
39
|
+
* ambiguous: they block carry-forward when dominant but assert nothing.
|
|
40
|
+
*/
|
|
41
|
+
confidentOther?: boolean
|
|
42
|
+
/** Epoch ms (native clock — same epoch as JS Date.now()). */
|
|
43
|
+
startMs: number
|
|
44
|
+
endMs: number
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export interface SegmentInput {
|
|
48
|
+
/** Estimated epoch ms span of the spoken segment. */
|
|
49
|
+
startMs: number
|
|
50
|
+
endMs: number
|
|
51
|
+
/** Raw provider diarization label — hint only, never an identity. */
|
|
52
|
+
label?: string
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export interface SegmentResolution {
|
|
56
|
+
/**
|
|
57
|
+
* Matched enrolled profile id — or null for a confident OTHER: the segment
|
|
58
|
+
* was dominated by a voice that is affirmatively not any enrolled profile.
|
|
59
|
+
*/
|
|
60
|
+
resolvedSpeakerId: string | null
|
|
61
|
+
resolvedSpeakerName: string | null
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Windows older than this (vs. the resolver's newest timestamp) are dropped. */
|
|
65
|
+
export const WINDOW_RETENTION_MS = 60_000
|
|
66
|
+
/** Carry-forward dies when the gap since the previous segment exceeds this. */
|
|
67
|
+
export const CARRY_FORWARD_MAX_GAP_MS = 5_000
|
|
68
|
+
/** A winning vote needs at least this much absolute overlap. */
|
|
69
|
+
export const MIN_WINNING_OVERLAP_MS = 250
|
|
70
|
+
|
|
71
|
+
interface Candidate {
|
|
72
|
+
/** "profile" = enrolled match; "other" = confident non-enrolled voice; "unknown" = ambiguous no-match. */
|
|
73
|
+
kind: "profile" | "other" | "unknown"
|
|
74
|
+
profileId: string | null
|
|
75
|
+
name: string | null
|
|
76
|
+
overlapMs: number
|
|
77
|
+
windowCount: number
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/** Damping-comparison key: OTHER counts as its own identity, distinct from every profile. */
|
|
81
|
+
function identityKey(res: SegmentResolution): string {
|
|
82
|
+
return res.resolvedSpeakerId ?? "\0other"
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
interface LastSegmentState {
|
|
86
|
+
endMs: number
|
|
87
|
+
label: string | undefined
|
|
88
|
+
resolution: SegmentResolution | null
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
export class SpeakerSegmentResolver {
|
|
92
|
+
private windows: SpeakerIdWindow[] = []
|
|
93
|
+
private last: LastSegmentState | null = null
|
|
94
|
+
|
|
95
|
+
addWindow(window: SpeakerIdWindow): void {
|
|
96
|
+
if (!(window.endMs > window.startMs)) return
|
|
97
|
+
this.windows.push(window)
|
|
98
|
+
const cutoff = window.endMs - WINDOW_RETENTION_MS
|
|
99
|
+
this.windows = this.windows.filter((w) => w.endMs >= cutoff)
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/** Per audio session: drop all identification evidence and segment state. */
|
|
103
|
+
reset(): void {
|
|
104
|
+
this.windows = []
|
|
105
|
+
this.last = null
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* Resolve one FINAL segment. Also advances the carry-forward state, so call
|
|
110
|
+
* exactly once per final segment, in delivery order.
|
|
111
|
+
*/
|
|
112
|
+
resolve(segment: SegmentInput): SegmentResolution | null {
|
|
113
|
+
const resolution = this.resolveInner(segment)
|
|
114
|
+
this.last = {endMs: segment.endMs, label: segment.label, resolution}
|
|
115
|
+
return resolution
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private resolveInner(segment: SegmentInput): SegmentResolution | null {
|
|
119
|
+
const candidates = this.voteCandidates(segment)
|
|
120
|
+
|
|
121
|
+
if (candidates.length === 0) {
|
|
122
|
+
return this.carryForward(segment)
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
candidates.sort((a, b) => b.overlapMs - a.overlapMs)
|
|
126
|
+
const winner = candidates[0]
|
|
127
|
+
const runnerUp = candidates[1]
|
|
128
|
+
|
|
129
|
+
// Too little overlap to mean anything (clock-skew sliver) — treat as no
|
|
130
|
+
// evidence rather than a confident unknown.
|
|
131
|
+
const minOverlap = Math.min(MIN_WINNING_OVERLAP_MS, Math.max(1, (segment.endMs - segment.startMs) * 0.3))
|
|
132
|
+
if (winner.overlapMs < minOverlap) {
|
|
133
|
+
return this.carryForward(segment)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Ambiguous-voice-dominant segment: honest null (no carry-forward — a
|
|
137
|
+
// voice failed to match but wasn't clearly different either).
|
|
138
|
+
if (winner.kind === "unknown") return null
|
|
139
|
+
|
|
140
|
+
// Confident-other-dominant → an OTHER resolution (null id); a profile
|
|
141
|
+
// winner resolves to that identity. Both pass through conflict damping.
|
|
142
|
+
const proposed: SegmentResolution =
|
|
143
|
+
winner.kind === "other"
|
|
144
|
+
? {resolvedSpeakerId: null, resolvedSpeakerName: null}
|
|
145
|
+
: {resolvedSpeakerId: winner.profileId, resolvedSpeakerName: winner.name}
|
|
146
|
+
|
|
147
|
+
// Conflict damping: identity flip while the provider label did NOT change
|
|
148
|
+
// needs a stronger vote (≥2 agreeing windows, or a clear overlap majority)
|
|
149
|
+
// — otherwise keep the previous binding for this segment. A label change
|
|
150
|
+
// is the provider hinting the speaker may have changed, so the flip
|
|
151
|
+
// stands on normal evidence.
|
|
152
|
+
const prev = this.last?.resolution ?? null
|
|
153
|
+
const labelUnchanged = this.last != null && this.last.label === segment.label
|
|
154
|
+
const identityFlipped = prev != null && identityKey(prev) !== identityKey(proposed)
|
|
155
|
+
if (identityFlipped && labelUnchanged) {
|
|
156
|
+
const strongEnough =
|
|
157
|
+
winner.windowCount >= 2 || (runnerUp === undefined ? true : winner.overlapMs >= runnerUp.overlapMs * 2)
|
|
158
|
+
if (!strongEnough) return prev
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
return proposed
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
private voteCandidates(segment: SegmentInput): Candidate[] {
|
|
165
|
+
const byKey = new Map<string, Candidate>()
|
|
166
|
+
for (const w of this.windows) {
|
|
167
|
+
const overlap = Math.min(segment.endMs, w.endMs) - Math.max(segment.startMs, w.startMs)
|
|
168
|
+
if (overlap <= 0) continue
|
|
169
|
+
const kind: Candidate["kind"] = w.profileId != null ? "profile" : w.confidentOther ? "other" : "unknown"
|
|
170
|
+
const key = w.profileId ?? `\0${kind}`
|
|
171
|
+
const existing = byKey.get(key)
|
|
172
|
+
if (existing) {
|
|
173
|
+
existing.overlapMs += overlap
|
|
174
|
+
existing.windowCount += 1
|
|
175
|
+
} else {
|
|
176
|
+
byKey.set(key, {kind, profileId: w.profileId, name: w.name, overlapMs: overlap, windowCount: 1})
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return [...byKey.values()]
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
/**
|
|
183
|
+
* No overlapping ID window (short interjection, window not flushed yet):
|
|
184
|
+
* inherit the previous segment's resolution only while the label is
|
|
185
|
+
* unchanged and the gap is small. A label change is the "speaker may have
|
|
186
|
+
* changed" hint — the segment stays unresolved.
|
|
187
|
+
*/
|
|
188
|
+
private carryForward(segment: SegmentInput): SegmentResolution | null {
|
|
189
|
+
if (!this.last?.resolution) return null
|
|
190
|
+
if (this.last.label !== segment.label) return null
|
|
191
|
+
if (segment.startMs - this.last.endMs > CARRY_FORWARD_MAX_GAP_MS) return null
|
|
192
|
+
return this.last.resolution
|
|
193
|
+
}
|
|
194
|
+
}
|