@mentra/engine 0.1.0-dev.0 → 3.1.0-beta.100

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.
Files changed (574) hide show
  1. package/README.md +73 -18
  2. package/build/bluetooth-sdk/debug.d.ts +2 -0
  3. package/build/bluetooth-sdk/debug.d.ts.map +1 -0
  4. package/build/bluetooth-sdk/debug.js +2 -0
  5. package/build/bluetooth-sdk/debug.js.map +1 -0
  6. package/build/bluetooth-sdk/index.d.ts +3 -0
  7. package/build/bluetooth-sdk/index.d.ts.map +1 -0
  8. package/build/bluetooth-sdk/index.js +3 -0
  9. package/build/bluetooth-sdk/index.js.map +1 -0
  10. package/build/bluetooth-sdk/ota-transport.d.ts +2 -0
  11. package/build/bluetooth-sdk/ota-transport.d.ts.map +1 -0
  12. package/build/bluetooth-sdk/ota-transport.js +2 -0
  13. package/build/bluetooth-sdk/ota-transport.js.map +1 -0
  14. package/build/bluetooth-sdk/photo-receiver.d.ts +3 -0
  15. package/build/bluetooth-sdk/photo-receiver.d.ts.map +1 -0
  16. package/build/bluetooth-sdk/photo-receiver.js +3 -0
  17. package/build/bluetooth-sdk/photo-receiver.js.map +1 -0
  18. package/build/bluetooth-sdk/react.d.ts +2 -0
  19. package/build/bluetooth-sdk/react.d.ts.map +1 -0
  20. package/build/bluetooth-sdk/react.js +2 -0
  21. package/build/bluetooth-sdk/react.js.map +1 -0
  22. package/build/bluetooth-sdk/types.d.ts +2 -0
  23. package/build/bluetooth-sdk/types.d.ts.map +1 -0
  24. package/build/bluetooth-sdk/types.js +2 -0
  25. package/build/bluetooth-sdk/types.js.map +1 -0
  26. package/build/engine.d.ts +29 -18
  27. package/build/engine.d.ts.map +1 -1
  28. package/build/engine.js +9 -4
  29. package/build/engine.js.map +1 -1
  30. package/build/facades/dev.d.ts +3 -2
  31. package/build/facades/dev.d.ts.map +1 -1
  32. package/build/facades/dev.js +18 -12
  33. package/build/facades/dev.js.map +1 -1
  34. package/build/facades/display.d.ts +1 -1
  35. package/build/facades/display.d.ts.map +1 -1
  36. package/build/facades/display.js +1 -1
  37. package/build/facades/display.js.map +1 -1
  38. package/build/facades/gallery.js +1 -1
  39. package/build/facades/gallery.js.map +1 -1
  40. package/build/facades/glasses.d.ts +4 -13
  41. package/build/facades/glasses.d.ts.map +1 -1
  42. package/build/facades/glasses.js +21 -6
  43. package/build/facades/glasses.js.map +1 -1
  44. package/build/facades/glassesSettings.d.ts.map +1 -1
  45. package/build/facades/glassesSettings.js +1 -0
  46. package/build/facades/glassesSettings.js.map +1 -1
  47. package/build/facades/miniapps.d.ts +4 -0
  48. package/build/facades/miniapps.d.ts.map +1 -1
  49. package/build/facades/miniapps.js +5 -0
  50. package/build/facades/miniapps.js.map +1 -1
  51. package/build/facades/ota.d.ts +24 -21
  52. package/build/facades/ota.d.ts.map +1 -1
  53. package/build/facades/ota.js +31 -12
  54. package/build/facades/ota.js.map +1 -1
  55. package/build/facades/pairing.d.ts +12 -5
  56. package/build/facades/pairing.d.ts.map +1 -1
  57. package/build/facades/pairing.js +93 -17
  58. package/build/facades/pairing.js.map +1 -1
  59. package/build/facades/permissions.d.ts +10 -0
  60. package/build/facades/permissions.d.ts.map +1 -1
  61. package/build/facades/permissions.js +10 -0
  62. package/build/facades/permissions.js.map +1 -1
  63. package/build/facades/phoneNotifications.d.ts +0 -4
  64. package/build/facades/phoneNotifications.d.ts.map +1 -1
  65. package/build/facades/phoneNotifications.js +4 -14
  66. package/build/facades/phoneNotifications.js.map +1 -1
  67. package/build/facades/speech.d.ts +7 -6
  68. package/build/facades/speech.d.ts.map +1 -1
  69. package/build/facades/speech.js +1 -1
  70. package/build/facades/speech.js.map +1 -1
  71. package/build/generated/releaseMetadata.d.ts +12 -0
  72. package/build/generated/releaseMetadata.d.ts.map +1 -0
  73. package/build/generated/releaseMetadata.js +10 -0
  74. package/build/generated/releaseMetadata.js.map +1 -0
  75. package/build/index.d.ts +12 -10
  76. package/build/index.d.ts.map +1 -1
  77. package/build/index.js +7 -6
  78. package/build/index.js.map +1 -1
  79. package/build/react/MentraLiveOtaFlow.d.ts +44 -0
  80. package/build/react/MentraLiveOtaFlow.d.ts.map +1 -0
  81. package/build/react/MentraLiveOtaFlow.js +430 -0
  82. package/build/react/MentraLiveOtaFlow.js.map +1 -0
  83. package/build/react/index.d.ts +3 -0
  84. package/build/react/index.d.ts.map +1 -0
  85. package/build/react/index.js +3 -0
  86. package/build/react/index.js.map +1 -0
  87. package/build/react/useEngineSnapshot.d.ts +2 -0
  88. package/build/react/useEngineSnapshot.d.ts.map +1 -0
  89. package/build/react/useEngineSnapshot.js +14 -0
  90. package/build/react/useEngineSnapshot.js.map +1 -0
  91. package/build/react/useMentraLiveOta.d.ts +84 -0
  92. package/build/react/useMentraLiveOta.d.ts.map +1 -0
  93. package/build/react/useMentraLiveOta.js +627 -0
  94. package/build/react/useMentraLiveOta.js.map +1 -0
  95. package/build/runtime/bootstrap.d.ts +24 -1
  96. package/build/runtime/bootstrap.d.ts.map +1 -1
  97. package/build/runtime/bootstrap.js +17 -0
  98. package/build/runtime/bootstrap.js.map +1 -1
  99. package/build/runtime/scanQrSeam.d.ts +7 -0
  100. package/build/runtime/scanQrSeam.d.ts.map +1 -0
  101. package/build/runtime/scanQrSeam.js +16 -0
  102. package/build/runtime/scanQrSeam.js.map +1 -0
  103. package/build/services/AppRegistry.d.ts +41 -57
  104. package/build/services/AppRegistry.d.ts.map +1 -1
  105. package/build/services/AppRegistry.js +208 -144
  106. package/build/services/AppRegistry.js.map +1 -1
  107. package/build/services/AudioCloudUplink.d.ts +12 -0
  108. package/build/services/AudioCloudUplink.d.ts.map +1 -1
  109. package/build/services/AudioCloudUplink.js +22 -1
  110. package/build/services/AudioCloudUplink.js.map +1 -1
  111. package/build/services/AudioPlaybackService.d.ts +41 -2
  112. package/build/services/AudioPlaybackService.d.ts.map +1 -1
  113. package/build/services/AudioPlaybackService.js +250 -33
  114. package/build/services/AudioPlaybackService.js.map +1 -1
  115. package/build/services/BlobStore.d.ts +4 -1
  116. package/build/services/BlobStore.d.ts.map +1 -1
  117. package/build/services/BlobStore.js +80 -19
  118. package/build/services/BlobStore.js.map +1 -1
  119. package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -1
  120. package/build/services/CloudAudioSubscriptionSync.js +13 -1
  121. package/build/services/CloudAudioSubscriptionSync.js.map +1 -1
  122. package/build/services/CloudClientService.d.ts +15 -0
  123. package/build/services/CloudClientService.d.ts.map +1 -1
  124. package/build/services/CloudClientService.js +93 -1
  125. package/build/services/CloudClientService.js.map +1 -1
  126. package/build/services/DeviceEventRouter.js +5 -5
  127. package/build/services/DeviceEventRouter.js.map +1 -1
  128. package/build/services/DisplayProcessor.d.ts +3 -3
  129. package/build/services/DisplayProcessor.js +3 -3
  130. package/build/services/DisplayProcessor.js.map +1 -1
  131. package/build/services/ForegroundLocationPermission.d.ts +13 -0
  132. package/build/services/ForegroundLocationPermission.d.ts.map +1 -0
  133. package/build/services/ForegroundLocationPermission.js +12 -0
  134. package/build/services/ForegroundLocationPermission.js.map +1 -0
  135. package/build/services/GlassesSettingsSync.d.ts.map +1 -1
  136. package/build/services/GlassesSettingsSync.js +9 -3
  137. package/build/services/GlassesSettingsSync.js.map +1 -1
  138. package/build/services/GlassesStatusProjection.d.ts +15 -1
  139. package/build/services/GlassesStatusProjection.d.ts.map +1 -1
  140. package/build/services/GlassesStatusProjection.js +18 -11
  141. package/build/services/GlassesStatusProjection.js.map +1 -1
  142. package/build/services/HotspotOtaTransport.d.ts +29 -0
  143. package/build/services/HotspotOtaTransport.d.ts.map +1 -0
  144. package/build/services/HotspotOtaTransport.js +147 -0
  145. package/build/services/HotspotOtaTransport.js.map +1 -0
  146. package/build/services/HotspotShutdown.d.ts +17 -0
  147. package/build/services/HotspotShutdown.d.ts.map +1 -0
  148. package/build/services/HotspotShutdown.js +29 -0
  149. package/build/services/HotspotShutdown.js.map +1 -0
  150. package/build/services/LocalDisplayManager.d.ts +17 -3
  151. package/build/services/LocalDisplayManager.d.ts.map +1 -1
  152. package/build/services/LocalDisplayManager.js +108 -23
  153. package/build/services/LocalDisplayManager.js.map +1 -1
  154. package/build/services/LocalMiniappRuntime.d.ts +74 -2
  155. package/build/services/LocalMiniappRuntime.d.ts.map +1 -1
  156. package/build/services/LocalMiniappRuntime.js +785 -291
  157. package/build/services/LocalMiniappRuntime.js.map +1 -1
  158. package/build/services/LocalMiniappStorage.d.ts +32 -0
  159. package/build/services/LocalMiniappStorage.d.ts.map +1 -0
  160. package/build/services/LocalMiniappStorage.js +66 -0
  161. package/build/services/LocalMiniappStorage.js.map +1 -0
  162. package/build/services/LocalMiniappUserIdentity.d.ts +20 -0
  163. package/build/services/LocalMiniappUserIdentity.d.ts.map +1 -0
  164. package/build/services/LocalMiniappUserIdentity.js +43 -0
  165. package/build/services/LocalMiniappUserIdentity.js.map +1 -0
  166. package/build/services/LocalSttFallbackCoordinator.d.ts +9 -6
  167. package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -1
  168. package/build/services/LocalSttFallbackCoordinator.js +18 -12
  169. package/build/services/LocalSttFallbackCoordinator.js.map +1 -1
  170. package/build/services/MicStateCoordinator.d.ts +42 -1
  171. package/build/services/MicStateCoordinator.d.ts.map +1 -1
  172. package/build/services/MicStateCoordinator.js +141 -3
  173. package/build/services/MicStateCoordinator.js.map +1 -1
  174. package/build/services/MiniappLauncher.d.ts.map +1 -1
  175. package/build/services/MiniappLauncher.js +23 -3
  176. package/build/services/MiniappLauncher.js.map +1 -1
  177. package/build/services/MiniappLiveness.d.ts +12 -0
  178. package/build/services/MiniappLiveness.d.ts.map +1 -0
  179. package/build/services/MiniappLiveness.js +16 -0
  180. package/build/services/MiniappLiveness.js.map +1 -0
  181. package/build/services/NativeHttpResponse.d.ts +3 -0
  182. package/build/services/NativeHttpResponse.d.ts.map +1 -0
  183. package/build/services/NativeHttpResponse.js +6 -0
  184. package/build/services/NativeHttpResponse.js.map +1 -0
  185. package/build/services/OtaArtifactDownloader.d.ts +65 -0
  186. package/build/services/OtaArtifactDownloader.d.ts.map +1 -0
  187. package/build/services/OtaArtifactDownloader.js +226 -0
  188. package/build/services/OtaArtifactDownloader.js.map +1 -0
  189. package/build/services/OtaAutoChain.d.ts +41 -0
  190. package/build/services/OtaAutoChain.d.ts.map +1 -0
  191. package/build/services/OtaAutoChain.js +91 -0
  192. package/build/services/OtaAutoChain.js.map +1 -0
  193. package/build/services/OtaErrorMapping.d.ts +18 -0
  194. package/build/services/OtaErrorMapping.d.ts.map +1 -0
  195. package/build/services/OtaErrorMapping.js +63 -0
  196. package/build/services/OtaErrorMapping.js.map +1 -0
  197. package/build/services/OtaInstallCoordinator.d.ts +120 -17
  198. package/build/services/OtaInstallCoordinator.d.ts.map +1 -1
  199. package/build/services/OtaInstallCoordinator.js +605 -136
  200. package/build/services/OtaInstallCoordinator.js.map +1 -1
  201. package/build/services/OtaService.d.ts.map +1 -1
  202. package/build/services/OtaService.js +9 -2
  203. package/build/services/OtaService.js.map +1 -1
  204. package/build/services/OtaUpdateCheckService.d.ts +42 -4
  205. package/build/services/OtaUpdateCheckService.d.ts.map +1 -1
  206. package/build/services/OtaUpdateCheckService.js +158 -26
  207. package/build/services/OtaUpdateCheckService.js.map +1 -1
  208. package/build/services/PhoneCalendarHelpers.d.ts +32 -0
  209. package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
  210. package/build/services/PhoneCalendarHelpers.js +157 -0
  211. package/build/services/PhoneCalendarHelpers.js.map +1 -0
  212. package/build/services/PhoneCalendarService.d.ts +5 -0
  213. package/build/services/PhoneCalendarService.d.ts.map +1 -0
  214. package/build/services/PhoneCalendarService.js +45 -0
  215. package/build/services/PhoneCalendarService.js.map +1 -0
  216. package/build/services/PhoneCameraFovCoordinator.d.ts +30 -0
  217. package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
  218. package/build/services/PhoneCameraFovCoordinator.js +194 -0
  219. package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
  220. package/build/services/PhoneNotificationsSync.d.ts.map +1 -1
  221. package/build/services/PhoneNotificationsSync.js +12 -10
  222. package/build/services/PhoneNotificationsSync.js.map +1 -1
  223. package/build/services/PhonePhotoCoordinator.d.ts +26 -2
  224. package/build/services/PhonePhotoCoordinator.d.ts.map +1 -1
  225. package/build/services/PhonePhotoCoordinator.js +80 -10
  226. package/build/services/PhonePhotoCoordinator.js.map +1 -1
  227. package/build/services/PhoneStreamCoordinator.d.ts +8 -1
  228. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -1
  229. package/build/services/PhoneStreamCoordinator.js +125 -13
  230. package/build/services/PhoneStreamCoordinator.js.map +1 -1
  231. package/build/services/PhoneVideoCoordinator.d.ts +2 -0
  232. package/build/services/PhoneVideoCoordinator.d.ts.map +1 -1
  233. package/build/services/PhoneVideoCoordinator.js +10 -0
  234. package/build/services/PhoneVideoCoordinator.js.map +1 -1
  235. package/build/services/SceneRenderer.d.ts.map +1 -1
  236. package/build/services/SceneRenderer.js +15 -0
  237. package/build/services/SceneRenderer.js.map +1 -1
  238. package/build/services/SentenceTtsPipeline.d.ts +31 -0
  239. package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
  240. package/build/services/SentenceTtsPipeline.js +67 -0
  241. package/build/services/SentenceTtsPipeline.js.map +1 -0
  242. package/build/services/StreamLifecycleController.d.ts +3 -3
  243. package/build/services/StreamLifecycleController.js +3 -3
  244. package/build/services/StreamLifecycleController.js.map +1 -1
  245. package/build/services/SupportProfileSync.d.ts +22 -0
  246. package/build/services/SupportProfileSync.d.ts.map +1 -0
  247. package/build/services/SupportProfileSync.js +213 -0
  248. package/build/services/SupportProfileSync.js.map +1 -0
  249. package/build/services/TranscriptionRouting.d.ts +12 -0
  250. package/build/services/TranscriptionRouting.d.ts.map +1 -0
  251. package/build/services/TranscriptionRouting.js +24 -0
  252. package/build/services/TranscriptionRouting.js.map +1 -0
  253. package/build/services/TtsTextSanitizer.d.ts +5 -0
  254. package/build/services/TtsTextSanitizer.d.ts.map +1 -0
  255. package/build/services/TtsTextSanitizer.js +61 -0
  256. package/build/services/TtsTextSanitizer.js.map +1 -0
  257. package/build/services/WifiAdbRequest.d.ts +17 -0
  258. package/build/services/WifiAdbRequest.d.ts.map +1 -0
  259. package/build/services/WifiAdbRequest.js +35 -0
  260. package/build/services/WifiAdbRequest.js.map +1 -0
  261. package/build/services/asg/asgCameraApi.d.ts +43 -0
  262. package/build/services/asg/asgCameraApi.d.ts.map +1 -1
  263. package/build/services/asg/asgCameraApi.js +509 -26
  264. package/build/services/asg/asgCameraApi.js.map +1 -1
  265. package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
  266. package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
  267. package/build/services/asg/cameraRollExportCoordinator.js +618 -0
  268. package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
  269. package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
  270. package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
  271. package/build/services/asg/cameraRollExportLedger.js +78 -0
  272. package/build/services/asg/cameraRollExportLedger.js.map +1 -0
  273. package/build/services/asg/galleryNotices.d.ts +1 -1
  274. package/build/services/asg/galleryNotices.d.ts.map +1 -1
  275. package/build/services/asg/galleryNotices.js.map +1 -1
  276. package/build/services/asg/galleryPathMigration.d.ts +3 -0
  277. package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
  278. package/build/services/asg/galleryPathMigration.js +26 -0
  279. package/build/services/asg/galleryPathMigration.js.map +1 -0
  280. package/build/services/asg/gallerySettingsService.d.ts +1 -0
  281. package/build/services/asg/gallerySettingsService.d.ts.map +1 -1
  282. package/build/services/asg/gallerySettingsService.js +2 -0
  283. package/build/services/asg/gallerySettingsService.js.map +1 -1
  284. package/build/services/asg/gallerySyncService.d.ts.map +1 -1
  285. package/build/services/asg/gallerySyncService.js +162 -56
  286. package/build/services/asg/gallerySyncService.js.map +1 -1
  287. package/build/services/asg/galleryTransferLedger.d.ts +58 -0
  288. package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
  289. package/build/services/asg/galleryTransferLedger.js +225 -0
  290. package/build/services/asg/galleryTransferLedger.js.map +1 -0
  291. package/build/services/asg/localNetworkTransport.d.ts +15 -0
  292. package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
  293. package/build/services/asg/localNetworkTransport.js +145 -0
  294. package/build/services/asg/localNetworkTransport.js.map +1 -0
  295. package/build/services/asg/localStorageService.d.ts +18 -0
  296. package/build/services/asg/localStorageService.d.ts.map +1 -1
  297. package/build/services/asg/localStorageService.js +168 -19
  298. package/build/services/asg/localStorageService.js.map +1 -1
  299. package/build/services/asg/mediaProcessingQueue.d.ts +10 -0
  300. package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -1
  301. package/build/services/asg/mediaProcessingQueue.js +193 -62
  302. package/build/services/asg/mediaProcessingQueue.js.map +1 -1
  303. package/build/services/audioPlaybackAssets.d.ts +8 -0
  304. package/build/services/audioPlaybackAssets.d.ts.map +1 -0
  305. package/build/services/audioPlaybackAssets.js +7 -0
  306. package/build/services/audioPlaybackAssets.js.map +1 -0
  307. package/build/services/gallerySyncClock.js +1 -1
  308. package/build/services/gallerySyncClock.js.map +1 -1
  309. package/build/services/glassesClockSync.d.ts.map +1 -1
  310. package/build/services/glassesClockSync.js +7 -3
  311. package/build/services/glassesClockSync.js.map +1 -1
  312. package/build/services/manifestActions.d.ts +7 -0
  313. package/build/services/manifestActions.d.ts.map +1 -0
  314. package/build/services/manifestActions.js +25 -0
  315. package/build/services/manifestActions.js.map +1 -0
  316. package/build/services/otaDisplayState.d.ts +23 -12
  317. package/build/services/otaDisplayState.d.ts.map +1 -1
  318. package/build/services/otaDisplayState.js +36 -14
  319. package/build/services/otaDisplayState.js.map +1 -1
  320. package/build/services/otaInstallPolicy.d.ts +20 -4
  321. package/build/services/otaInstallPolicy.d.ts.map +1 -1
  322. package/build/services/otaInstallPolicy.js +28 -3
  323. package/build/services/otaInstallPolicy.js.map +1 -1
  324. package/build/services/otaLegacyMapping.d.ts +1 -1
  325. package/build/services/otaLegacyMapping.d.ts.map +1 -1
  326. package/build/services/otaLegacyMapping.js.map +1 -1
  327. package/build/services/otaManifestPolicy.d.ts +14 -0
  328. package/build/services/otaManifestPolicy.d.ts.map +1 -0
  329. package/build/services/otaManifestPolicy.js +19 -0
  330. package/build/services/otaManifestPolicy.js.map +1 -0
  331. package/build/services/otaManifestUrl.d.ts +3 -0
  332. package/build/services/otaManifestUrl.d.ts.map +1 -0
  333. package/build/services/otaManifestUrl.js +38 -0
  334. package/build/services/otaManifestUrl.js.map +1 -0
  335. package/build/services/otaReleaseVersion.d.ts +10 -0
  336. package/build/services/otaReleaseVersion.d.ts.map +1 -0
  337. package/build/services/otaReleaseVersion.js +14 -0
  338. package/build/services/otaReleaseVersion.js.map +1 -0
  339. package/build/services/slimStreamStatus.d.ts +11 -0
  340. package/build/services/slimStreamStatus.d.ts.map +1 -1
  341. package/build/services/slimStreamStatus.js +14 -4
  342. package/build/services/slimStreamStatus.js.map +1 -1
  343. package/build/stores/appVisibility.d.ts +3 -0
  344. package/build/stores/appVisibility.d.ts.map +1 -0
  345. package/build/stores/appVisibility.js +3 -0
  346. package/build/stores/appVisibility.js.map +1 -0
  347. package/build/stores/apps.d.ts.map +1 -1
  348. package/build/stores/apps.js +18 -1
  349. package/build/stores/apps.js.map +1 -1
  350. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -1
  351. package/build/stores/bluetoothSettingKeys.js +2 -0
  352. package/build/stores/bluetoothSettingKeys.js.map +1 -1
  353. package/build/stores/core.d.ts +3 -3
  354. package/build/stores/core.d.ts.map +1 -1
  355. package/build/stores/core.js.map +1 -1
  356. package/build/stores/gallerySync.d.ts +2 -0
  357. package/build/stores/gallerySync.d.ts.map +1 -1
  358. package/build/stores/gallerySync.js +2 -0
  359. package/build/stores/gallerySync.js.map +1 -1
  360. package/build/stores/glasses.d.ts +10 -4
  361. package/build/stores/glasses.d.ts.map +1 -1
  362. package/build/stores/glasses.js +3 -0
  363. package/build/stores/glasses.js.map +1 -1
  364. package/build/stores/settings.d.ts +17 -0
  365. package/build/stores/settings.d.ts.map +1 -1
  366. package/build/stores/settings.js +157 -17
  367. package/build/stores/settings.js.map +1 -1
  368. package/build/types/applet.d.ts +3 -1
  369. package/build/types/applet.d.ts.map +1 -1
  370. package/build/types/applet.js +1 -1
  371. package/build/types/applet.js.map +1 -1
  372. package/build/types/asg.d.ts +7 -0
  373. package/build/types/asg.d.ts.map +1 -1
  374. package/build/types/asg.js.map +1 -1
  375. package/build/types/capabilities/even-realities-g1.d.ts.map +1 -1
  376. package/build/types/capabilities/even-realities-g1.js +2 -0
  377. package/build/types/capabilities/even-realities-g1.js.map +1 -1
  378. package/build/types/capabilities/even-realities-g2.d.ts.map +1 -1
  379. package/build/types/capabilities/even-realities-g2.js +2 -0
  380. package/build/types/capabilities/even-realities-g2.js.map +1 -1
  381. package/build/types/capabilities/mentra-display.d.ts.map +1 -1
  382. package/build/types/capabilities/mentra-display.js +2 -0
  383. package/build/types/capabilities/mentra-display.js.map +1 -1
  384. package/build/types/capabilities/mentra-live.d.ts.map +1 -1
  385. package/build/types/capabilities/mentra-live.js +2 -0
  386. package/build/types/capabilities/mentra-live.js.map +1 -1
  387. package/build/types/capabilities/nimo.d.ts +9 -0
  388. package/build/types/capabilities/nimo.d.ts.map +1 -0
  389. package/build/types/capabilities/nimo.js +57 -0
  390. package/build/types/capabilities/nimo.js.map +1 -0
  391. package/build/types/capabilities/none.d.ts.map +1 -1
  392. package/build/types/capabilities/none.js +2 -0
  393. package/build/types/capabilities/none.js.map +1 -1
  394. package/build/types/capabilities/simulated-glasses.d.ts.map +1 -1
  395. package/build/types/capabilities/simulated-glasses.js +2 -0
  396. package/build/types/capabilities/simulated-glasses.js.map +1 -1
  397. package/build/types/capabilities/vuzix-z100.d.ts.map +1 -1
  398. package/build/types/capabilities/vuzix-z100.js +2 -0
  399. package/build/types/capabilities/vuzix-z100.js.map +1 -1
  400. package/build/types/enums.d.ts +4 -26
  401. package/build/types/enums.d.ts.map +1 -1
  402. package/build/types/enums.js +3 -27
  403. package/build/types/enums.js.map +1 -1
  404. package/build/types/hardware.d.ts +6 -14
  405. package/build/types/hardware.d.ts.map +1 -1
  406. package/build/types/hardware.js +18 -4
  407. package/build/types/hardware.js.map +1 -1
  408. package/build/types/index.d.ts +3 -7
  409. package/build/types/index.d.ts.map +1 -1
  410. package/build/types/index.js +3 -7
  411. package/build/types/index.js.map +1 -1
  412. package/build/utils/configuredDevHost.d.ts +6 -0
  413. package/build/utils/configuredDevHost.d.ts.map +1 -0
  414. package/build/utils/configuredDevHost.js +19 -0
  415. package/build/utils/configuredDevHost.js.map +1 -0
  416. package/build/utils/devMiniappLaunch.d.ts +19 -8
  417. package/build/utils/devMiniappLaunch.d.ts.map +1 -1
  418. package/build/utils/devMiniappLaunch.js +144 -21
  419. package/build/utils/devMiniappLaunch.js.map +1 -1
  420. package/build/utils/diagnosticContext.d.ts.map +1 -1
  421. package/build/utils/diagnosticContext.js +15 -17
  422. package/build/utils/diagnosticContext.js.map +1 -1
  423. package/build/utils/display/composer/ColumnComposer.d.ts +1 -1
  424. package/build/utils/display/composer/ColumnComposer.js +1 -1
  425. package/build/utils/display/composer/ColumnComposer.js.map +1 -1
  426. package/build/utils/hardware/hardware.d.ts.map +1 -1
  427. package/build/utils/hardware/hardware.js +7 -3
  428. package/build/utils/hardware/hardware.js.map +1 -1
  429. package/build/utils/miniappDiagnostics.d.ts +64 -0
  430. package/build/utils/miniappDiagnostics.d.ts.map +1 -0
  431. package/build/utils/miniappDiagnostics.js +173 -0
  432. package/build/utils/miniappDiagnostics.js.map +1 -0
  433. package/build/utils/permissions/MediaLibraryPermissions.d.ts +11 -0
  434. package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -1
  435. package/build/utils/permissions/MediaLibraryPermissions.js +27 -4
  436. package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -1
  437. package/build/utils/timers/timers.d.ts.map +1 -1
  438. package/build/utils/timers/timers.js +55 -18
  439. package/build/utils/timers/timers.js.map +1 -1
  440. package/package.json +66 -31
  441. package/src/assets/silence.wav +0 -0
  442. package/src/bluetooth-sdk/debug.ts +1 -0
  443. package/src/bluetooth-sdk/index.ts +2 -0
  444. package/src/bluetooth-sdk/ota-transport.ts +1 -0
  445. package/src/bluetooth-sdk/photo-receiver.ts +2 -0
  446. package/src/bluetooth-sdk/react.ts +1 -0
  447. package/src/bluetooth-sdk/types.ts +1 -0
  448. package/src/engine.ts +9 -4
  449. package/src/facades/dev.ts +17 -12
  450. package/src/facades/display.ts +1 -1
  451. package/src/facades/gallery.ts +1 -1
  452. package/src/facades/glasses.ts +20 -7
  453. package/src/facades/glassesSettings.ts +5 -0
  454. package/src/facades/miniapps.ts +7 -0
  455. package/src/facades/ota.ts +41 -13
  456. package/src/facades/pairing.ts +103 -23
  457. package/src/facades/permissions.ts +14 -0
  458. package/src/facades/phoneNotifications.ts +4 -13
  459. package/src/facades/speech.ts +21 -7
  460. package/src/generated/releaseMetadata.ts +20 -0
  461. package/src/index.ts +42 -13
  462. package/src/react/MentraLiveOtaFlow.tsx +754 -0
  463. package/src/react/index.ts +21 -0
  464. package/src/react/useEngineSnapshot.ts +16 -0
  465. package/src/react/useMentraLiveOta.ts +793 -0
  466. package/src/runtime/bootstrap.ts +33 -1
  467. package/src/runtime/scanQrSeam.ts +20 -0
  468. package/src/services/AppRegistry.ts +240 -149
  469. package/src/services/AudioCloudUplink.ts +23 -1
  470. package/src/services/AudioPlaybackService.ts +287 -38
  471. package/src/services/BlobStore.ts +79 -19
  472. package/src/services/CloudAudioSubscriptionSync.ts +13 -1
  473. package/src/services/CloudClientService.ts +96 -1
  474. package/src/services/DeviceEventRouter.ts +5 -5
  475. package/src/services/DisplayProcessor.ts +3 -3
  476. package/src/services/ForegroundLocationPermission.ts +24 -0
  477. package/src/services/GlassesSettingsSync.ts +9 -3
  478. package/src/services/GlassesStatusProjection.ts +20 -11
  479. package/src/services/HotspotOtaTransport.ts +185 -0
  480. package/src/services/HotspotShutdown.ts +41 -0
  481. package/src/services/LocalDisplayManager.ts +114 -24
  482. package/src/services/LocalMiniappRuntime.ts +967 -346
  483. package/src/services/LocalMiniappStorage.ts +82 -0
  484. package/src/services/LocalMiniappUserIdentity.ts +46 -0
  485. package/src/services/LocalSttFallbackCoordinator.ts +19 -12
  486. package/src/services/MicStateCoordinator.ts +169 -4
  487. package/src/services/MiniappLauncher.ts +30 -3
  488. package/src/services/MiniappLiveness.ts +24 -0
  489. package/src/services/NativeHttpResponse.ts +6 -0
  490. package/src/services/OtaArtifactDownloader.ts +312 -0
  491. package/src/services/OtaAutoChain.ts +130 -0
  492. package/src/services/OtaErrorMapping.ts +80 -0
  493. package/src/services/OtaInstallCoordinator.ts +680 -151
  494. package/src/services/OtaService.ts +12 -7
  495. package/src/services/OtaUpdateCheckService.ts +205 -27
  496. package/src/services/PhoneCalendarHelpers.ts +212 -0
  497. package/src/services/PhoneCalendarService.ts +65 -0
  498. package/src/services/PhoneCameraFovCoordinator.ts +210 -0
  499. package/src/services/PhoneNotificationsSync.ts +12 -10
  500. package/src/services/PhonePhotoCoordinator.ts +117 -19
  501. package/src/services/PhoneStreamCoordinator.ts +139 -25
  502. package/src/services/PhoneVideoCoordinator.ts +11 -0
  503. package/src/services/SceneRenderer.ts +16 -0
  504. package/src/services/SentenceTtsPipeline.ts +106 -0
  505. package/src/services/StreamLifecycleController.ts +3 -3
  506. package/src/services/SupportProfileSync.ts +218 -0
  507. package/src/services/TranscriptionRouting.ts +37 -0
  508. package/src/services/TtsTextSanitizer.ts +66 -0
  509. package/src/services/WifiAdbRequest.ts +53 -0
  510. package/src/services/asg/asgCameraApi.ts +615 -33
  511. package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
  512. package/src/services/asg/cameraRollExportLedger.ts +122 -0
  513. package/src/services/asg/galleryNotices.ts +1 -0
  514. package/src/services/asg/galleryPathMigration.ts +22 -0
  515. package/src/services/asg/gallerySettingsService.ts +3 -0
  516. package/src/services/asg/gallerySyncService.ts +184 -73
  517. package/src/services/asg/galleryTransferLedger.ts +312 -0
  518. package/src/services/asg/localNetworkTransport.ts +170 -0
  519. package/src/services/asg/localStorageService.ts +179 -24
  520. package/src/services/asg/mediaProcessingQueue.ts +209 -62
  521. package/src/services/audioPlaybackAssets.ts +8 -0
  522. package/src/services/gallerySyncClock.ts +1 -1
  523. package/src/services/glassesClockSync.ts +7 -3
  524. package/src/services/manifestActions.ts +30 -0
  525. package/src/services/otaDisplayState.ts +58 -17
  526. package/src/services/otaInstallPolicy.ts +34 -4
  527. package/src/services/otaLegacyMapping.ts +1 -1
  528. package/src/services/otaManifestPolicy.ts +42 -0
  529. package/src/services/otaManifestUrl.ts +44 -0
  530. package/src/services/otaReleaseVersion.ts +22 -0
  531. package/src/services/slimStreamStatus.ts +16 -5
  532. package/src/stores/appVisibility.ts +3 -0
  533. package/src/stores/apps.ts +19 -1
  534. package/src/stores/bluetoothSettingKeys.ts +2 -0
  535. package/src/stores/core.ts +4 -4
  536. package/src/stores/gallerySync.ts +4 -0
  537. package/src/stores/glasses.ts +16 -6
  538. package/src/stores/settings.ts +179 -18
  539. package/src/types/applet.ts +3 -1
  540. package/src/types/asg.ts +7 -0
  541. package/src/types/capabilities/even-realities-g1.ts +3 -0
  542. package/src/types/capabilities/even-realities-g2.ts +3 -0
  543. package/src/types/capabilities/mentra-display.ts +3 -0
  544. package/src/types/capabilities/mentra-live.ts +3 -0
  545. package/src/types/capabilities/nimo.ts +59 -0
  546. package/src/types/capabilities/none.ts +3 -0
  547. package/src/types/capabilities/simulated-glasses.ts +3 -0
  548. package/src/types/capabilities/vuzix-z100.ts +3 -0
  549. package/src/types/enums.ts +4 -28
  550. package/src/types/hardware.ts +23 -14
  551. package/src/types/index.ts +3 -6
  552. package/src/utils/configuredDevHost.ts +17 -0
  553. package/src/utils/devMiniappLaunch.ts +151 -23
  554. package/src/utils/diagnosticContext.ts +17 -17
  555. package/src/utils/display/composer/ColumnComposer.ts +1 -1
  556. package/src/utils/hardware/hardware.ts +7 -9
  557. package/src/utils/miniappDiagnostics.ts +226 -0
  558. package/src/utils/permissions/MediaLibraryPermissions.ts +35 -4
  559. package/src/utils/timers/timers.ts +57 -21
  560. package/build/devtools.d.ts +0 -11
  561. package/build/devtools.d.ts.map +0 -1
  562. package/build/devtools.js +0 -13
  563. package/build/devtools.js.map +0 -1
  564. package/build/internal.d.ts +0 -66
  565. package/build/internal.d.ts.map +0 -1
  566. package/build/internal.js +0 -89
  567. package/build/internal.js.map +0 -1
  568. package/build/services/asgOtaVersionUrl.d.ts +0 -2
  569. package/build/services/asgOtaVersionUrl.d.ts.map +0 -1
  570. package/build/services/asgOtaVersionUrl.js +0 -36
  571. package/build/services/asgOtaVersionUrl.js.map +0 -1
  572. package/src/devtools.ts +0 -13
  573. package/src/internal.ts +0 -158
  574. package/src/services/asgOtaVersionUrl.ts +0 -41
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mentra/engine",
3
- "version": "0.1.0-dev.0",
3
+ "version": "3.1.0-beta.100",
4
4
  "description": "Mentra Engine — miniapp registry, WebView bridge, and miniapp store",
