@mentra/engine 0.1.0-beta.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.
Files changed (842) hide show
  1. package/README.md +79 -0
  2. package/build/devtools.d.ts +11 -0
  3. package/build/devtools.d.ts.map +1 -0
  4. package/build/devtools.js +13 -0
  5. package/build/devtools.js.map +1 -0
  6. package/build/engine.d.ts +261 -0
  7. package/build/engine.d.ts.map +1 -0
  8. package/build/engine.js +170 -0
  9. package/build/engine.js.map +1 -0
  10. package/build/facades/dev.d.ts +58 -0
  11. package/build/facades/dev.d.ts.map +1 -0
  12. package/build/facades/dev.js +189 -0
  13. package/build/facades/dev.js.map +1 -0
  14. package/build/facades/display.d.ts +21 -0
  15. package/build/facades/display.d.ts.map +1 -0
  16. package/build/facades/display.js +17 -0
  17. package/build/facades/display.js.map +1 -0
  18. package/build/facades/displayMirror.d.ts +15 -0
  19. package/build/facades/displayMirror.d.ts.map +1 -0
  20. package/build/facades/displayMirror.js +29 -0
  21. package/build/facades/displayMirror.js.map +1 -0
  22. package/build/facades/gallery.d.ts +62 -0
  23. package/build/facades/gallery.d.ts.map +1 -0
  24. package/build/facades/gallery.js +61 -0
  25. package/build/facades/gallery.js.map +1 -0
  26. package/build/facades/glasses.d.ts +141 -0
  27. package/build/facades/glasses.d.ts.map +1 -0
  28. package/build/facades/glasses.js +199 -0
  29. package/build/facades/glasses.js.map +1 -0
  30. package/build/facades/glassesSettings.d.ts +13 -0
  31. package/build/facades/glassesSettings.d.ts.map +1 -0
  32. package/build/facades/glassesSettings.js +54 -0
  33. package/build/facades/glassesSettings.js.map +1 -0
  34. package/build/facades/glassesWifi.d.ts +25 -0
  35. package/build/facades/glassesWifi.d.ts.map +1 -0
  36. package/build/facades/glassesWifi.js +57 -0
  37. package/build/facades/glassesWifi.js.map +1 -0
  38. package/build/facades/miniapps.d.ts +43 -0
  39. package/build/facades/miniapps.d.ts.map +1 -0
  40. package/build/facades/miniapps.js +49 -0
  41. package/build/facades/miniapps.js.map +1 -0
  42. package/build/facades/notifications.d.ts +13 -0
  43. package/build/facades/notifications.d.ts.map +1 -0
  44. package/build/facades/notifications.js +12 -0
  45. package/build/facades/notifications.js.map +1 -0
  46. package/build/facades/ota.d.ts +103 -0
  47. package/build/facades/ota.d.ts.map +1 -0
  48. package/build/facades/ota.js +156 -0
  49. package/build/facades/ota.js.map +1 -0
  50. package/build/facades/pairing.d.ts +114 -0
  51. package/build/facades/pairing.d.ts.map +1 -0
  52. package/build/facades/pairing.js +275 -0
  53. package/build/facades/pairing.js.map +1 -0
  54. package/build/facades/permissions.d.ts +33 -0
  55. package/build/facades/permissions.d.ts.map +1 -0
  56. package/build/facades/permissions.js +155 -0
  57. package/build/facades/permissions.js.map +1 -0
  58. package/build/facades/phoneNotifications.d.ts +21 -0
  59. package/build/facades/phoneNotifications.d.ts.map +1 -0
  60. package/build/facades/phoneNotifications.js +51 -0
  61. package/build/facades/phoneNotifications.js.map +1 -0
  62. package/build/facades/reports.d.ts +36 -0
  63. package/build/facades/reports.d.ts.map +1 -0
  64. package/build/facades/reports.js +134 -0
  65. package/build/facades/reports.js.map +1 -0
  66. package/build/facades/session.d.ts +21 -0
  67. package/build/facades/session.d.ts.map +1 -0
  68. package/build/facades/session.js +52 -0
  69. package/build/facades/session.js.map +1 -0
  70. package/build/facades/settings.d.ts +37 -0
  71. package/build/facades/settings.d.ts.map +1 -0
  72. package/build/facades/settings.js +55 -0
  73. package/build/facades/settings.js.map +1 -0
  74. package/build/facades/speech.d.ts +30 -0
  75. package/build/facades/speech.d.ts.map +1 -0
  76. package/build/facades/speech.js +37 -0
  77. package/build/facades/speech.js.map +1 -0
  78. package/build/index.d.ts +43 -0
  79. package/build/index.d.ts.map +1 -0
  80. package/build/index.js +45 -0
  81. package/build/index.js.map +1 -0
  82. package/build/internal.d.ts +67 -0
  83. package/build/internal.d.ts.map +1 -0
  84. package/build/internal.js +90 -0
  85. package/build/internal.js.map +1 -0
  86. package/build/runtime/bootstrap.d.ts +83 -0
  87. package/build/runtime/bootstrap.d.ts.map +1 -0
  88. package/build/runtime/bootstrap.js +56 -0
  89. package/build/runtime/bootstrap.js.map +1 -0
  90. package/build/runtime/config.d.ts +146 -0
  91. package/build/runtime/config.d.ts.map +1 -0
  92. package/build/runtime/config.js +18 -0
  93. package/build/runtime/config.js.map +1 -0
  94. package/build/runtime/streamConfig.d.ts +4 -0
  95. package/build/runtime/streamConfig.d.ts.map +1 -0
  96. package/build/runtime/streamConfig.js +38 -0
  97. package/build/runtime/streamConfig.js.map +1 -0
  98. package/build/services/AppRegistry.d.ts +269 -0
  99. package/build/services/AppRegistry.d.ts.map +1 -0
  100. package/build/services/AppRegistry.js +1079 -0
  101. package/build/services/AppRegistry.js.map +1 -0
  102. package/build/services/AudioCloudUplink.d.ts +9 -0
  103. package/build/services/AudioCloudUplink.d.ts.map +1 -0
  104. package/build/services/AudioCloudUplink.js +48 -0
  105. package/build/services/AudioCloudUplink.js.map +1 -0
  106. package/build/services/AudioPlaybackService.d.ts +175 -0
  107. package/build/services/AudioPlaybackService.d.ts.map +1 -0
  108. package/build/services/AudioPlaybackService.js +705 -0
  109. package/build/services/AudioPlaybackService.js.map +1 -0
  110. package/build/services/AutomaticReportResult.d.ts +20 -0
  111. package/build/services/AutomaticReportResult.d.ts.map +1 -0
  112. package/build/services/AutomaticReportResult.js +29 -0
  113. package/build/services/AutomaticReportResult.js.map +1 -0
  114. package/build/services/BlobStore.d.ts +91 -0
  115. package/build/services/BlobStore.d.ts.map +1 -0
  116. package/build/services/BlobStore.js +668 -0
  117. package/build/services/BlobStore.js.map +1 -0
  118. package/build/services/CaptionsTesterReportService.d.ts +4 -0
  119. package/build/services/CaptionsTesterReportService.d.ts.map +1 -0
  120. package/build/services/CaptionsTesterReportService.js +80 -0
  121. package/build/services/CaptionsTesterReportService.js.map +1 -0
  122. package/build/services/CloudAudioSubscriptionSync.d.ts +24 -0
  123. package/build/services/CloudAudioSubscriptionSync.d.ts.map +1 -0
  124. package/build/services/CloudAudioSubscriptionSync.js +39 -0
  125. package/build/services/CloudAudioSubscriptionSync.js.map +1 -0
  126. package/build/services/CloudClientService.d.ts +143 -0
  127. package/build/services/CloudClientService.d.ts.map +1 -0
  128. package/build/services/CloudClientService.js +644 -0
  129. package/build/services/CloudClientService.js.map +1 -0
  130. package/build/services/CloudTranscriptE2EMetrics.d.ts +4 -0
  131. package/build/services/CloudTranscriptE2EMetrics.d.ts.map +1 -0
  132. package/build/services/CloudTranscriptE2EMetrics.js +24 -0
  133. package/build/services/CloudTranscriptE2EMetrics.js.map +1 -0
  134. package/build/services/ConnectionCoordinator.d.ts +51 -0
  135. package/build/services/ConnectionCoordinator.d.ts.map +1 -0
  136. package/build/services/ConnectionCoordinator.js +34 -0
  137. package/build/services/ConnectionCoordinator.js.map +1 -0
  138. package/build/services/DevServerBridge.d.ts +63 -0
  139. package/build/services/DevServerBridge.d.ts.map +1 -0
  140. package/build/services/DevServerBridge.js +294 -0
  141. package/build/services/DevServerBridge.js.map +1 -0
  142. package/build/services/DeviceEventRouter.d.ts +3 -0
  143. package/build/services/DeviceEventRouter.d.ts.map +1 -0
  144. package/build/services/DeviceEventRouter.js +190 -0
  145. package/build/services/DeviceEventRouter.js.map +1 -0
  146. package/build/services/DeviceStoreHydration.d.ts +38 -0
  147. package/build/services/DeviceStoreHydration.d.ts.map +1 -0
  148. package/build/services/DeviceStoreHydration.js +124 -0
  149. package/build/services/DeviceStoreHydration.js.map +1 -0
  150. package/build/services/DisplayProcessor.d.ts +223 -0
  151. package/build/services/DisplayProcessor.d.ts.map +1 -0
  152. package/build/services/DisplayProcessor.js +552 -0
  153. package/build/services/DisplayProcessor.js.map +1 -0
  154. package/build/services/GlassesReadiness.d.ts +41 -0
  155. package/build/services/GlassesReadiness.d.ts.map +1 -0
  156. package/build/services/GlassesReadiness.js +82 -0
  157. package/build/services/GlassesReadiness.js.map +1 -0
  158. package/build/services/GlassesSettingsSync.d.ts +33 -0
  159. package/build/services/GlassesSettingsSync.d.ts.map +1 -0
  160. package/build/services/GlassesSettingsSync.js +121 -0
  161. package/build/services/GlassesSettingsSync.js.map +1 -0
  162. package/build/services/GlassesStatusProjection.d.ts +3 -0
  163. package/build/services/GlassesStatusProjection.d.ts.map +1 -0
  164. package/build/services/GlassesStatusProjection.js +65 -0
  165. package/build/services/GlassesStatusProjection.js.map +1 -0
  166. package/build/services/HeadingService.d.ts +27 -0
  167. package/build/services/HeadingService.d.ts.map +1 -0
  168. package/build/services/HeadingService.js +96 -0
  169. package/build/services/HeadingService.js.map +1 -0
  170. package/build/services/LocalDisplayManager.d.ts +139 -0
  171. package/build/services/LocalDisplayManager.d.ts.map +1 -0
  172. package/build/services/LocalDisplayManager.js +579 -0
  173. package/build/services/LocalDisplayManager.js.map +1 -0
  174. package/build/services/LocalMiniappRuntime.d.ts +439 -0
  175. package/build/services/LocalMiniappRuntime.d.ts.map +1 -0
  176. package/build/services/LocalMiniappRuntime.js +3695 -0
  177. package/build/services/LocalMiniappRuntime.js.map +1 -0
  178. package/build/services/LocalSttFallbackCoordinator.d.ts +57 -0
  179. package/build/services/LocalSttFallbackCoordinator.d.ts.map +1 -0
  180. package/build/services/LocalSttFallbackCoordinator.js +137 -0
  181. package/build/services/LocalSttFallbackCoordinator.js.map +1 -0
  182. package/build/services/MentraJSCrashController.d.ts +97 -0
  183. package/build/services/MentraJSCrashController.d.ts.map +1 -0
  184. package/build/services/MentraJSCrashController.js +138 -0
  185. package/build/services/MentraJSCrashController.js.map +1 -0
  186. package/build/services/MentraJSCrashloopReportService.d.ts +9 -0
  187. package/build/services/MentraJSCrashloopReportService.d.ts.map +1 -0
  188. package/build/services/MentraJSCrashloopReportService.js +54 -0
  189. package/build/services/MentraJSCrashloopReportService.js.map +1 -0
  190. package/build/services/MentraJSLogPipeline.d.ts +87 -0
  191. package/build/services/MentraJSLogPipeline.d.ts.map +1 -0
  192. package/build/services/MentraJSLogPipeline.js +137 -0
  193. package/build/services/MentraJSLogPipeline.js.map +1 -0
  194. package/build/services/MentraJSRouter.d.ts +203 -0
  195. package/build/services/MentraJSRouter.d.ts.map +1 -0
  196. package/build/services/MentraJSRouter.js +480 -0
  197. package/build/services/MentraJSRouter.js.map +1 -0
  198. package/build/services/MentraUIRouter.d.ts +137 -0
  199. package/build/services/MentraUIRouter.d.ts.map +1 -0
  200. package/build/services/MentraUIRouter.js +210 -0
  201. package/build/services/MentraUIRouter.js.map +1 -0
  202. package/build/services/MicStateCoordinator.d.ts +37 -0
  203. package/build/services/MicStateCoordinator.d.ts.map +1 -0
  204. package/build/services/MicStateCoordinator.js +81 -0
  205. package/build/services/MicStateCoordinator.js.map +1 -0
  206. package/build/services/MiniappEngine.d.ts +31 -0
  207. package/build/services/MiniappEngine.d.ts.map +1 -0
  208. package/build/services/MiniappEngine.js +119 -0
  209. package/build/services/MiniappEngine.js.map +1 -0
  210. package/build/services/MiniappLauncher.d.ts +129 -0
  211. package/build/services/MiniappLauncher.d.ts.map +1 -0
  212. package/build/services/MiniappLauncher.js +291 -0
  213. package/build/services/MiniappLauncher.js.map +1 -0
  214. package/build/services/MiniappRunningRegistry.d.ts +24 -0
  215. package/build/services/MiniappRunningRegistry.d.ts.map +1 -0
  216. package/build/services/MiniappRunningRegistry.js +52 -0
  217. package/build/services/MiniappRunningRegistry.js.map +1 -0
  218. package/build/services/NativeHttpResponse.d.ts +3 -0
  219. package/build/services/NativeHttpResponse.d.ts.map +1 -0
  220. package/build/services/NativeHttpResponse.js +6 -0
  221. package/build/services/NativeHttpResponse.js.map +1 -0
  222. package/build/services/NavigationHandlers.d.ts +90 -0
  223. package/build/services/NavigationHandlers.d.ts.map +1 -0
  224. package/build/services/NavigationHandlers.js +379 -0
  225. package/build/services/NavigationHandlers.js.map +1 -0
  226. package/build/services/NavigationService.d.ts +254 -0
  227. package/build/services/NavigationService.d.ts.map +1 -0
  228. package/build/services/NavigationService.js +553 -0
  229. package/build/services/NavigationService.js.map +1 -0
  230. package/build/services/NotificationsEmitter.d.ts +28 -0
  231. package/build/services/NotificationsEmitter.d.ts.map +1 -0
  232. package/build/services/NotificationsEmitter.js +22 -0
  233. package/build/services/NotificationsEmitter.js.map +1 -0
  234. package/build/services/OfflineSpeechModelService.d.ts +33 -0
  235. package/build/services/OfflineSpeechModelService.d.ts.map +1 -0
  236. package/build/services/OfflineSpeechModelService.js +136 -0
  237. package/build/services/OfflineSpeechModelService.js.map +1 -0
  238. package/build/services/OtaInstallCoordinator.d.ts +195 -0
  239. package/build/services/OtaInstallCoordinator.d.ts.map +1 -0
  240. package/build/services/OtaInstallCoordinator.js +1047 -0
  241. package/build/services/OtaInstallCoordinator.js.map +1 -0
  242. package/build/services/OtaService.d.ts +3 -0
  243. package/build/services/OtaService.d.ts.map +1 -0
  244. package/build/services/OtaService.js +65 -0
  245. package/build/services/OtaService.js.map +1 -0
  246. package/build/services/OtaUpdateCheckService.d.ts +65 -0
  247. package/build/services/OtaUpdateCheckService.d.ts.map +1 -0
  248. package/build/services/OtaUpdateCheckService.js +260 -0
  249. package/build/services/OtaUpdateCheckService.js.map +1 -0
  250. package/build/services/PairingIdentity.d.ts +80 -0
  251. package/build/services/PairingIdentity.d.ts.map +1 -0
  252. package/build/services/PairingIdentity.js +145 -0
  253. package/build/services/PairingIdentity.js.map +1 -0
  254. package/build/services/PhoneCalendarHelpers.d.ts +32 -0
  255. package/build/services/PhoneCalendarHelpers.d.ts.map +1 -0
  256. package/build/services/PhoneCalendarHelpers.js +157 -0
  257. package/build/services/PhoneCalendarHelpers.js.map +1 -0
  258. package/build/services/PhoneCalendarService.d.ts +5 -0
  259. package/build/services/PhoneCalendarService.d.ts.map +1 -0
  260. package/build/services/PhoneCalendarService.js +24 -0
  261. package/build/services/PhoneCalendarService.js.map +1 -0
  262. package/build/services/PhoneCameraFovCoordinator.d.ts +28 -0
  263. package/build/services/PhoneCameraFovCoordinator.d.ts.map +1 -0
  264. package/build/services/PhoneCameraFovCoordinator.js +180 -0
  265. package/build/services/PhoneCameraFovCoordinator.js.map +1 -0
  266. package/build/services/PhoneLocationService.d.ts +36 -0
  267. package/build/services/PhoneLocationService.d.ts.map +1 -0
  268. package/build/services/PhoneLocationService.js +115 -0
  269. package/build/services/PhoneLocationService.js.map +1 -0
  270. package/build/services/PhoneNotificationsSync.d.ts +3 -0
  271. package/build/services/PhoneNotificationsSync.d.ts.map +1 -0
  272. package/build/services/PhoneNotificationsSync.js +35 -0
  273. package/build/services/PhoneNotificationsSync.js.map +1 -0
  274. package/build/services/PhonePhotoCoordinator.d.ts +103 -0
  275. package/build/services/PhonePhotoCoordinator.d.ts.map +1 -0
  276. package/build/services/PhonePhotoCoordinator.js +326 -0
  277. package/build/services/PhonePhotoCoordinator.js.map +1 -0
  278. package/build/services/PhoneStreamCoordinator.d.ts +168 -0
  279. package/build/services/PhoneStreamCoordinator.d.ts.map +1 -0
  280. package/build/services/PhoneStreamCoordinator.js +632 -0
  281. package/build/services/PhoneStreamCoordinator.js.map +1 -0
  282. package/build/services/PhoneVideoCoordinator.d.ts +50 -0
  283. package/build/services/PhoneVideoCoordinator.d.ts.map +1 -0
  284. package/build/services/PhoneVideoCoordinator.js +147 -0
  285. package/build/services/PhoneVideoCoordinator.js.map +1 -0
  286. package/build/services/STTModelManager.d.ts +65 -0
  287. package/build/services/STTModelManager.d.ts.map +1 -0
  288. package/build/services/STTModelManager.js +292 -0
  289. package/build/services/STTModelManager.js.map +1 -0
  290. package/build/services/SceneRenderer.d.ts +90 -0
  291. package/build/services/SceneRenderer.d.ts.map +1 -0
  292. package/build/services/SceneRenderer.js +248 -0
  293. package/build/services/SceneRenderer.js.map +1 -0
  294. package/build/services/SentenceTtsPipeline.d.ts +31 -0
  295. package/build/services/SentenceTtsPipeline.d.ts.map +1 -0
  296. package/build/services/SentenceTtsPipeline.js +67 -0
  297. package/build/services/SentenceTtsPipeline.js.map +1 -0
  298. package/build/services/StreamLifecycleController.d.ts +67 -0
  299. package/build/services/StreamLifecycleController.d.ts.map +1 -0
  300. package/build/services/StreamLifecycleController.js +152 -0
  301. package/build/services/StreamLifecycleController.js.map +1 -0
  302. package/build/services/TTSModelManager.d.ts +90 -0
  303. package/build/services/TTSModelManager.d.ts.map +1 -0
  304. package/build/services/TTSModelManager.js +366 -0
  305. package/build/services/TTSModelManager.js.map +1 -0
  306. package/build/services/TranscriptionRouting.d.ts +12 -0
  307. package/build/services/TranscriptionRouting.d.ts.map +1 -0
  308. package/build/services/TranscriptionRouting.js +24 -0
  309. package/build/services/TranscriptionRouting.js.map +1 -0
  310. package/build/services/WebviewBridge.d.ts +22 -0
  311. package/build/services/WebviewBridge.d.ts.map +1 -0
  312. package/build/services/WebviewBridge.js +47 -0
  313. package/build/services/WebviewBridge.js.map +1 -0
  314. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts +17 -0
  315. package/build/services/asg/GalleryMediaIntegrityReportService.d.ts.map +1 -0
  316. package/build/services/asg/GalleryMediaIntegrityReportService.js +43 -0
  317. package/build/services/asg/GalleryMediaIntegrityReportService.js.map +1 -0
  318. package/build/services/asg/asgCameraApi.d.ts +205 -0
  319. package/build/services/asg/asgCameraApi.d.ts.map +1 -0
  320. package/build/services/asg/asgCameraApi.js +1410 -0
  321. package/build/services/asg/asgCameraApi.js.map +1 -0
  322. package/build/services/asg/cameraRollExportCoordinator.d.ts +60 -0
  323. package/build/services/asg/cameraRollExportCoordinator.d.ts.map +1 -0
  324. package/build/services/asg/cameraRollExportCoordinator.js +618 -0
  325. package/build/services/asg/cameraRollExportCoordinator.js.map +1 -0
  326. package/build/services/asg/cameraRollExportLedger.d.ts +44 -0
  327. package/build/services/asg/cameraRollExportLedger.d.ts.map +1 -0
  328. package/build/services/asg/cameraRollExportLedger.js +78 -0
  329. package/build/services/asg/cameraRollExportLedger.js.map +1 -0
  330. package/build/services/asg/galleryMediaValidation.d.ts +29 -0
  331. package/build/services/asg/galleryMediaValidation.d.ts.map +1 -0
  332. package/build/services/asg/galleryMediaValidation.js +149 -0
  333. package/build/services/asg/galleryMediaValidation.js.map +1 -0
  334. package/build/services/asg/galleryNotices.d.ts +33 -0
  335. package/build/services/asg/galleryNotices.d.ts.map +1 -0
  336. package/build/services/asg/galleryNotices.js +29 -0
  337. package/build/services/asg/galleryNotices.js.map +1 -0
  338. package/build/services/asg/galleryPathMigration.d.ts +3 -0
  339. package/build/services/asg/galleryPathMigration.d.ts.map +1 -0
  340. package/build/services/asg/galleryPathMigration.js +26 -0
  341. package/build/services/asg/galleryPathMigration.js.map +1 -0
  342. package/build/services/asg/gallerySettingsService.d.ts +20 -0
  343. package/build/services/asg/gallerySettingsService.d.ts.map +1 -0
  344. package/build/services/asg/gallerySettingsService.js +53 -0
  345. package/build/services/asg/gallerySettingsService.js.map +1 -0
  346. package/build/services/asg/gallerySyncNotifications.d.ts +56 -0
  347. package/build/services/asg/gallerySyncNotifications.d.ts.map +1 -0
  348. package/build/services/asg/gallerySyncNotifications.js +198 -0
  349. package/build/services/asg/gallerySyncNotifications.js.map +1 -0
  350. package/build/services/asg/gallerySyncService.d.ts +137 -0
  351. package/build/services/asg/gallerySyncService.d.ts.map +1 -0
  352. package/build/services/asg/gallerySyncService.js +1933 -0
  353. package/build/services/asg/gallerySyncService.js.map +1 -0
  354. package/build/services/asg/galleryTransferLedger.d.ts +58 -0
  355. package/build/services/asg/galleryTransferLedger.d.ts.map +1 -0
  356. package/build/services/asg/galleryTransferLedger.js +225 -0
  357. package/build/services/asg/galleryTransferLedger.js.map +1 -0
  358. package/build/services/asg/localNetworkTransport.d.ts +15 -0
  359. package/build/services/asg/localNetworkTransport.d.ts.map +1 -0
  360. package/build/services/asg/localNetworkTransport.js +144 -0
  361. package/build/services/asg/localNetworkTransport.js.map +1 -0
  362. package/build/services/asg/localStorageService.d.ts +146 -0
  363. package/build/services/asg/localStorageService.d.ts.map +1 -0
  364. package/build/services/asg/localStorageService.js +572 -0
  365. package/build/services/asg/localStorageService.js.map +1 -0
  366. package/build/services/asg/mediaProcessingQueue.d.ts +70 -0
  367. package/build/services/asg/mediaProcessingQueue.d.ts.map +1 -0
  368. package/build/services/asg/mediaProcessingQueue.js +451 -0
  369. package/build/services/asg/mediaProcessingQueue.js.map +1 -0
  370. package/build/services/asgOtaVersionUrl.d.ts +2 -0
  371. package/build/services/asgOtaVersionUrl.d.ts.map +1 -0
  372. package/build/services/asgOtaVersionUrl.js +36 -0
  373. package/build/services/asgOtaVersionUrl.js.map +1 -0
  374. package/build/services/blobPaths.d.ts +31 -0
  375. package/build/services/blobPaths.d.ts.map +1 -0
  376. package/build/services/blobPaths.js +86 -0
  377. package/build/services/blobPaths.js.map +1 -0
  378. package/build/services/cloudStreamApi.d.ts +59 -0
  379. package/build/services/cloudStreamApi.d.ts.map +1 -0
  380. package/build/services/cloudStreamApi.js +81 -0
  381. package/build/services/cloudStreamApi.js.map +1 -0
  382. package/build/services/gallerySyncClock.d.ts +17 -0
  383. package/build/services/gallerySyncClock.d.ts.map +1 -0
  384. package/build/services/gallerySyncClock.js +21 -0
  385. package/build/services/gallerySyncClock.js.map +1 -0
  386. package/build/services/glassesClockSync.d.ts +20 -0
  387. package/build/services/glassesClockSync.d.ts.map +1 -0
  388. package/build/services/glassesClockSync.js +97 -0
  389. package/build/services/glassesClockSync.js.map +1 -0
  390. package/build/services/manifestVersionGate.d.ts +28 -0
  391. package/build/services/manifestVersionGate.d.ts.map +1 -0
  392. package/build/services/manifestVersionGate.js +41 -0
  393. package/build/services/manifestVersionGate.js.map +1 -0
  394. package/build/services/mentraUiShim.d.ts +38 -0
  395. package/build/services/mentraUiShim.d.ts.map +1 -0
  396. package/build/services/mentraUiShim.js +360 -0
  397. package/build/services/mentraUiShim.js.map +1 -0
  398. package/build/services/navigation/roadNameResolver.d.ts +67 -0
  399. package/build/services/navigation/roadNameResolver.d.ts.map +1 -0
  400. package/build/services/navigation/roadNameResolver.js +96 -0
  401. package/build/services/navigation/roadNameResolver.js.map +1 -0
  402. package/build/services/navigation/routesApiCodec.d.ts +38 -0
  403. package/build/services/navigation/routesApiCodec.d.ts.map +1 -0
  404. package/build/services/navigation/routesApiCodec.js +68 -0
  405. package/build/services/navigation/routesApiCodec.js.map +1 -0
  406. package/build/services/otaDisplayState.d.ts +42 -0
  407. package/build/services/otaDisplayState.d.ts.map +1 -0
  408. package/build/services/otaDisplayState.js +92 -0
  409. package/build/services/otaDisplayState.js.map +1 -0
  410. package/build/services/otaInstallPolicy.d.ts +81 -0
  411. package/build/services/otaInstallPolicy.d.ts.map +1 -0
  412. package/build/services/otaInstallPolicy.js +96 -0
  413. package/build/services/otaInstallPolicy.js.map +1 -0
  414. package/build/services/otaLegacyMapping.d.ts +22 -0
  415. package/build/services/otaLegacyMapping.d.ts.map +1 -0
  416. package/build/services/otaLegacyMapping.js +56 -0
  417. package/build/services/otaLegacyMapping.js.map +1 -0
  418. package/build/services/slimStreamStatus.d.ts +7 -0
  419. package/build/services/slimStreamStatus.d.ts.map +1 -0
  420. package/build/services/slimStreamStatus.js +26 -0
  421. package/build/services/slimStreamStatus.js.map +1 -0
  422. package/build/stores/apps.d.ts +104 -0
  423. package/build/stores/apps.d.ts.map +1 -0
  424. package/build/stores/apps.js +492 -0
  425. package/build/stores/apps.js.map +1 -0
  426. package/build/stores/bluetoothSettingKeys.d.ts +4 -0
  427. package/build/stores/bluetoothSettingKeys.d.ts.map +1 -0
  428. package/build/stores/bluetoothSettingKeys.js +31 -0
  429. package/build/stores/bluetoothSettingKeys.js.map +1 -0
  430. package/build/stores/cloudClientStatus.d.ts +9 -0
  431. package/build/stores/cloudClientStatus.d.ts.map +1 -0
  432. package/build/stores/cloudClientStatus.js +24 -0
  433. package/build/stores/cloudClientStatus.js.map +1 -0
  434. package/build/stores/connection.d.ts +22 -0
  435. package/build/stores/connection.d.ts.map +1 -0
  436. package/build/stores/connection.js +43 -0
  437. package/build/stores/connection.js.map +1 -0
  438. package/build/stores/core.d.ts +15 -0
  439. package/build/stores/core.d.ts.map +1 -0
  440. package/build/stores/core.js +21 -0
  441. package/build/stores/core.js.map +1 -0
  442. package/build/stores/display.d.ts +24 -0
  443. package/build/stores/display.d.ts.map +1 -0
  444. package/build/stores/display.js +96 -0
  445. package/build/stores/display.js.map +1 -0
  446. package/build/stores/gallerySync.d.ts +101 -0
  447. package/build/stores/gallerySync.d.ts.map +1 -0
  448. package/build/stores/gallerySync.js +217 -0
  449. package/build/stores/gallerySync.js.map +1 -0
  450. package/build/stores/glasses.d.ts +62 -0
  451. package/build/stores/glasses.d.ts.map +1 -0
  452. package/build/stores/glasses.js +203 -0
  453. package/build/stores/glasses.js.map +1 -0
  454. package/build/stores/settings.d.ts +37 -0
  455. package/build/stores/settings.d.ts.map +1 -0
  456. package/build/stores/settings.js +922 -0
  457. package/build/stores/settings.js.map +1 -0
  458. package/build/types/applet.d.ts +96 -0
  459. package/build/types/applet.d.ts.map +1 -0
  460. package/build/types/applet.js +5 -0
  461. package/build/types/applet.js.map +1 -0
  462. package/build/types/asg.d.ts +53 -0
  463. package/build/types/asg.d.ts.map +1 -0
  464. package/build/types/asg.js +2 -0
  465. package/build/types/asg.js.map +1 -0
  466. package/build/types/capabilities/even-realities-g1.d.ts +12 -0
  467. package/build/types/capabilities/even-realities-g1.d.ts.map +1 -0
  468. package/build/types/capabilities/even-realities-g1.js +55 -0
  469. package/build/types/capabilities/even-realities-g1.js.map +1 -0
  470. package/build/types/capabilities/even-realities-g2.d.ts +12 -0
  471. package/build/types/capabilities/even-realities-g2.d.ts.map +1 -0
  472. package/build/types/capabilities/even-realities-g2.js +75 -0
  473. package/build/types/capabilities/even-realities-g2.js.map +1 -0
  474. package/build/types/capabilities/mentra-display.d.ts +12 -0
  475. package/build/types/capabilities/mentra-display.d.ts.map +1 -0
  476. package/build/types/capabilities/mentra-display.js +63 -0
  477. package/build/types/capabilities/mentra-display.js.map +1 -0
  478. package/build/types/capabilities/mentra-live.d.ts +12 -0
  479. package/build/types/capabilities/mentra-live.d.ts.map +1 -0
  480. package/build/types/capabilities/mentra-live.js +92 -0
  481. package/build/types/capabilities/mentra-live.js.map +1 -0
  482. package/build/types/capabilities/none.d.ts +13 -0
  483. package/build/types/capabilities/none.d.ts.map +1 -0
  484. package/build/types/capabilities/none.js +65 -0
  485. package/build/types/capabilities/none.js.map +1 -0
  486. package/build/types/capabilities/simulated-glasses.d.ts +13 -0
  487. package/build/types/capabilities/simulated-glasses.d.ts.map +1 -0
  488. package/build/types/capabilities/simulated-glasses.js +65 -0
  489. package/build/types/capabilities/simulated-glasses.js.map +1 -0
  490. package/build/types/capabilities/vuzix-z100.d.ts +12 -0
  491. package/build/types/capabilities/vuzix-z100.d.ts.map +1 -0
  492. package/build/types/capabilities/vuzix-z100.js +52 -0
  493. package/build/types/capabilities/vuzix-z100.js.map +1 -0
  494. package/build/types/enums.d.ts +40 -0
  495. package/build/types/enums.d.ts.map +1 -0
  496. package/build/types/enums.js +44 -0
  497. package/build/types/enums.js.map +1 -0
  498. package/build/types/hardware.d.ts +160 -0
  499. package/build/types/hardware.d.ts.map +1 -0
  500. package/build/types/hardware.js +36 -0
  501. package/build/types/hardware.js.map +1 -0
  502. package/build/types/index.d.ts +11 -0
  503. package/build/types/index.d.ts.map +1 -0
  504. package/build/types/index.js +10 -0
  505. package/build/types/index.js.map +1 -0
  506. package/build/utils/GlobalEventEmitter.d.ts +10 -0
  507. package/build/utils/GlobalEventEmitter.d.ts.map +1 -0
  508. package/build/utils/GlobalEventEmitter.js +13 -0
  509. package/build/utils/GlobalEventEmitter.js.map +1 -0
  510. package/build/utils/cloudClient/RnUdpAdapter.d.ts +3 -0
  511. package/build/utils/cloudClient/RnUdpAdapter.d.ts.map +1 -0
  512. package/build/utils/cloudClient/RnUdpAdapter.js +41 -0
  513. package/build/utils/cloudClient/RnUdpAdapter.js.map +1 -0
  514. package/build/utils/cloudClient/cloudSecureStore.d.ts +3 -0
  515. package/build/utils/cloudClient/cloudSecureStore.d.ts.map +1 -0
  516. package/build/utils/cloudClient/cloudSecureStore.js +26 -0
  517. package/build/utils/cloudClient/cloudSecureStore.js.map +1 -0
  518. package/build/utils/debouncedPatch.d.ts +6 -0
  519. package/build/utils/debouncedPatch.d.ts.map +1 -0
  520. package/build/utils/debouncedPatch.js +25 -0
  521. package/build/utils/debouncedPatch.js.map +1 -0
  522. package/build/utils/devLogging.d.ts +26 -0
  523. package/build/utils/devLogging.d.ts.map +1 -0
  524. package/build/utils/devLogging.js +116 -0
  525. package/build/utils/devLogging.js.map +1 -0
  526. package/build/utils/devMiniappLaunch.d.ts +44 -0
  527. package/build/utils/devMiniappLaunch.d.ts.map +1 -0
  528. package/build/utils/devMiniappLaunch.js +52 -0
  529. package/build/utils/devMiniappLaunch.js.map +1 -0
  530. package/build/utils/diagnosticContext.d.ts +3 -0
  531. package/build/utils/diagnosticContext.d.ts.map +1 -0
  532. package/build/utils/diagnosticContext.js +119 -0
  533. package/build/utils/diagnosticContext.js.map +1 -0
  534. package/build/utils/display/composer/ColumnComposer.d.ts +131 -0
  535. package/build/utils/display/composer/ColumnComposer.d.ts.map +1 -0
  536. package/build/utils/display/composer/ColumnComposer.js +204 -0
  537. package/build/utils/display/composer/ColumnComposer.js.map +1 -0
  538. package/build/utils/display/composer/index.d.ts +9 -0
  539. package/build/utils/display/composer/index.d.ts.map +1 -0
  540. package/build/utils/display/composer/index.js +9 -0
  541. package/build/utils/display/composer/index.js.map +1 -0
  542. package/build/utils/display/helpers/DisplayHelpers.d.ts +165 -0
  543. package/build/utils/display/helpers/DisplayHelpers.d.ts.map +1 -0
  544. package/build/utils/display/helpers/DisplayHelpers.js +312 -0
  545. package/build/utils/display/helpers/DisplayHelpers.js.map +1 -0
  546. package/build/utils/display/helpers/ScrollView.d.ts +183 -0
  547. package/build/utils/display/helpers/ScrollView.d.ts.map +1 -0
  548. package/build/utils/display/helpers/ScrollView.js +257 -0
  549. package/build/utils/display/helpers/ScrollView.js.map +1 -0
  550. package/build/utils/display/helpers/index.d.ts +11 -0
  551. package/build/utils/display/helpers/index.d.ts.map +1 -0
  552. package/build/utils/display/helpers/index.js +10 -0
  553. package/build/utils/display/helpers/index.js.map +1 -0
  554. package/build/utils/display/index.d.ts +174 -0
  555. package/build/utils/display/index.d.ts.map +1 -0
  556. package/build/utils/display/index.js +185 -0
  557. package/build/utils/display/index.js.map +1 -0
  558. package/build/utils/display/measurer/TextMeasurer.d.ts +160 -0
  559. package/build/utils/display/measurer/TextMeasurer.d.ts.map +1 -0
  560. package/build/utils/display/measurer/TextMeasurer.js +273 -0
  561. package/build/utils/display/measurer/TextMeasurer.js.map +1 -0
  562. package/build/utils/display/measurer/index.d.ts +10 -0
  563. package/build/utils/display/measurer/index.d.ts.map +1 -0
  564. package/build/utils/display/measurer/index.js +11 -0
  565. package/build/utils/display/measurer/index.js.map +1 -0
  566. package/build/utils/display/measurer/script-detection.d.ts +53 -0
  567. package/build/utils/display/measurer/script-detection.d.ts.map +1 -0
  568. package/build/utils/display/measurer/script-detection.js +184 -0
  569. package/build/utils/display/measurer/script-detection.js.map +1 -0
  570. package/build/utils/display/profiles/g1.d.ts +33 -0
  571. package/build/utils/display/profiles/g1.d.ts.map +1 -0
  572. package/build/utils/display/profiles/g1.js +213 -0
  573. package/build/utils/display/profiles/g1.js.map +1 -0
  574. package/build/utils/display/profiles/g2.d.ts +13 -0
  575. package/build/utils/display/profiles/g2.d.ts.map +1 -0
  576. package/build/utils/display/profiles/g2.js +34 -0
  577. package/build/utils/display/profiles/g2.js.map +1 -0
  578. package/build/utils/display/profiles/index.d.ts +12 -0
  579. package/build/utils/display/profiles/index.d.ts.map +1 -0
  580. package/build/utils/display/profiles/index.js +15 -0
  581. package/build/utils/display/profiles/index.js.map +1 -0
  582. package/build/utils/display/profiles/nex.d.ts +10 -0
  583. package/build/utils/display/profiles/nex.d.ts.map +1 -0
  584. package/build/utils/display/profiles/nex.js +150 -0
  585. package/build/utils/display/profiles/nex.js.map +1 -0
  586. package/build/utils/display/profiles/types.d.ts +103 -0
  587. package/build/utils/display/profiles/types.d.ts.map +1 -0
  588. package/build/utils/display/profiles/types.js +2 -0
  589. package/build/utils/display/profiles/types.js.map +1 -0
  590. package/build/utils/display/profiles/z100.d.ts +33 -0
  591. package/build/utils/display/profiles/z100.d.ts.map +1 -0
  592. package/build/utils/display/profiles/z100.js +182 -0
  593. package/build/utils/display/profiles/z100.js.map +1 -0
  594. package/build/utils/display/scene/degrade.d.ts +25 -0
  595. package/build/utils/display/scene/degrade.d.ts.map +1 -0
  596. package/build/utils/display/scene/degrade.js +64 -0
  597. package/build/utils/display/scene/degrade.js.map +1 -0
  598. package/build/utils/display/scene/differ.d.ts +38 -0
  599. package/build/utils/display/scene/differ.d.ts.map +1 -0
  600. package/build/utils/display/scene/differ.js +107 -0
  601. package/build/utils/display/scene/differ.js.map +1 -0
  602. package/build/utils/display/scene/index.d.ts +10 -0
  603. package/build/utils/display/scene/index.d.ts.map +1 -0
  604. package/build/utils/display/scene/index.js +6 -0
  605. package/build/utils/display/scene/index.js.map +1 -0
  606. package/build/utils/display/scene/process.d.ts +35 -0
  607. package/build/utils/display/scene/process.d.ts.map +1 -0
  608. package/build/utils/display/scene/process.js +187 -0
  609. package/build/utils/display/scene/process.js.map +1 -0
  610. package/build/utils/display/scene/store.d.ts +48 -0
  611. package/build/utils/display/scene/store.d.ts.map +1 -0
  612. package/build/utils/display/scene/store.js +0 -0
  613. package/build/utils/display/scene/store.js.map +1 -0
  614. package/build/utils/display/scene/types.d.ts +120 -0
  615. package/build/utils/display/scene/types.d.ts.map +1 -0
  616. package/build/utils/display/scene/types.js +0 -0
  617. package/build/utils/display/scene/types.js.map +1 -0
  618. package/build/utils/display/wrapper/TextWrapper.d.ts +102 -0
  619. package/build/utils/display/wrapper/TextWrapper.d.ts.map +1 -0
  620. package/build/utils/display/wrapper/TextWrapper.js +471 -0
  621. package/build/utils/display/wrapper/TextWrapper.js.map +1 -0
  622. package/build/utils/display/wrapper/index.d.ts +12 -0
  623. package/build/utils/display/wrapper/index.d.ts.map +1 -0
  624. package/build/utils/display/wrapper/index.js +12 -0
  625. package/build/utils/display/wrapper/index.js.map +1 -0
  626. package/build/utils/display/wrapper/types.d.ts +75 -0
  627. package/build/utils/display/wrapper/types.d.ts.map +1 -0
  628. package/build/utils/display/wrapper/types.js +11 -0
  629. package/build/utils/display/wrapper/types.js.map +1 -0
  630. package/build/utils/e2eMetrics.d.ts +6 -0
  631. package/build/utils/e2eMetrics.d.ts.map +1 -0
  632. package/build/utils/e2eMetrics.js +27 -0
  633. package/build/utils/e2eMetrics.js.map +1 -0
  634. package/build/utils/hardware/hardware.d.ts +42 -0
  635. package/build/utils/hardware/hardware.d.ts.map +1 -0
  636. package/build/utils/hardware/hardware.js +127 -0
  637. package/build/utils/hardware/hardware.js.map +1 -0
  638. package/build/utils/hardware/index.d.ts +2 -0
  639. package/build/utils/hardware/index.d.ts.map +1 -0
  640. package/build/utils/hardware/index.js +2 -0
  641. package/build/utils/hardware/index.js.map +1 -0
  642. package/build/utils/miniappGlobals.d.ts +60 -0
  643. package/build/utils/miniappGlobals.d.ts.map +1 -0
  644. package/build/utils/miniappGlobals.js +224 -0
  645. package/build/utils/miniappGlobals.js.map +1 -0
  646. package/build/utils/permissions/MediaLibraryPermissions.d.ts +45 -0
  647. package/build/utils/permissions/MediaLibraryPermissions.d.ts.map +1 -0
  648. package/build/utils/permissions/MediaLibraryPermissions.js +145 -0
  649. package/build/utils/permissions/MediaLibraryPermissions.js.map +1 -0
  650. package/build/utils/permissions/galleryDisplayName.d.ts +8 -0
  651. package/build/utils/permissions/galleryDisplayName.d.ts.map +1 -0
  652. package/build/utils/permissions/galleryDisplayName.js +25 -0
  653. package/build/utils/permissions/galleryDisplayName.js.map +1 -0
  654. package/build/utils/storage/index.d.ts +3 -0
  655. package/build/utils/storage/index.d.ts.map +1 -0
  656. package/build/utils/storage/index.js +3 -0
  657. package/build/utils/storage/index.js.map +1 -0
  658. package/build/utils/storage/storage.d.ts +24 -0
  659. package/build/utils/storage/storage.d.ts.map +1 -0
  660. package/build/utils/storage/storage.js +85 -0
  661. package/build/utils/storage/storage.js.map +1 -0
  662. package/build/utils/storage/zip.d.ts +3 -0
  663. package/build/utils/storage/zip.d.ts.map +1 -0
  664. package/build/utils/storage/zip.js +14 -0
  665. package/build/utils/storage/zip.js.map +1 -0
  666. package/build/utils/timers/index.d.ts +3 -0
  667. package/build/utils/timers/index.d.ts.map +1 -0
  668. package/build/utils/timers/index.js +3 -0
  669. package/build/utils/timers/index.js.map +1 -0
  670. package/build/utils/timers/timers.d.ts +9 -0
  671. package/build/utils/timers/timers.d.ts.map +1 -0
  672. package/build/utils/timers/timers.js +105 -0
  673. package/build/utils/timers/timers.js.map +1 -0
  674. package/package.json +120 -0
  675. package/src/devtools.ts +13 -0
  676. package/src/engine.ts +173 -0
  677. package/src/facades/dev.ts +198 -0
  678. package/src/facades/display.ts +17 -0
  679. package/src/facades/displayMirror.ts +33 -0
  680. package/src/facades/gallery.ts +69 -0
  681. package/src/facades/glasses.ts +206 -0
  682. package/src/facades/glassesSettings.ts +56 -0
  683. package/src/facades/glassesWifi.ts +68 -0
  684. package/src/facades/miniapps.ts +55 -0
  685. package/src/facades/notifications.ts +15 -0
  686. package/src/facades/ota.ts +174 -0
  687. package/src/facades/pairing.ts +329 -0
  688. package/src/facades/permissions.ts +165 -0
  689. package/src/facades/phoneNotifications.ts +50 -0
  690. package/src/facades/reports.ts +185 -0
  691. package/src/facades/session.ts +55 -0
  692. package/src/facades/settings.ts +57 -0
  693. package/src/facades/speech.ts +38 -0
  694. package/src/index.ts +191 -0
  695. package/src/internal.ts +159 -0
  696. package/src/runtime/bootstrap.ts +118 -0
  697. package/src/runtime/config.ts +147 -0
  698. package/src/runtime/streamConfig.ts +34 -0
  699. package/src/services/AppRegistry.ts +1190 -0
  700. package/src/services/AudioCloudUplink.ts +50 -0
  701. package/src/services/AudioPlaybackService.ts +813 -0
  702. package/src/services/AutomaticReportResult.ts +48 -0
  703. package/src/services/BlobStore.ts +746 -0
  704. package/src/services/CaptionsTesterReportService.ts +107 -0
  705. package/src/services/CloudAudioSubscriptionSync.ts +41 -0
  706. package/src/services/CloudClientService.ts +689 -0
  707. package/src/services/CloudTranscriptE2EMetrics.ts +27 -0
  708. package/src/services/ConnectionCoordinator.ts +65 -0
  709. package/src/services/DevServerBridge.ts +332 -0
  710. package/src/services/DeviceEventRouter.ts +238 -0
  711. package/src/services/DeviceStoreHydration.ts +130 -0
  712. package/src/services/DisplayProcessor.ts +775 -0
  713. package/src/services/GlassesReadiness.ts +103 -0
  714. package/src/services/GlassesSettingsSync.ts +134 -0
  715. package/src/services/GlassesStatusProjection.ts +73 -0
  716. package/src/services/HeadingService.ts +98 -0
  717. package/src/services/LocalDisplayManager.ts +703 -0
  718. package/src/services/LocalMiniappRuntime.ts +4213 -0
  719. package/src/services/LocalSttFallbackCoordinator.ts +147 -0
  720. package/src/services/MentraJSCrashController.ts +189 -0
  721. package/src/services/MentraJSCrashloopReportService.ts +66 -0
  722. package/src/services/MentraJSLogPipeline.ts +166 -0
  723. package/src/services/MentraJSRouter.ts +557 -0
  724. package/src/services/MentraUIRouter.ts +244 -0
  725. package/src/services/MicStateCoordinator.ts +94 -0
  726. package/src/services/MiniappEngine.ts +143 -0
  727. package/src/services/MiniappLauncher.ts +340 -0
  728. package/src/services/MiniappRunningRegistry.ts +57 -0
  729. package/src/services/NativeHttpResponse.ts +6 -0
  730. package/src/services/NavigationHandlers.ts +423 -0
  731. package/src/services/NavigationService.ts +731 -0
  732. package/src/services/NotificationsEmitter.ts +48 -0
  733. package/src/services/OfflineSpeechModelService.ts +168 -0
  734. package/src/services/OtaInstallCoordinator.ts +1205 -0
  735. package/src/services/OtaService.ts +83 -0
  736. package/src/services/OtaUpdateCheckService.ts +386 -0
  737. package/src/services/PairingIdentity.ts +154 -0
  738. package/src/services/PhoneCalendarHelpers.ts +212 -0
  739. package/src/services/PhoneCalendarService.ts +42 -0
  740. package/src/services/PhoneCameraFovCoordinator.ts +195 -0
  741. package/src/services/PhoneLocationService.ts +122 -0
  742. package/src/services/PhoneNotificationsSync.ts +44 -0
  743. package/src/services/PhonePhotoCoordinator.ts +409 -0
  744. package/src/services/PhoneStreamCoordinator.ts +777 -0
  745. package/src/services/PhoneVideoCoordinator.ts +189 -0
  746. package/src/services/STTModelManager.ts +360 -0
  747. package/src/services/SceneRenderer.ts +292 -0
  748. package/src/services/SentenceTtsPipeline.ts +106 -0
  749. package/src/services/StreamLifecycleController.ts +213 -0
  750. package/src/services/TTSModelManager.ts +466 -0
  751. package/src/services/TranscriptionRouting.ts +37 -0
  752. package/src/services/WebviewBridge.ts +50 -0
  753. package/src/services/asg/GalleryMediaIntegrityReportService.ts +70 -0
  754. package/src/services/asg/asgCameraApi.ts +1695 -0
  755. package/src/services/asg/cameraRollExportCoordinator.ts +627 -0
  756. package/src/services/asg/cameraRollExportLedger.ts +122 -0
  757. package/src/services/asg/galleryMediaValidation.ts +183 -0
  758. package/src/services/asg/galleryNotices.ts +61 -0
  759. package/src/services/asg/galleryPathMigration.ts +22 -0
  760. package/src/services/asg/gallerySettingsService.ts +68 -0
  761. package/src/services/asg/gallerySyncNotifications.ts +236 -0
  762. package/src/services/asg/gallerySyncService.ts +2269 -0
  763. package/src/services/asg/galleryTransferLedger.ts +312 -0
  764. package/src/services/asg/localNetworkTransport.ts +173 -0
  765. package/src/services/asg/localStorageService.ts +652 -0
  766. package/src/services/asg/mediaProcessingQueue.ts +518 -0
  767. package/src/services/asgOtaVersionUrl.ts +41 -0
  768. package/src/services/blobPaths.ts +86 -0
  769. package/src/services/cloudStreamApi.ts +154 -0
  770. package/src/services/gallerySyncClock.ts +39 -0
  771. package/src/services/glassesClockSync.ts +115 -0
  772. package/src/services/manifestVersionGate.ts +43 -0
  773. package/src/services/mentraUiShim.ts +366 -0
  774. package/src/services/navigation/roadNameResolver.ts +112 -0
  775. package/src/services/navigation/routesApiCodec.ts +69 -0
  776. package/src/services/otaDisplayState.ts +115 -0
  777. package/src/services/otaInstallPolicy.ts +106 -0
  778. package/src/services/otaLegacyMapping.ts +71 -0
  779. package/src/services/slimStreamStatus.ts +28 -0
  780. package/src/stores/apps.ts +614 -0
  781. package/src/stores/bluetoothSettingKeys.ts +36 -0
  782. package/src/stores/cloudClientStatus.ts +37 -0
  783. package/src/stores/connection.ts +69 -0
  784. package/src/stores/core.ts +32 -0
  785. package/src/stores/display.ts +121 -0
  786. package/src/stores/gallerySync.ts +380 -0
  787. package/src/stores/glasses.ts +309 -0
  788. package/src/stores/settings.ts +1001 -0
  789. package/src/types/applet.ts +112 -0
  790. package/src/types/asg.ts +58 -0
  791. package/src/types/capabilities/even-realities-g1.ts +67 -0
  792. package/src/types/capabilities/even-realities-g2.ts +88 -0
  793. package/src/types/capabilities/mentra-display.ts +75 -0
  794. package/src/types/capabilities/mentra-live.ts +103 -0
  795. package/src/types/capabilities/none.ts +76 -0
  796. package/src/types/capabilities/simulated-glasses.ts +76 -0
  797. package/src/types/capabilities/vuzix-z100.ts +64 -0
  798. package/src/types/enums.ts +43 -0
  799. package/src/types/hardware.ts +203 -0
  800. package/src/types/index.ts +37 -0
  801. package/src/utils/GlobalEventEmitter.ts +14 -0
  802. package/src/utils/cloudClient/RnUdpAdapter.ts +47 -0
  803. package/src/utils/cloudClient/cloudSecureStore.ts +28 -0
  804. package/src/utils/debouncedPatch.ts +28 -0
  805. package/src/utils/devLogging.ts +140 -0
  806. package/src/utils/devMiniappLaunch.ts +68 -0
  807. package/src/utils/diagnosticContext.ts +155 -0
  808. package/src/utils/display/composer/ColumnComposer.ts +285 -0
  809. package/src/utils/display/composer/index.ts +15 -0
  810. package/src/utils/display/helpers/DisplayHelpers.ts +413 -0
  811. package/src/utils/display/helpers/ScrollView.ts +337 -0
  812. package/src/utils/display/helpers/index.ts +14 -0
  813. package/src/utils/display/index.ts +273 -0
  814. package/src/utils/display/measurer/TextMeasurer.ts +346 -0
  815. package/src/utils/display/measurer/index.ts +21 -0
  816. package/src/utils/display/measurer/script-detection.ts +218 -0
  817. package/src/utils/display/profiles/g1.ts +236 -0
  818. package/src/utils/display/profiles/g2.ts +39 -0
  819. package/src/utils/display/profiles/index.ts +28 -0
  820. package/src/utils/display/profiles/nex.ts +166 -0
  821. package/src/utils/display/profiles/types.ts +132 -0
  822. package/src/utils/display/profiles/z100.ts +198 -0
  823. package/src/utils/display/scene/degrade.ts +80 -0
  824. package/src/utils/display/scene/differ.ts +128 -0
  825. package/src/utils/display/scene/index.ts +21 -0
  826. package/src/utils/display/scene/process.ts +214 -0
  827. package/src/utils/display/scene/store.ts +0 -0
  828. package/src/utils/display/scene/types.ts +0 -0
  829. package/src/utils/display/wrapper/TextWrapper.ts +546 -0
  830. package/src/utils/display/wrapper/index.ts +15 -0
  831. package/src/utils/display/wrapper/types.ts +102 -0
  832. package/src/utils/e2eMetrics.ts +30 -0
  833. package/src/utils/hardware/hardware.ts +166 -0
  834. package/src/utils/hardware/index.ts +1 -0
  835. package/src/utils/miniappGlobals.ts +260 -0
  836. package/src/utils/permissions/MediaLibraryPermissions.ts +161 -0
  837. package/src/utils/permissions/galleryDisplayName.ts +28 -0
  838. package/src/utils/storage/index.ts +2 -0
  839. package/src/utils/storage/storage.ts +101 -0
  840. package/src/utils/storage/zip.ts +13 -0
  841. package/src/utils/timers/index.ts +2 -0
  842. package/src/utils/timers/timers.ts +139 -0