5
5
  "main": "build/index.js",
6
6
  "react-native": "src/index.ts",
@@ -11,15 +11,40 @@
11
11
  "react-native": "./src/index.ts",
12
12
  "default": "./build/index.js"
13
13
  },
14
- "./internal": {
15
- "types": "./build/internal.d.ts",
16
- "react-native": "./src/internal.ts",
17
- "default": "./build/internal.js"
14
+ "./ota": {
15
+ "types": "./build/react/index.d.ts",
16
+ "react-native": "./src/react/index.ts",
17
+ "default": "./build/react/index.js"
18
18
  },
19
- "./devtools": {
20
- "types": "./build/devtools.d.ts",
21
- "react-native": "./src/devtools.ts",
22
- "default": "./build/devtools.js"
19
+ "./bluetooth-sdk": {
20
+ "types": "./build/bluetooth-sdk/index.d.ts",
21
+ "react-native": "./src/bluetooth-sdk/index.ts",
22
+ "default": "./build/bluetooth-sdk/index.js"
23
+ },
24
+ "./bluetooth-sdk/react": {
25
+ "types": "./build/bluetooth-sdk/react.d.ts",
26
+ "react-native": "./src/bluetooth-sdk/react.ts",
27
+ "default": "./build/bluetooth-sdk/react.js"
28
+ },
29
+ "./bluetooth-sdk/types": {
30
+ "types": "./build/bluetooth-sdk/types.d.ts",
31
+ "react-native": "./src/bluetooth-sdk/types.ts",
32
+ "default": "./build/bluetooth-sdk/types.js"
33
+ },
34
+ "./bluetooth-sdk/photo-receiver": {
35
+ "types": "./build/bluetooth-sdk/photo-receiver.d.ts",
36
+ "react-native": "./src/bluetooth-sdk/photo-receiver.ts",
37
+ "default": "./build/bluetooth-sdk/photo-receiver.js"
38
+ },
39
+ "./bluetooth-sdk/ota-transport": {
40
+ "types": "./build/bluetooth-sdk/ota-transport.d.ts",
41
+ "react-native": "./src/bluetooth-sdk/ota-transport.ts",
42
+ "default": "./build/bluetooth-sdk/ota-transport.js"
43
+ },
44
+ "./bluetooth-sdk/debug": {
45
+ "types": "./build/bluetooth-sdk/debug.d.ts",
46
+ "react-native": "./src/bluetooth-sdk/debug.ts",
47
+ "default": "./build/bluetooth-sdk/debug.js"
23
48
  },
24
49
  "./build/*": null,
25
50
  "./src/*": null,
@@ -29,6 +54,10 @@
29
54
  "build",
30
55
  "README.md",
31
56
  "src",
57
+ "!build/devtools.*",
58
+ "!build/internal.*",
59
+ "!src/devtools.ts",
60
+ "!src/internal.ts",
32
61
  "!src/**/__tests__",
33
62
  "!src/**/*.test.ts"
34
63
  ],
@@ -36,7 +65,11 @@
36
65
  "build": "expo-module build",
37
66
  "clean": "expo-module clean",
38
67
  "lint": "expo-module lint",
39
- "test": "bun test src",
68
+ "test": "./scripts/test.sh && node --test scripts/*.test.mjs",
69
+ "write:release-metadata": "node scripts/write-release-metadata.mjs",
70
+ "verify:release-package": "node scripts/verify-release-package.mjs",
71
+ "test:public-api": "bun test src/bluetooth-sdk/__tests__/publicApi.test.ts",
72
+ "test:public-ota-consumer": "tsc --noEmit --strict --skipLibCheck --jsx react-jsx --moduleResolution bundler --module esnext --target es2022 scripts/fixtures/public-ota-consumer.tsx",
40
73
  "build:module": "expo-module prepare",
41
74
  "prepublishOnly": "expo-module prepublishOnly",
42
75
  "expo-module": "expo-module"
@@ -64,16 +97,18 @@
64
97
  "registry": "https://registry.npmjs.org/"
65
98
  },
66
99
  "dependencies": {
100
+ "@mentra/bluetooth-sdk": "3.1.0-beta.100",
101
+ "@mentra/cloud-client": "3.1.0-beta.100",
102
+ "@mentra/cloud-protocol": "3.1.0-beta.100",
103
+ "@mentra/crust": "3.1.0-beta.100",
104
+ "@mentra/miniapp": "3.1.0-beta.100",
67
105
  "buffer": "^6.0.3",
68
106
  "events": "^3.3.0",
107
+ "react-native-marked": "8.1.1",
69
108
  "semver": "^7.7.4",
70
109
  "typesafe-ts": "^1.7.1"
71
110
  },
72
111
  "devDependencies": {
73
- "@mentra/bluetooth-sdk": "workspace:*",
74
- "@mentra/cloud-client": "workspace:*",
75
- "@mentra/cloud-protocol": "workspace:*",
76
- "@mentra/miniapp": "workspace:*",
77
112
  "@types/semver": "^7.7.1",
78
113
  "expo-module-scripts": "^55.0.2",
79
114
  "expo-modules-core": "55.0.25",
@@ -81,26 +116,31 @@
81
116
  "typescript": "~5.9.2"
82
117
  },
83
118
  "peerDependencies": {
84
- "expo": "*",
85
- "expo-modules-core": "*",
119
+ "expo": "~55.0.24",
120
+ "expo-modules-core": "~55.0.25",
86
121
  "react": "*",
87
122
  "react-native": "*",
123
+ "react-native-safe-area-context": "*",
124
+ "react-native-svg": "*",
88
125
  "react-native-udp": "*",
89
126
  "@types/react": "*",
90
127
  "react-native-mmkv": "*",
91
128
  "react-native-nitro-bg-timer": "*",
92
129
  "react-native-nitro-modules": "*",
93
- "react-native-reanimated": "*",
94
- "expo-file-system": "*",
130
+ "react-native-reanimated": "4.2.1",
131
+ "react-native-worklets": "0.7.4",
132
+ "expo-file-system": "~55.0.20",
95
133
  "react-native-zip-archive": "*",
96
134
  "zustand": "*",
97
- "expo-battery": "*",
98
- "expo-audio": "*",
99
- "expo-clipboard": "*",
100
- "expo-constants": "*",
101
- "expo-location": "*",
102
- "expo-task-manager": "*",
103
- "expo-notifications": "*",
135
+ "expo-battery": "^55.0.13",
136
+ "expo-audio": "~55.0.14",
137
+ "expo-clipboard": "~55.0.13",
138
+ "expo-calendar": "~55.0.14",
139
+ "expo-constants": "~55.0.16",
140
+ "expo-device": "~55.0.17",
141
+ "expo-location": "~55.1.10",
142
+ "expo-task-manager": "~55.0.16",
143
+ "expo-notifications": "~55.0.23",
104
144
  "react-native-share": "*",
105
145
  "react-native-localize": "*",
106
146
  "react-native-ble-manager": "*",
@@ -109,11 +149,6 @@
109
149
  "@react-native-community/netinfo": "*",
110
150
  "@dr.pogodin/react-native-fs": "*",
111
151
  "@craftzdog/react-native-buffer": "*",
112
- "axios": "*",
113
- "@mentra/bluetooth-sdk": "*",
114
- "@mentra/crust": "^0.1.0-dev.0",
115
- "@mentra/cloud-client": "^0.1.0-dev.0",
116
- "@mentra/miniapp": "^0.3.0-dev.0",
117
- "@mentra/cloud-protocol": "^0.1.0-dev.0"
152
+ "axios": "*"
118
153
  }