@@ -0,0 +1,614 @@
1
+ /**
2
+ * Engine apps store — runtime state of installed and local applets.
3
+ *
4
+ * The OEM-facing API: subscribe to the running set, install/uninstall
5
+ * miniapps, start/stop them. The store delegates install plumbing to
6
+ * AppRegistry, and exposes hooks (`useApps`, `useStart`, `useStop`,
7
+ * `useRefresh`, `useStopAll`) that the host UI can read.
8
+ *
9
+ * Source of `apps`:
10
+ * - Local: appRegistry.getInstalledMiniapps() (always)
11
+ */
12
+
13
+ import {useMemo} from "react"
14
+ import {AsyncResult, Result, result as Res} from "typesafe-ts"
15
+ import {create} from "zustand"
16
+
17
+ import type {ClientApp} from "../types/applet"
18
+ import {DeviceTypes} from "../types/enums"
19
+ import {getModelCapabilities} from "../types/hardware"
20
+ import {HardwareCompatibility, type CompatibilityResult} from "../utils/hardware/hardware"
21
+ import {storage} from "../utils/storage/storage"
22
+ import appRegistry from "../services/AppRegistry"
23
+ import {islandNotifications} from "../services/NotificationsEmitter"
24
+ import sttModelManager from "../services/STTModelManager"
25
+ import {miniappLauncher} from "../services/MiniappLauncher"
26
+ import {miniappRunningRegistry} from "../services/MiniappRunningRegistry"
27
+ import {SETTINGS, useSettingsStore} from "./settings"
28
+ import BluetoothSdk from "@mentra/bluetooth-sdk"
29
+
30
+ // ---------------------------------------------------------------------------
31
+ // Configuration / hooks
32
+ // ---------------------------------------------------------------------------
33
+
34
+ export interface StartOptions {
35
+ skipNavigation?: boolean
36
+ }
37
+
38
+ export interface AppStoreHooks {
39
+ /**
40
+ * A start was blocked because the app is hardware-incompatible. Engine made
41
+ * the decision (and raised the `version_incompatible` notification); the host
42
+ * renders its branded alert here.
43
+ */
44
+ onIncompatibleBlocked?: (app: ClientApp) => void
45
+ /**
46
+ * A start was blocked because the app requires the on-device STT model
47
+ * (declared at registration — see AppRegistry.installOfflineApp) and none is
48
+ * installed. Engine decided via its model manager; the host renders the
49
+ * alert / settings navigation here.
50
+ */
51
+ onMissingSpeechModel?: (app: ClientApp) => void
52
+ /**
53
+ * An open request passed the gates — fired on EVERY open, including
54
+ * re-opening an already-running app, so the host's navigation / open
55
+ * animation always plays.
56
+ */
57
+ onOpenRequested?: (app: ClientApp, opts?: StartOptions) => void
58
+ }
59
+
60
+ let hostHooks: AppStoreHooks = {}
61
+
62
+ export function installAppStoreHooks(hooks: AppStoreHooks): void {
63
+ hostHooks = {...hostHooks, ...hooks}
64
+ }
65
+
66
+ // ---------------------------------------------------------------------------
67
+ // Store
68
+ // ---------------------------------------------------------------------------
69
+
70
+ interface AppStatusState {
71
+ apps: ClientApp[]
72
+ /**
73
+ * Source of truth for which app is foregrounded in the Compositor overlay.
74
+ * The per-app `foregrounded` boolean is derived from this in `projectApps`
75
+ * so a refresh can never drop the flag when an app is transiently missing
76
+ * from one of the two refresh passes (local-only then merged). See
77
+ * `projectApps` / `setForeground` / `clearForeground`.
78
+ */
79
+ foregroundedPackage: string | null
80
+ refresh: () => Promise<void>
81
+ /** Resolves true if the app actually started; false if a host gate aborted it or its JS context failed to spawn. */
82
+ start: (app: ClientApp, opts?: StartOptions) => Promise<boolean>
83
+ stop: (packageName: string) => Promise<void>
84
+ setForeground: (packageName: string) => Promise<void>
85
+ clearForeground: () => void
86
+ stopAll: () => AsyncResult<void, Error>
87
+ install: (url: string, opts?: {versionOverride?: string}) => AsyncResult<void, Error>
88
+ uninstall: (packageName: string, version?: string) => AsyncResult<void, Error>
89
+ saveScreenshot: (packageName: string, screenshot: string) => Promise<void>
90
+ setHiddenStatus: (packageName: string, status: boolean) => void
91
+ getHiddenStatus: (packageName: string) => boolean
92
+ /** Replace the whole apps array. Hosts use this when their extra source changes. */
93
+ setApps: (apps: ClientApp[]) => void
94
+ }
95
+
96
+ export const DUMMY_APPLET: ClientApp = {
97
+ packageName: "",
98
+ name: "",
99
+ webviewUrl: "",
100
+ logoUrl: "",
101
+ type: "standard",
102
+ permissions: [],
103
+ running: false,
104
+ loading: false,
105
+ healthy: true,
106
+ hardwareRequirements: [],
107
+ offline: true,
108
+ offlineRoute: "",
109
+ local: false,
110
+ hidden: false,
111
+ }
112
+
113
+ export type OrderMap = Record<string, number>
114
+ const APP_ORDER_KEY = "foreground_apps_order"
115
+
116
+ export const saveAppsOrder = (orderMap: OrderMap): Result<void, Error> => {
117
+ return storage.save(APP_ORDER_KEY, orderMap)
118
+ }
119
+
120
+ export const getAppsOrder = (): Result<OrderMap, Error> => {
121
+ return storage.load<OrderMap>(APP_ORDER_KEY)
122
+ }
123
+
124
+ // In-memory cache for hidden flags. `projectApps` reads getHiddenStatus once
125
+ // per app per refresh — without a cache that was a synchronous JNI hop per
126
+ // app per refresh on a hot UI path. Kept consistent with disk by writing
127
+ // through in setHiddenStatus. Map of packageName → hidden boolean.
128
+ const hiddenStatusCache = new Map<string, boolean>()
129
+
130
+ const getRawPackageNamePriority = (pkg: string): number => {
131
+ if (pkg.includes("@empty")) {
132
+ return 1000
133
+ }
134
+ return 0
135
+ }
136
+
137
+ export const sortAppsByPackageNamePriority = (a: ClientApp, b: ClientApp): number => {
138
+ const pa = getRawPackageNamePriority(a.packageName)
139
+ const pb = getRawPackageNamePriority(b.packageName)
140
+ if (pa !== pb) {
141
+ return pa - pb
142
+ }
143
+ return a.name.localeCompare(b.name)
144
+ }
145
+
146
+ export const saveLastOpenTime = (packageName: string): void => {
147
+ storage.save(`${packageName}_last_open_time`, Date.now())
148
+ }
149
+
150
+ export const getLastOpenTime = (packageName: string): number => {
151
+ const res = storage.load<number>(`${packageName}_last_open_time`)
152
+ if (res.is_ok()) return res.value
153
+ return 0
154
+ }
155
+
156
+ export const sortAppsByLastOpenTime = async <T extends {packageName: string}>(apps: T[]): Promise<T[]> => {
157
+ const timestamps = apps.map((app) => ({app, time: getLastOpenTime(app.packageName)}))
158
+ return timestamps.sort((a, b) => a.time - b.time).map((entry) => entry.app)
159
+ }
160
+
161
+ const startStopApp = async (app: ClientApp, status: boolean): Promise<void> => {
162
+ if (!status && app.onStop) {
163
+ try {
164
+ app.onStop()
165
+ } catch (e) {
166
+ console.warn(`ISLAND: onStop threw for ${app.packageName}`, e)
167
+ }
168
+ }
169
+ if (status && app.onStart) {
170
+ try {
171
+ app.onStart()
172
+ } catch (e) {
173
+ console.warn(`ISLAND: onStart threw for ${app.packageName}`, e)
174
+ }
175
+ }
176
+ }
177
+
178
+ /**
179
+ * Build the final `apps` array for the store from the installed/offline app
180
+ * source. Pure — same inputs -> same outputs.
181
+ */
182
+ function projectApps(previousState: AppStatusState, localApps: ClientApp[]): ClientApp[] {
183
+ // Dedupe by packageName, keep first occurrence.
184
+ const byPackage = new Map<string, ClientApp>()
185
+ for (const app of localApps) {
186
+ if (!byPackage.has(app.packageName)) byPackage.set(app.packageName, app)
187
+ }
188
+
189
+ // Index previous snapshot for cheap lookups (was O(N²) via .find()).
190
+ const previousByPackage = new Map<string, ClientApp>()
191
+ for (const oldApp of previousState.apps) {
192
+ previousByPackage.set(oldApp.packageName, oldApp)
193
+ }
194
+
195
+ const defaultWearable =
196
+ (useSettingsStore.getState().getSetting(SETTINGS.default_wearable.key) as DeviceTypes | undefined) ||
197
+ DeviceTypes.NONE
198
+ const capabilities = getModelCapabilities(defaultWearable)
199
+
200
+ // Single pass: dedupe → screenshot carry-over → compat → hidden, all into
201
+ // fresh objects. The previous in-place mutation re-used object references
202
+ // across refreshes, which broke React.memo / referential-equality
203
+ // memoization downstream (every refresh propagated re-renders even when
204
+ // nothing meaningful changed) AND tripped Reanimated's "tried to modify
205
+ // key of an object already passed to a worklet" warning whenever the home
206
+ // screen's animated app cards held a reference to a previous snapshot's
207
+ // app object that we then mutated.
208
+ //
209
+ // Identity stability: refresh() is event-driven and fires repeatedly (and
210
+ // twice per cycle via the local-only → merged two-pass emit). If we always
211
+ // returned fresh objects, every poll changed the identity of EVERY app —
212
+ // which re-rendered the Compositor (via useForegroundApp) mid-slide and made
213
+ // the open/close animation hitch, and churned the home grid / switcher pill.
214
+ // So we build the candidate object, then REUSE the previous reference when
215
+ // nothing meaningful changed. Same pattern as the miniappRunningRegistry
216
+ // projection below. A stable foreground-app reference lets the Compositor's
217
+ // slide run uninterrupted on the UI thread.
218
+ return Array.from(byPackage.values()).map((app) => {
219
+ const next: ClientApp = {
220
+ ...app,
221
+ screenshot: previousByPackage.get(app.packageName)?.screenshot ?? app.screenshot,
222
+ compatibility: HardwareCompatibility.checkCompatibility(app.hardwareRequirements, capabilities),
223
+ hidden: previousState.getHiddenStatus(app.packageName),
224
+ // Derive the foreground flag from the store's single source of truth
225
+ // (`foregroundedPackage`), NOT from the previous snapshot. Carrying it over
226
+ // per-app meant a refresh that momentarily omitted an app (e.g. the
227
+ // two-pass local-only → merged emit) would reset its flag to false — which
228
+ // raced OfflineAppHost's interceptor guard and made the hosted miniapp fall
229
+ // through to the root router (restart). Deriving here keeps the flag stable
230
+ // across both passes.
231
+ foregrounded: app.packageName === previousState.foregroundedPackage,
232
+ }
233
+ const prev = previousByPackage.get(app.packageName)
234
+ return prev && shallowEqualApp(prev, next) ? prev : next
235
+ })
236
+ }
237
+
238
+ // Cheap equality check used by projectApps to preserve object identity across
239
+ // refreshes when nothing meaningful changed. Most keys are compared by
240
+ // reference (the source app's nested fields — permissions, hardwareRequirements,
241
+ // parameters — are reference-stable within a refresh). The ONE exception is
242
+ // `compatibility`, which projectApps recomputes into a fresh object every call;
243
+ // comparing it by reference would always differ and defeat the whole point. We
244
+ // compare it structurally instead so identity is only broken when the device's
245
+ // actual compatibility verdict changes (e.g. glasses connect/disconnect).
246
+ function shallowEqualApp(a: ClientApp, b: ClientApp): boolean {
247
+ const aKeys = Object.keys(a) as (keyof ClientApp)[]
248
+ const bKeys = Object.keys(b) as (keyof ClientApp)[]
249
+ if (aKeys.length !== bKeys.length) return false
250
+ for (const k of aKeys) {
251
+ if (k === "compatibility") {
252
+ if (!compatibilityEqual(a.compatibility, b.compatibility)) return false
253
+ continue
254
+ }
255
+ if (a[k] !== b[k]) return false
256
+ }
257
+ return true
258
+ }
259
+
260
+ function compatibilityEqual(a?: CompatibilityResult, b?: CompatibilityResult): boolean {
261
+ if (a === b) return true
262
+ if (!a || !b) return false
263
+ return (
264
+ a.isCompatible === b.isCompatible &&
265
+ a.missingRequired.length === b.missingRequired.length &&
266
+ a.missingOptional.length === b.missingOptional.length &&
267
+ a.warnings.length === b.warnings.length
268
+ )
269
+ }
270
+
271
+ export const useAppStatusStore = create<AppStatusState>((set, get) => ({
272
+ apps: [],
273
+ foregroundedPackage: null,
274
+
275
+ refresh: async () => {
276
+ const previousState = get()
277
+ const localApps = await appRegistry.getInstalledMiniapps()
278
+ set({apps: projectApps(previousState, localApps)})
279
+ },
280
+
281
+ start: async (clientApp: ClientApp, opts?: StartOptions) => {
282
+ const state = get()
283
+ const packageName = clientApp.packageName
284
+ const app = state.apps.find((a) => a.packageName === packageName)
285
+ if (!app) {
286
+ console.error(`ISLAND: app not found for package name: ${packageName}`)
287
+ return false
288
+ }
289
+
290
+ // Skip spawning a NEW app while another is mid-launch — concurrent spawns
291
+ // race the foreground-only-one teardown. This is checked BEFORE the gates
292
+ // and the onOpenRequested seam (which navigates/foregrounds) so a gated
293
+ // launch doesn't paint a splash it can't back. Re-opening an already-running
294
+ // app is exempt: it has nothing to spawn, so it skips this gate and is
295
+ // allowed to re-navigate/animate below.
296
+ // That exemption is the fix for the "second tap during another app's launch
297
+ // window silently does nothing" bug.
298
+ if (!app.running && state.apps.some((a) => a.loading)) {
299
+ console.log(`ISLAND: skipping start ${packageName} — another app is loading`)
300
+ return false
301
+ }
302
+
303
+ if (!app.offline && !app.local) {
304
+ console.warn(`ISLAND: cloud-v1 app entries are no longer supported: ${packageName}`)
305
+ return false
306
+ }
307
+
308
+ // Hardware-compatibility gate — engine decides and blocks; the host renders
309
+ // its branded alert via onIncompatibleBlocked (and/or the structured
310
+ // notification below). `!isCompatible` (not `=== false`) keeps the semantics
311
+ // of the host gate this replaces: an unknown verdict blocks, not launches.
312
+ if (!app.compatibility?.isCompatible) {
313
+ islandNotifications.emit({
314
+ kind: "version_incompatible",
315
+ packageName,
316
+ reason: `${app.name ?? packageName} is not compatible with the connected glasses`,
317
+ metadata: {missingRequired: app.compatibility?.missingRequired ?? []},
318
+ timestamp: Date.now(),
319
+ })
320
+ hostHooks.onIncompatibleBlocked?.(app)
321
+ return false
322
+ }
323
+
324
+ // Missing-speech-model gate for apps registered with requiresLocalSttModel.
325
+ // Engine decides via its own model manager; the host renders the alert and
326
+ // any settings navigation via onMissingSpeechModel.
327
+ if (appRegistry.requiresLocalSttModel(packageName) && !(await sttModelManager.isModelAvailable())) {
328
+ islandNotifications.emit({
329
+ kind: "missing_speech_model",
330
+ packageName,
331
+ reason: `${app.name ?? packageName} needs an on-device speech model before it can start`,
332
+ timestamp: Date.now(),
333
+ })
334
+ hostHooks.onMissingSpeechModel?.(app)
335
+ return false
336
+ }
337
+
338
+ // Host navigation / open-animation seam. Runs on EVERY accepted open —
339
+ // including re-opening an already-running app — so the animation always
340
+ // plays (BuiltInMiniappCatalog.navigateForApp: overlay apps setForeground
341
+ // for the slide).
342
+ hostHooks.onOpenRequested?.(app, opts)
343
+
344
+ // First-activation mark (moved from the host's old beforeStart — engine
345
+ // owns the settings store).
346
+ useSettingsStore.getState().setSetting(SETTINGS.has_ever_activated_app.key, true)
347
+
348
+ // If the tapped app is already running, this is a re-open: the nav/foreground
349
+ // above already drove the animation, and there's nothing to spawn. Short-
350
+ // circuit before the spawn pipeline.
351
+ if (app.running) {
352
+ saveLastOpenTime(packageName)
353
+ return true
354
+ }
355
+
356
+ // Foreground-only-one rule: stop other running standard apps.
357
+ if (app.type === "standard") {
358
+ const runningForeground = state.apps.filter(
359
+ (a) => a.running && a.type === "standard" && a.packageName !== packageName,
360
+ )
361
+ for (const r of runningForeground) {
362
+ await get().stop(r.packageName)
363
+ }
364
+ }
365
+
366
+ set((s) => ({
367
+ apps: s.apps.map((a) => (a.packageName === packageName ? {...a, running: true, loading: false} : a)),
368
+ }))
369
+
370
+ saveLastOpenTime(packageName)
371
+ await startStopApp(app, true)
372
+
373
+ // Spawn the background JS context for local miniapps. This used to be a
374
+ // side effect of LocalMiniappView mounting on foreground; pulling it here
375
+ // lets start() actually run the app even when nothing foregrounds it (e.g.
376
+ // a system app launching another miniapp via session.miniapps). Idempotent
377
+ // with the view's own ensureRunning; a no-op for native offline built-ins
378
+ // and cloud apps (no JS bundle).
379
+ if (app.local) {
380
+ try {
381
+ await miniappLauncher.ensureRunning(packageName)
382
+ } catch (e) {
383
+ // Spawn / bundle-resolve failed — revert the optimistic running flag so
384
+ // the home list and miniapps.list() don't show a "running" app with no
385
+ // JS context, and report failure to the caller (session.miniapps.start).
386
+ console.warn(`ISLAND: launcher.ensureRunning failed for ${packageName}`, e)
387
+ set((s) => ({
388
+ apps: s.apps.map((a) => (a.packageName === packageName ? {...a, running: false, loading: false} : a)),
389
+ }))
390
+ // onStart already persisted running:true to disk (saveLocalAppRunningState)
391
+ // before the spawn; run onStop to undo it so a refresh/reboot doesn't
392
+ // resurrect a "running" app with no JS context.
393
+ await startStopApp(app, false)
394
+ return false
395
+ }
396
+ }
397
+
398
+ return true
399
+ },
400
+
401
+ stop: async (packageName: string) => {
402
+ const state = get()
403
+ const app = state.apps.find((a) => a.packageName === packageName)
404
+ if (!app) {
405
+ console.error(`ISLAND: app not found for package name: ${packageName}`)
406
+ return
407
+ }
408
+
409
+ set((s) => ({
410
+ apps: s.apps.map((a) =>
411
+ a.packageName === packageName ? {...a, running: false, screenshot: undefined, loading: false} : a,
412
+ ),
413
+ }))
414
+
415
+ // if there are no apps running, call clearDisplay():
416
+ // read fresh state via get() — `state` was captured before the set() above, so it still shows
417
+ // this app as running and would never reach 0 when stopping the last app.
418
+ if (get().apps.filter((a) => a.running).length === 0) {
419
+ BluetoothSdk.clearDisplay()
420
+ }
421
+ await startStopApp(app, false)
422
+
423
+ // Tear down the background JS context for local miniapps. No-op for native
424
+ // offline built-ins.
425
+ if (app.local) {
426
+ try {
427
+ await miniappLauncher.stop(packageName)
428
+ } catch (e) {
429
+ console.warn(`ISLAND: launcher.stop failed for ${packageName}`, e)
430
+ }
431
+ }
432
+ },
433
+
434
+ setForeground: async (packageName: string) => {
435
+ const app = get().apps.find((a) => a.packageName === packageName)
436
+ if (!app) {
437
+ console.error(`ISLAND: setForeground — app not found: ${packageName}`)
438
+ return
439
+ }
440
+
441
+ // Flip the foreground flag synchronously so the Compositor's open
442
+ // animation starts on the same frame as the tap. We do NOT await start()
443
+ // first — that gated the flag (and thus the animation) behind the whole
444
+ // JSContext-spawn chain, which was the perceived launch delay. The
445
+ // Compositor/LocalMiniappView already handle the spawn being in-flight
446
+ // (the phase machine), so foregrounding needn't wait for it.
447
+ saveLastOpenTime(packageName)
448
+ set((s) => ({
449
+ foregroundedPackage: packageName,
450
+ apps: s.apps.map((a) => ({...a, foregrounded: a.packageName === packageName})),
451
+ }))
452
+
453
+ // Ensure the JSContext exists. start() is idempotent for an
454
+ // already-running app and enforces the foreground-only-one rule for
455
+ // standard apps. Fire-and-forget after the flag flip so it doesn't block
456
+ // paint.
457
+ // if (!app.running) {
458
+ // get().start(app)
459
+ // }
460
+ },
461
+
462
+ clearForeground: () => {
463
+ set((s) => ({
464
+ foregroundedPackage: null,
465
+ apps: s.apps.some((a) => a.foregrounded)
466
+ ? s.apps.map((a) => (a.foregrounded ? {...a, foregrounded: false} : a))
467
+ : s.apps,
468
+ }))
469
+ },
470
+
471
+ stopAll: () => {
472
+ return Res.try_async(async () => {
473
+ const running = get().apps.filter((a) => a.running)
474
+ for (const a of running) {
475
+ await get().stop(a.packageName)
476
+ }
477
+ })
478
+ },
479
+
480
+ install: (url, opts) => appRegistry.installFromUrl(url, opts),
481
+
482
+ uninstall: (packageName, version) => {
483
+ return Res.try_async(async () => {
484
+ const res = await appRegistry.uninstall(packageName, version)
485
+ if (res.is_error()) throw res.error
486
+ set((s) => ({apps: s.apps.filter((a) => a.packageName !== packageName)}))
487
+ })
488
+ },
489
+
490
+ saveScreenshot: async (packageName: string, screenshot: string) => {
491
+ storage.save(`${packageName}_screenshot`, screenshot)
492
+ set((s) => ({
493
+ apps: s.apps.map((a) => (a.packageName === packageName ? {...a, screenshot} : a)),
494
+ }))
495
+ },
496
+
497
+ setHiddenStatus: (packageName: string, status: boolean) => {
498
+ hiddenStatusCache.set(packageName, status)
499
+ set((s) => ({
500
+ apps: s.apps.map((a) => (a.packageName === packageName ? {...a, hidden: status} : a)),
501
+ }))
502
+ storage.save(`${packageName}_hidden`, status)
503
+ if (!status) {
504
+ const orderMap = getAppsOrder()
505
+ if (orderMap.is_ok()) {
506
+ delete orderMap.value[packageName]
507
+ saveAppsOrder(orderMap.value)
508
+ }
509
+ }
510
+ },
511
+
512
+ getHiddenStatus: (packageName: string): boolean => {
513
+ const cached = hiddenStatusCache.get(packageName)
514
+ if (cached !== undefined) return cached
515
+ const res = storage.load<boolean>(`${packageName}_hidden`)
516
+ const value = res.is_ok() ? res.value : false
517
+ hiddenStatusCache.set(packageName, value)
518
+ return value
519
+ },
520
+
521
+ setApps: (apps) => set({apps}),
522
+ }))
523
+
524
+ // Project miniappRunningRegistry membership into the store's `running` field
525
+ // for local apps so the home tray and switcher reflect actual mount state
526
+ // without waiting for the next refresh() cycle.
527
+ miniappRunningRegistry.subscribe(() => {
528
+ const running = new Set(miniappRunningRegistry.getAll())
529
+ const state = useAppStatusStore.getState()
530
+ let changed = false
531
+ const updated = state.apps.map((app) => {
532
+ if (!app.local) return app
533
+ const next = running.has(app.packageName)
534
+ if (app.running === next) return app
535
+ changed = true
536
+ return {...app, running: next}
537
+ })
538
+ if (changed) {
539
+ useAppStatusStore.setState({apps: updated})
540
+ }
541
+ })
542
+
543
+ // AppRegistry change events trigger a store refresh.
544
+ appRegistry.subscribe(() => {
545
+ void useAppStatusStore.getState().refresh()
546
+ })
547
+
548
+ // Re-evaluate hardware compatibility when the paired/default wearable changes.
549
+ useSettingsStore.subscribe(
550
+ (state) => state.getSetting(SETTINGS.default_wearable.key),
551
+ () => {
552
+ void useAppStatusStore.getState().refresh()
553
+ },
554
+ )
555
+
556
+ // ---------------------------------------------------------------------------
557
+ // Public hooks
558
+ // ---------------------------------------------------------------------------
559
+
560
+ export const useApps = () => useAppStatusStore((state) => state.apps)
561
+ export const useStart = () => useAppStatusStore((state) => state.start)
562
+ export const useStop = () => useAppStatusStore((state) => state.stop)
563
+ export const useSetForeground = () => useAppStatusStore((state) => state.setForeground)
564
+ export const useClearForeground = () => useAppStatusStore((state) => state.clearForeground)
565
+ export const useRefresh = () => useAppStatusStore((state) => state.refresh)
566
+ export const useStopAll = () => useAppStatusStore((state) => state.stopAll)
567
+ export const useInstall = () => useAppStatusStore((state) => state.install)
568
+ export const useUninstall = () => useAppStatusStore((state) => state.uninstall)
569
+
570
+ export const useActiveApps = () => {
571
+ const apps = useApps()
572
+ return useMemo(() => apps.filter((app) => app.running), [apps])
573
+ }
574
+
575
+ export const useActiveBackgroundApps = () => {
576
+ const apps = useApps()
577
+ return useMemo(() => apps.filter((app) => app.type === "background" && app.running), [apps])
578
+ }
579
+
580
+ export const useBackgroundApps = () => {
581
+ const apps = useApps()
582
+ return useMemo(
583
+ () => ({
584
+ active: apps.filter((app) => app.type === "background" && app.running),
585
+ inactive: apps.filter((app) => app.type === "background" && !app.running),
586
+ }),
587
+ [apps],
588
+ )
589
+ }
590
+
591
+ export const useActiveForegroundApp = () => {
592
+ const apps = useApps()
593
+ return useMemo(() => apps.find((app) => (app.type === "standard" || !app.type) && app.running) ?? null, [apps])
594
+ }
595
+
596
+ /**
597
+ * The single app currently foregrounded in the Compositor overlay, or null.
598
+ * Driven by setForeground/clearForeground — distinct from the "active
599
+ * standard app" (running) selector above.
600
+ */
601
+ export const useForegroundApp = () => {
602
+ const apps = useApps()
603
+ return useMemo(() => apps.find((app) => app.foregrounded) ?? null, [apps])
604
+ }
605
+
606
+ export const useActiveBackgroundAppsCount = () => {
607
+ const apps = useApps()
608
+ return useMemo(() => apps.filter((app) => app.type === "background" && app.running).length, [apps])
609
+ }
610
+
611
+ export const useLocalMiniApps = () => {
612
+ const apps = useApps()
613
+ return useMemo(() => apps.filter((app) => app.local), [apps])
614
+ }
@@ -0,0 +1,36 @@
1
+ import {DeviceTypes} from "../types"
2
+
3
+ /** Mentra Live has no display — omit dashboard/brightness keys from BLE sync. */
4
+ export const MENTRA_LIVE_SETTING_KEYS: string[] = [
5
+ "sensing_enabled",
6
+ "lc3_frame_size",
7
+ "preferred_mic",
8
+ "core_token",
9
+ "auth_email",
10
+ "button_photo_size",
11
+ "button_video_settings",
12
+ "button_max_recording_time",
13
+ "camera_fov",
14
+ "offline_mode",
15
+ "local_stt_fallback_active",
16
+ "gallery_mode",
17
+ "default_wearable",
18
+ "pending_wearable",
19
+ "device_name",
20
+ "device_address",
21
+ "default_controller",
22
+ "pending_controller",
23
+ "controller_device_name",
24
+ "controller_address",
25
+ ]
26
+
27
+ function isMentraLiveDevice(model: string | undefined): boolean {
28
+ return model === DeviceTypes.LIVE || model === "Mentra Live"
29
+ }
30
+
31
+ export function getBluetoothSettingKeysForDevice(
32
+ deviceModel: string | undefined,
33
+ fullKeys: string[],
34
+ ): string[] {
35
+ return isMentraLiveDevice(deviceModel) ? MENTRA_LIVE_SETTING_KEYS : fullKeys
36
+ }
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Cloud-client runtime status store — moved into engine so engine owns the
3
+ * cloud-v2 runtime status (connection status + audio transport). Re-exported
4
+ * through the host's `@/stores/cloudClientStatus` shim so the app keeps its
5
+ * imports, and surfaced as `engine.stores.cloudClientStatus`.
6
+ */
7
+ import {create} from "zustand"
8
+
9
+ import type {RuntimeAudioTransport, RuntimeSnapshot, RuntimeStatus} from "@mentra/cloud-client/react-native"
10
+
11
+ const initialSnapshot: RuntimeSnapshot = {
12
+ status: "disconnected",
13
+ audioTransport: "none",
14
+ }
15
+
16
+ export interface CloudClientStatusState extends RuntimeSnapshot {
17
+ lastChangedAt: Date | null
18
+ setSnapshot: (snapshot: RuntimeSnapshot) => void
19
+ reset: () => void
20
+ }
21
+
22
+ export const useCloudClientStatusStore = create<CloudClientStatusState>((set) => ({
23
+ ...initialSnapshot,
24
+ lastChangedAt: null,
25
+ setSnapshot: (snapshot) =>
26
+ set({
27
+ ...snapshot,
28
+ lastChangedAt: new Date(),
29
+ }),
30
+ reset: () =>
31
+ set({
32
+ ...initialSnapshot,
33
+ lastChangedAt: null,
34
+ }),
35
+ }))
36
+
37
+ export type {RuntimeAudioTransport, RuntimeSnapshot, RuntimeStatus}