119
154
  }
Binary file
@@ -0,0 +1 @@
1
+ export * from "@mentra/bluetooth-sdk/debug"
@@ -0,0 +1,2 @@
1
+ export {default} from "@mentra/bluetooth-sdk"
2
+ export * from "@mentra/bluetooth-sdk"
@@ -0,0 +1 @@
1
+ export * from "@mentra/bluetooth-sdk/ota-transport"
@@ -0,0 +1,2 @@
1
+ export {default} from "@mentra/bluetooth-sdk/photo-receiver"
2
+ export * from "@mentra/bluetooth-sdk/photo-receiver"
@@ -0,0 +1 @@
1
+ export * from "@mentra/bluetooth-sdk/react"
@@ -0,0 +1 @@
1
+ export * from "@mentra/bluetooth-sdk/types"
package/src/engine.ts CHANGED
@@ -5,16 +5,17 @@
5
5
  * name stays `engine` in code; the public API surface is `engine`.)
6
6
  *
7
7
  * It grows one facade at a time. The migration-era flat store/service exports
8
- * live on the `@mentra/engine/internal` entry (and the debug singletons on
9
- * `@mentra/engine/devtools`); they shrink as screens move onto `engine.*`.
8
+ * remain in a private MentraOS host package; they shrink as screens move onto
9
+ * `engine.*`.
10
10
  */
11
- import {configure, start as bootstrapStart, stop as bootstrapStop} from "./runtime/bootstrap"
11
+ import {configure, start as bootstrapStart, stop as bootstrapStop, updateUiSeams} from "./runtime/bootstrap"
12
12
  import {cloudClientService} from "./services/CloudClientService"
13
13
  import {hydrateDeviceStore, demoteOrphanedDefaultWearable} from "./services/DeviceStoreHydration"
14
14
  import {startGlassesSettingsSync, stopGlassesSettingsSync} from "./services/GlassesSettingsSync"
15
15
  import {startGlassesStatusProjection, stopGlassesStatusProjection} from "./services/GlassesStatusProjection"
16
16
  import {startOtaService, stopOtaService} from "./services/OtaService"
17
17
  import {startAudioCloudUplink, stopAudioCloudUplink} from "./services/AudioCloudUplink"
18
+ import {startSupportProfileSync, stopSupportProfileSync} from "./services/SupportProfileSync"
18
19
  import {startDeviceEventRouter, stopDeviceEventRouter} from "./services/DeviceEventRouter"
19
20
  import {startPhoneNotificationsSync, stopPhoneNotificationsSync} from "./services/PhoneNotificationsSync"
20
21
  import {startCaptionsTesterReportService, stopCaptionsTesterReportService} from "./services/CaptionsTesterReportService"
@@ -45,6 +46,8 @@ import {logBuffer} from "./utils/devLogging"
45
46
  export const engine = {
46
47
  /** Front door — hand engine auth + config, then start/stop the runtime. */
47
48
  configure,
49
+ /** Merge host-UI seams on a running runtime (scan overlay, wifi setup, …). */
50
+ updateUiSeams,
48
51
  /** Start the runtime: mark started + construct/connect the cloud client + begin
49
52
  * syncing device settings to the glasses. */
50
53
  async start() {
@@ -59,7 +62,7 @@ export const engine = {
59
62
  // Project native device status -> the engine stores (the inbound feed the rest
60
63
  // of the runtime reads). Established first so the stores are live before the
61
64
  // syncs below react to them.
62
- startGlassesStatusProjection()
65
+ startGlassesStatusProjection((changed) => localMiniappRuntime.forwardEvent("glasses_connection_state", changed))
63
66
  // Route the rest of the inbound device events (wifi/hotspot/gallery -> stores+bus,
64
67
  // photo/stream -> coordinators, button/touch/accel/head -> miniapps, save_setting ->
65
68
  // store, miniapp_selected -> launcher) so a bare OEM gets device data, not just the
@@ -96,6 +99,7 @@ export const engine = {
96
99
  error instanceof Error ? error.message : error,
97
100
  )
98
101
  }
102
+ startSupportProfileSync()
99
103
  // Push device-setting changes to the glasses for ANY host, so
100
104
  // engine.glasses.settings.set() reaches the device (not just the Mentra app).
101
105
  startGlassesSettingsSync()
@@ -135,6 +139,7 @@ export const engine = {
135
139
  await safely("device event router", stopDeviceEventRouter)
136
140
  await safely("ota service", stopOtaService)
137
141
  await safely("audio cloud uplink", stopAudioCloudUplink)
142
+ await safely("support profile sync", stopSupportProfileSync)
138
143
  await safely("phone notifications sync", stopPhoneNotificationsSync)
139
144
  await safely("captions tester report service", stopCaptionsTesterReportService)
140
145
  await safely("mentrajs crashloop report service", stopMentraJSCrashloopReportService)
@@ -125,8 +125,9 @@ export const dev = {
125
125
  /**
126
126
  * Side-load a miniapp being served from a dev machine (the `mentra dev` / CLI
127
127
  * flow) by its URL: probes `<url>/miniapp.json`, and on a reachable manifest
128
- * registers it into the single dev slot so it appears in `engine.miniapps`
129
- * and can be started. This is the OEM-host equivalent of the first-party
128
+ * registers it under its manifest package so it appears in `engine.miniapps`
129
+ * and can coexist with other dev miniapps. This is the OEM-host equivalent
130
+ * of the first-party
130
131
  * developer-URL screen — the registration itself is engine-internal, so a
131
132
  * host reaches it here rather than the internal registry. Rendering still
132
133
  * flows through the normal display path once the miniapp is started.
@@ -142,25 +143,29 @@ export const dev = {
142
143
  return {ok: false, error: "dev server unreachable, or no miniapp.json served there"}
143
144
  }
144
145
  const manifest = result.manifest
146
+ const appName = name ?? manifest.name ?? "Dev Miniapp"
147
+ const packageName = (manifest.packageName as string | undefined) ?? DEV_APP_PACKAGE_NAME
148
+ // Persist the host that answered — not the stale input IP — so home-tile
149
+ // relaunches skip a dead LAN address after mDNS/Metro failover.
150
+ const resolvedUrl = result.resolvedUrl || devUrl
145
151
  // The `mentra-miniapp dev` server puts the hot-reload/log sidecar on the
146
152
  // user port PLUS ONE — same convention as the first-party developer-URL
147
153
  // screen's deriveDevPort.
148
154
  let devPort: number | undefined
149
155
  try {
150
- const parsed = Number(new URL(devUrl).port)
156
+ const parsed = Number(new URL(resolvedUrl).port)
151
157
  devPort = Number.isFinite(parsed) && parsed > 0 ? parsed + 1 : undefined
152
158
  } catch {
153
159
  devPort = undefined
154
160
  }
155
- const appName = name ?? manifest.name ?? "Dev Miniapp"
156
- registerDevApp({
157
- // The REAL manifest package: registerDevApp preserves it as
158
- // sourcePackageName (miniapp auth + dev-slot cleanup key off it) before
159
- // forcing packageName to the single dev slot.
160
- packageName: (manifest.packageName as string | undefined) ?? DEV_APP_PACKAGE_NAME,
161
+ const existing = useAppStatusStore.getState().apps.find((app) => app.packageName === packageName)
162
+ if (existing?.running) await useAppStatusStore.getState().stop(packageName)
163
+ await registerDevApp({
164
+ packageName,
161
165
  name: appName,
162
- iconUrl: manifest.icon ? new URL(manifest.icon, `${devUrl}/`).toString() : `${devUrl}/icon.png`,
163
- devUrl,
166
+ iconUrl: manifest.icon ? new URL(manifest.icon, `${resolvedUrl}/`).toString() : `${resolvedUrl}/icon.png`,
167
+ // Persist the host that answered — not the stale input IP.
168
+ devUrl: resolvedUrl,
164
169
  devPort,
165
170
  type: manifest.type as DevAppRecord["type"],
166
171
  permissions: manifest.permissions as DevAppRecord["permissions"],
@@ -168,7 +173,7 @@ export const dev = {
168
173
  actions: manifest.actions as DevAppRecord["actions"],
169
174
  })
170
175
  await useAppStatusStore.getState().refresh()
171
- return {ok: true, packageName: DEV_APP_PACKAGE_NAME, name: appName}
176
+ return {ok: true, packageName, name: appName}
172
177
  },
173
178
 
174
179
  /** Current engine runtime status for engine-owned debug surfaces. */
@@ -4,7 +4,7 @@
4
4
  * glasses display for dev tools and escape-hatch use (normal rendering goes through
5
5
  * the engine DisplayProcessor / layout system, not these).
6
6
  */
7
- import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
7
+ import BluetoothSdk from "@mentra/bluetooth-sdk"
8
8
  import {displayMirror} from "./displayMirror"
9
9
 
10
10
  export const display = {
@@ -22,7 +22,7 @@ function projectStatus() {
22
22
  processingFiles: Array.from(progress.processingFiles),
23
23
  processedFiles: s.processedFiles,
24
24
  isSyncing: selectIssyncing(s),
25
- isStarting: gallerySyncService.isSyncStarting(),
25
+ isStarting: s.syncStarting,
26
26
  glassesGallery: selectGlassesGalleryStatus(s),
27
27
  // Copy: the snapshot must not hand callers a mutable reference into the store
28
28
  // (each queue item is copied too — callers must not mutate them in place).
@@ -11,13 +11,14 @@
11
11
  // surface, not the public entry. Relative path (the alias doesn't resolve in engine's
12
12
  // standalone build); jest moduleNameMapper + tsconfig both resolve it.
13
13
  import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
14
- import type {ButtonPressEvent, TouchEvent} from "@mentra/bluetooth-sdk/internal"
14
+ import type {ButtonPressEvent, ConnectOptions, Device, TouchEvent} from "@mentra/bluetooth-sdk"
15
15
  import {useGlassesStore} from "../stores/glasses"
16
16
  import {useSettingsStore, SETTINGS} from "../stores/settings"
17
17
  import {hasDefaultDevice} from "../services/DeviceStoreHydration"
18
18
  import {projectPairingIdentity} from "../services/PairingIdentity"
19
19
  import {isGlassesConnected, isGlassesReady} from "../services/GlassesReadiness"
20
20
  import {pushAllBluetoothSettings} from "../services/GlassesSettingsSync"
21
+ import {recordSupportProfileConnectionFailure} from "../services/SupportProfileSync"
21
22
  import {getModelCapabilities, type DeviceTypes} from "../types"
22
23
  import {glassesWifi} from "./glassesWifi"
23
24
  import {glassesSettings} from "./glassesSettings"
@@ -62,6 +63,7 @@ function projectInfo() {
62
63
  serialNumber: s.serialNumber,
63
64
  buildNumber: s.buildNumber,
64
65
  btMac: s.bluetoothMacAddress,
66
+ wifiMac: s.wifiMacAddress,
65
67
  leftMac: s.leftMacAddress,
66
68
  rightMac: s.rightMacAddress,
67
69
  // Copy: the snapshot must not hand callers a mutable reference into the store.
@@ -81,20 +83,30 @@ export const glasses = {
81
83
  * the glasses (this used to be a host-side step before `connectDefault`).
82
84
  */
83
85
  connectDefault: async (): Promise<void> => {
84
- await pushAllBluetoothSettings()
85
- return BluetoothSdk.connectDefault()
86
+ try {
87
+ await pushAllBluetoothSettings()
88
+ await BluetoothSdk.connectDefault()
89
+ } catch (error) {
90
+ recordSupportProfileConnectionFailure(error, "connect_default")
91
+ throw error
92
+ }
86
93
  },
87
94
  disconnect: (): Promise<void> => BluetoothSdk.disconnect(),
88
95
  forget: (): Promise<void> => BluetoothSdk.forget(),
89
96
  /** Connect to a specific (discovered) device. */
90
- connect: async (...args: Parameters<typeof BluetoothSdk.connect>): Promise<void> => {
91
- await pushAllBluetoothSettings()
92
- return BluetoothSdk.connect(...args)
97
+ connect: async (device: Device, options?: ConnectOptions): Promise<void> => {
98
+ try {
99
+ await pushAllBluetoothSettings()
100
+ await BluetoothSdk.connect(device, options)
101
+ } catch (error) {
102
+ recordSupportProfileConnectionFailure(error, "connect")
103
+ throw error
104
+ }
93
105
  },
94
106
  /** Connect the built-in simulated glasses (dev/testing). */
95
107
  connectSimulated: (): Promise<void> => BluetoothSdk.connectSimulated(),
96
108
  /** Set a device as the `connectDefault()` target. */
97
- setDefault: (...args: Parameters<typeof BluetoothSdk.setDefaultDevice>) => BluetoothSdk.setDefaultDevice(...args),
109
+ setDefault: (device: Device | null): Promise<void> => BluetoothSdk.setDefaultDevice(device),
98
110
  /**
99
111
  * Reconnect to the saved default glasses. Resolves `false` when there's nothing to
100
112
  * reconnect to (no default paired) or the connect attempt fails (e.g. BLE powered
@@ -110,6 +122,7 @@ export const glasses = {
110
122
  await pushAllBluetoothSettings()
111
123
  await BluetoothSdk.connectDefault()
112
124
  } catch (error) {
125
+ recordSupportProfileConnectionFailure(error, "reconnect")
113
126
  console.warn("engine.glasses.reconnect failed:", error)
114
127
  return false
115
128
  }
@@ -22,6 +22,7 @@ const INTERNAL_KEYS = new Set<string>([
22
22
  SETTINGS.default_wearable.key,
23
23
  SETTINGS.device_name.key,
24
24
  SETTINGS.device_address.key,
25
+ SETTINGS.project_name.key,
25
26
  SETTINGS.pending_controller.key,
26
27
  SETTINGS.default_controller.key,
27
28
  SETTINGS.controller_device_name.key,
@@ -54,3 +55,7 @@ export const glassesSettings = {
54
55
  // Copy: callers must not be able to mutate the module-level key list.
55
56
  available: (): string[] => [...DEVICE_KEYS],
56
57
  }
58
+
59
+
60
+
61
+
@@ -9,6 +9,7 @@
9
9
  * `<WebView>` wired to them. This facade is the lifecycle half.
10
10
  */
11
11
  import {useAppStatusStore} from "../stores/apps"
12
+ import localMiniappRuntime from "../services/LocalMiniappRuntime"
12
13
  import type {ClientApp} from "../types"
13
14
 
14
15
  type AppsState = ReturnType<typeof useAppStatusStore.getState>
@@ -29,6 +30,12 @@ export const miniapps = {
29
30
  })
30
31
  },
31
32
 
33
+ /** Miniapps actively subscribed to Mentra Live hardware-button events. */
34
+ buttonPressSubscribers: (): string[] => localMiniappRuntime.getButtonPressSubscribers(),
35
+ /** Observe the active Mentra Live hardware-button subscriber set. */
36
+ onButtonPressSubscribersChanged: (cb: (packageNames: string[]) => void): (() => void) =>
37
+ localMiniappRuntime.onButtonPressSubscribersChanged(cb),
38
+
32
39
  /** Re-fetch the installed-app list from the backend. */
33
40
  refresh: () => useAppStatusStore.getState().refresh(),
34
41
  /** Start (foreground) a miniapp. */
@@ -1,18 +1,27 @@
1
1
  /**
2
2
  * ota facade — `engine.ota`: the OEM-facing OTA read/observe surface. Engine's
3
3
  * OtaService projects the glasses' OTA BLE events into the engine store; this facade
4
- * exposes the snapshot + change subscriptions the host renders its update prompt and
5
- * progress UI from. No host-injected UI — the host owns all alerts/navigation/i18n.
4
+ * exposes the snapshot + change subscriptions behind the shared OTA flow exported by
5
+ * `@mentra/engine/ota`. Hosts retain only their surrounding navigation and theme/i18n adapters.
6
6
  *
7
7
  * Availability checks live in engine. Install orchestration lives in engine too:
8
8
  * `installSession` fronts the OtaInstallCoordinator state machine (WP 8B) — the host
9
9
  * progress screen is a pure renderer over its snapshot + attach/detach/retry/finish.
10
10
  */
11
- import BluetoothSdk from "@mentra/bluetooth-sdk/internal"
12
- import type {OtaProgress, OtaProgressStatus, OtaStatus, OtaUpdateInfo} from "@mentra/bluetooth-sdk/internal"
13
- import {isGlassesConnected, useGlassesStore} from "../stores/glasses"
14
- import {getAsgOtaVersionUrl} from "../services/asgOtaVersionUrl"
11
+ import BluetoothSdk from "@mentra/bluetooth-sdk"
12
+ import type {
13
+ OtaProgress,
14
+ OtaProgressStatus,
15
+ OtaStartAckEvent,
16
+ OtaStatus,
17
+ OtaUpdateInfo,
18
+ ReleaseChangelog,
19
+ } from "@mentra/bluetooth-sdk"
20
+ import {isGlassesConnected, isGlassesReady, useGlassesStore} from "../stores/glasses"
21
+ import {resolveOtaManifestUrl} from "../services/otaManifestUrl"
15
22
  import {otaInstallCoordinator, type OtaInstallSnapshot} from "../services/OtaInstallCoordinator"
23
+ import {startGlassesStatusProjection} from "../services/GlassesStatusProjection"
24
+ import {startOtaService} from "../services/OtaService"
16
25
  import {
17
26
  checkCurrentGlassesForUpdate,
18
27
  type OtaCheckCurrentGlassesOptions,
@@ -23,12 +32,16 @@ function projectSnapshot() {
23
32
  const s = useGlassesStore.getState()
24
33
  return {
25
34
  connected: isGlassesConnected(s.connection),
35
+ ready: isGlassesReady(s.connection),
26
36
  buildNumber: s.buildNumber || null,
37
+ appVersion: s.appVersion || null,
27
38
  mtkFirmwareVersion: s.mtkFirmwareVersion || null,
28
39
  besFirmwareVersion: s.besFirmwareVersion || null,
40
+ batteryLevel: s.batteryLevel >= 0 ? s.batteryLevel : null,
41
+ hotspotOtaVersion: s.hotspotOtaVersion ?? 0,
29
42
  wifiConnected: s.wifi.state === "connected",
30
43
  wifiStatusKnown: s.wifiStatusKnown,
31
- manifestUrl: getAsgOtaVersionUrl(s.otaVersionUrl, s.buildNumber),
44
+ manifestUrl: resolveOtaManifestUrl(s.otaVersionUrl, s.buildNumber),
32
45
  updateAvailable: s.otaUpdateAvailable,
33
46
  status: s.otaStatus,
34
47
  legacyProgress: s.otaProgress,
@@ -43,6 +56,7 @@ export type {
43
56
  OtaProgressStatus,
44
57
  OtaStatus,
45
58
  OtaUpdateInfo,
59
+ ReleaseChangelog,
46
60
  OtaInstallSnapshot,
47
61
  OtaCheckCurrentGlassesOptions,
48
62
  OtaCheckCurrentGlassesResult,
@@ -50,13 +64,23 @@ export type {
50
64
 
51
65
  export const ota = {
52
66
  // --- actions ---
67
+ /**
68
+ * Start the device-status and OTA projections without starting the authenticated
69
+ * cloud connection or miniapp runtime. This is the explicit entry point for Bluetooth-only hosts.
70
+ * Idempotent and safe when the full engine runtime is already running.
71
+ */
72
+ initialize: async () => {
73
+ const hydrated = startGlassesStatusProjection()
74
+ startOtaService()
75
+ await hydrated
76
+ },
53
77
  /**
54
78
  * Start the firmware install with the resolved OTA manifest URL. Progress lands on
55
- * `status()`/`onStatus()`. (The host resolves the manifest URL — dev-override/env/prod
56
- * resolution stays with the OTA config; the host-side stuck/retry watchdog is its own
79
+ * `status()`/`onStatus()`. (The host resolves the manifest URL — developer override,
80
+ * host pin, or Engine release pin resolution stays with the OTA config; the stuck/retry watchdog is its own
57
81
  * resilience layer on top of this command.)
58
82
  */
59
- install: (...args: Parameters<typeof BluetoothSdk.startOtaUpdate>) => BluetoothSdk.startOtaUpdate(...args),
83
+ install: (otaVersionUrl?: string | null): Promise<OtaStartAckEvent> => BluetoothSdk.startOtaUpdate(otaVersionUrl),
60
84
  // Deferred: this facade entry was intended to become the engine-owned retry/check
61
85
  // action, but BluetoothSdk.checkForOtaUpdate() only returns a boolean. Exposing it
62
86
  // here would make callers think the rich otaUpdateAvailable read model is refreshed,
@@ -71,6 +95,9 @@ export const ota = {
71
95
  ping: () => BluetoothSdk.ping(),
72
96
  /** Resolve and compare the current glasses against the OTA manifest, then update the OTA snapshot. */
73
97
  checkForUpdates: (options?: OtaCheckCurrentGlassesOptions) => checkCurrentGlassesForUpdate(options),
98
+ /** Return bundled release changelogs crossed between two coordinated product versions, newest first. */
99
+ getReleaseChangelogs: (fromVersion?: string | null, toVersion?: string | null): ReleaseChangelog[] =>
100
+ BluetoothSdk.getReleaseChangelogs(fromVersion, toVersion),
74
101
  /** Clear the available-update prompt state. */
75
102
  clearUpdateAvailable: () => useGlassesStore.getState().setOtaUpdateAvailable(null),
76
103
  /** Clear active progress/status before entering a fresh install flow. */
@@ -100,7 +127,6 @@ export const ota = {
100
127
  * @deprecated Legacy progress route (build < 37) only — removed with WP 8D.
101
128
  */
102
129
  clearBuildNumberForNextCheck: () => {
103
- BluetoothSdk.updateGlasses({buildNumber: ""})
104
130
  useGlassesStore.getState().setGlassesInfo({buildNumber: ""})
105
131
  },
106
132
  /**
@@ -115,15 +141,17 @@ export const ota = {
115
141
  * the snapshot; every watchdog/retry/reconnect rule lives in the coordinator.
116
142
  */
117
143
  installSession: {
144
+ /** Select Wi-Fi or capability-gated hotspot transport for this checked manifest. */
145
+ prepare: (result: OtaCheckCurrentGlassesResult) => otaInstallCoordinator.prepare(result),
118
146
  /** Bind the machine to the mounted progress screen. Idempotent per attach/detach cycle. */
119
147
  attach: () => otaInstallCoordinator.attach(),
120
148
  /** Unbind on unmount: clears all timers/listeners and resets session state. */
121
149
  detach: () => otaInstallCoordinator.detach(),
122
150
  /** Retry after a failure: clear state and re-send ota_start (if connected). */
123
151
  retry: () => otaInstallCoordinator.retry(),
124
- /** Terminal cleanup for Continue/Done (navigation stays in the screen). */
152
+ /** Terminal cleanup for Continue/Done, including hotspot route teardown. */
125
153
  finish: () => otaInstallCoordinator.finish(),
126
- /** Abandon an interrupted session (super-mode skip): finish() + drop the session's status/progress. */
154
+ /** Abandon an interrupted session: await finish() then drop the session's status/progress. */
127
155
  discard: () => otaInstallCoordinator.discard(),
128
156
  /** Current install read model (displayState/errorMsg/lockout + glasses OTA data). */
129
157
  snapshot: (): OtaInstallSnapshot => otaInstallCoordinator.snapshot(),