@mentra/engine 3.1.0-dev.91 → 3.1.0-dev.95

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 (86) hide show
  1. package/README.md +1 -1
  2. package/build/facades/ota.d.ts +1 -1
  3. package/build/facades/ota.js +1 -1
  4. package/build/facades/ota.js.map +1 -1
  5. package/build/generated/releaseMetadata.js +5 -5
  6. package/build/generated/releaseMetadata.js.map +1 -1
  7. package/build/index.d.ts +1 -1
  8. package/build/index.d.ts.map +1 -1
  9. package/build/index.js +1 -1
  10. package/build/index.js.map +1 -1
  11. package/build/services/DisplayProcessor.d.ts +3 -3
  12. package/build/services/DisplayProcessor.js +3 -3
  13. package/build/services/DisplayProcessor.js.map +1 -1
  14. package/build/services/LocalDisplayManager.d.ts +2 -3
  15. package/build/services/LocalDisplayManager.d.ts.map +1 -1
  16. package/build/services/LocalDisplayManager.js +2 -3
  17. package/build/services/LocalDisplayManager.js.map +1 -1
  18. package/build/services/PhonePhotoCoordinator.js +1 -1
  19. package/build/services/PhonePhotoCoordinator.js.map +1 -1
  20. package/build/services/StreamLifecycleController.d.ts +3 -3
  21. package/build/services/StreamLifecycleController.js +3 -3
  22. package/build/services/StreamLifecycleController.js.map +1 -1
  23. package/build/types/applet.d.ts +1 -1
  24. package/build/types/applet.js +1 -1
  25. package/build/types/applet.js.map +1 -1
  26. package/build/types/capabilities/even-realities-g1.d.ts.map +1 -1
  27. package/build/types/capabilities/even-realities-g1.js +2 -0
  28. package/build/types/capabilities/even-realities-g1.js.map +1 -1
  29. package/build/types/capabilities/even-realities-g2.d.ts.map +1 -1
  30. package/build/types/capabilities/even-realities-g2.js +2 -0
  31. package/build/types/capabilities/even-realities-g2.js.map +1 -1
  32. package/build/types/capabilities/mentra-display.d.ts.map +1 -1
  33. package/build/types/capabilities/mentra-display.js +2 -0
  34. package/build/types/capabilities/mentra-display.js.map +1 -1
  35. package/build/types/capabilities/mentra-live.d.ts.map +1 -1
  36. package/build/types/capabilities/mentra-live.js +2 -0
  37. package/build/types/capabilities/mentra-live.js.map +1 -1
  38. package/build/types/capabilities/nimo.d.ts +9 -0
  39. package/build/types/capabilities/nimo.d.ts.map +1 -0
  40. package/build/types/capabilities/nimo.js +57 -0
  41. package/build/types/capabilities/nimo.js.map +1 -0
  42. package/build/types/capabilities/none.d.ts.map +1 -1
  43. package/build/types/capabilities/none.js +2 -0
  44. package/build/types/capabilities/none.js.map +1 -1
  45. package/build/types/capabilities/simulated-glasses.d.ts.map +1 -1
  46. package/build/types/capabilities/simulated-glasses.js +2 -0
  47. package/build/types/capabilities/simulated-glasses.js.map +1 -1
  48. package/build/types/capabilities/vuzix-z100.d.ts.map +1 -1
  49. package/build/types/capabilities/vuzix-z100.js +2 -0
  50. package/build/types/capabilities/vuzix-z100.js.map +1 -1
  51. package/build/types/enums.d.ts +2 -1
  52. package/build/types/enums.d.ts.map +1 -1
  53. package/build/types/enums.js +1 -0
  54. package/build/types/enums.js.map +1 -1
  55. package/build/types/hardware.d.ts +3 -2
  56. package/build/types/hardware.d.ts.map +1 -1
  57. package/build/types/hardware.js +3 -1
  58. package/build/types/hardware.js.map +1 -1
  59. package/build/types/index.d.ts +1 -1
  60. package/build/types/index.d.ts.map +1 -1
  61. package/build/types/index.js +1 -1
  62. package/build/types/index.js.map +1 -1
  63. package/build/utils/display/composer/ColumnComposer.d.ts +1 -1
  64. package/build/utils/display/composer/ColumnComposer.js +1 -1
  65. package/build/utils/display/composer/ColumnComposer.js.map +1 -1
  66. package/package.json +6 -6
  67. package/src/facades/ota.ts +1 -1
  68. package/src/generated/releaseMetadata.ts +5 -5
  69. package/src/index.ts +1 -0
  70. package/src/services/DisplayProcessor.ts +3 -3
  71. package/src/services/LocalDisplayManager.ts +2 -3
  72. package/src/services/PhonePhotoCoordinator.ts +1 -1
  73. package/src/services/StreamLifecycleController.ts +3 -3
  74. package/src/types/applet.ts +1 -1
  75. package/src/types/capabilities/even-realities-g1.ts +3 -0
  76. package/src/types/capabilities/even-realities-g2.ts +3 -0
  77. package/src/types/capabilities/mentra-display.ts +3 -0
  78. package/src/types/capabilities/mentra-live.ts +3 -0
  79. package/src/types/capabilities/nimo.ts +59 -0
  80. package/src/types/capabilities/none.ts +3 -0
  81. package/src/types/capabilities/simulated-glasses.ts +3 -0
  82. package/src/types/capabilities/vuzix-z100.ts +3 -0
  83. package/src/types/enums.ts +1 -0
  84. package/src/types/hardware.ts +4 -2
  85. package/src/types/index.ts +1 -0
  86. package/src/utils/display/composer/ColumnComposer.ts +1 -1
@@ -12,9 +12,9 @@ export interface EngineReleaseMetadata {
12
12
  export const ENGINE_RELEASE_METADATA: Readonly<EngineReleaseMetadata> = Object.freeze({
13
13
  "schemaVersion": 1,
14
14
  "familyBaseVersion": "3.1.0",
15
- "releaseIdentity": "3.1.0-dev.91",
16
- "releaseSetId": "mentra-3.1.0-dev.91",
17
- "sourceCommit": "80585dd0dec3b5b77c13be19fddeccd20e288144",
18
- "otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.1.0/mentra-live-ota-3.1.0-dev.91.json",
19
- "otaManifestSha256": "568b25ce8f7b6883fed70873b5e7ca3286a7602b407dfc28d22eb6d41747d032"
15
+ "releaseIdentity": "3.1.0-dev.95",
16
+ "releaseSetId": "mentra-3.1.0-dev.95",
17
+ "sourceCommit": "84b6e22828cf1f07f8e2c337461ce9168457fb94",
18
+ "otaManifestUrl": "https://github.com/Mentra-Community/MentraOS/releases/download/mentra-builds-v3.1.0/mentra-live-ota-3.1.0-dev.95.json",
19
+ "otaManifestSha256": "ff0e9bc4f223dd30be4fd3c820c7fb1ef3a0ba1711b9a33ef94c68401a78d214"
20
20
  })
package/src/index.ts CHANGED
@@ -197,6 +197,7 @@ export {
197
197
  evenRealitiesG1,
198
198
  evenRealitiesG2,
199
199
  mentraLive,
200
+ nimo,
200
201
  vuzixZ100,
201
202
  mentraDisplay,
202
203
  } from "./types"
@@ -2,15 +2,15 @@
2
2
  * DisplayProcessor
3
3
  *
4
4
  * Processes display events with pixel-accurate text wrapping using the same
5
- * display-utils library as the cloud. This ensures the mobile preview matches
6
- * exactly what is shown on the glasses.
5
+ * Engine display utilities. This ensures the mobile preview matches exactly
6
+ * what is shown on the glasses.
7
7
  *
8
8
  * Key responsibilities:
9
9
  * 1. Intercept display events before sending to native SGC
10
10
  * 2. Wrap text using the correct device profile (G1, etc.)
11
11
  * 3. Ensure GlassesDisplayMirror shows exactly what glasses will show
12
12
  *
13
- * @see cloud/issues/026-mobile-display-processor for design docs
13
+ * @see notes/miniapp-display-api-redesign.md for the current display design
14
14
  */
15
15
 
16
16
  import {
@@ -2,9 +2,8 @@
2
2
  * LocalDisplayManager
3
3
  *
4
4
  * Phone-side arbiter for display requests originating from LOCAL miniapps
5
- * (the @mentra/miniapp SDK). Mirrors the user-facing behavior of the cloud
6
- * DisplayManager (cloud/packages/cloud/src/services/layout/DisplayManager6.1.ts)
7
- * for the features that matter on the phone:
5
+ * (the @mentra/miniapp SDK). Preserves the retired cloud display manager's
6
+ * user-facing behavior for the features that matter on the phone:
8
7
  *
9
8
  * - boot message ("Starting <AppName>…") with a bounded window
10
9
  * - durationMs auto-clear
@@ -166,7 +166,7 @@ export class PhonePhotoCoordinator {
166
166
  // to time out. Fail fast with a typed error.
167
167
  //
168
168
  // We DON'T pre-check `hasCamera` here — the canonical capability data
169
- // lives in `getModelCapabilities(deviceModel)` from @mentra/types and
169
+ // lives in `getModelCapabilities(deviceModel)` from @mentra/engine and
170
170
  // pulling that into this file would add a cross-package import. If a
171
171
  // cameraless device receives the BLE photo command, the glasses-side
172
172
  // handler will return a photo_response error within ~1s and the gated
@@ -3,9 +3,9 @@
3
3
  * `setActive(true)` starts the timer; each tick sends a keep-alive with a
4
4
  * fresh ackId; `maxMissedAcks` consecutive timeouts fire `onTimeout`.
5
5
  *
6
- * Mirror of `cloud/packages/cloud/src/services/streaming/StreamLifecycleController.ts`
7
- * kept byte-equivalent except for the `LifecycleLogger` interface (pino
8
- * isn't a phone dep). Behavior changes must land in both files.
6
+ * Phone-owned successor to the retired cloud stream lifecycle controller.
7
+ * It uses the local `LifecycleLogger` interface because pino is not a phone
8
+ * dependency.
9
9
  */
10
10
 
11
11
  export interface LifecycleLogger {
@@ -1,5 +1,5 @@
1
1
  /**
2
- * @mentra/types - App/Applet types for client interfaces
2
+ * App and miniapp types owned by @mentra/engine.
3
3
  */
4
4
 
5
5
  import type {ReactNode} from "react"
@@ -64,4 +64,7 @@ export const evenRealitiesG1: Capabilities = {
64
64
 
65
65
  // WiFi capabilities - G1 does not support WiFi
66
66
  hasWifi: false,
67
+
68
+ // OTA capabilities - G1 firmware updates are not driven by the ASG OTA flow
69
+ hasOta: false,
67
70
  };
@@ -82,6 +82,9 @@ export const evenRealitiesG2: Capabilities = {
82
82
  // WiFi capabilities - G2 does not support WiFi
83
83
  hasWifi: false,
84
84
 
85
+ // OTA capabilities - G2 firmware updates are not driven by the ASG OTA flow
86
+ hasOta: false,
87
+
85
88
  // Dashboard - G2 renders Even Realities' native dashboard in firmware, so
86
89
  // MentraOS does not manage the dashboard or expose dashboard settings for it
87
90
  hasNativeDashboard: true,
@@ -72,4 +72,7 @@ export const mentraDisplay: Capabilities = {
72
72
 
73
73
  // WiFi capabilities - Mentra Display does not support WiFi
74
74
  hasWifi: false,
75
+
76
+ // OTA capabilities - Mentra Display firmware updates are not driven by the ASG OTA flow
77
+ hasOta: false,
75
78
  };
@@ -100,4 +100,7 @@ export const mentraLive: Capabilities = {
100
100
 
101
101
  // WiFi capabilities - Mentra Live supports WiFi
102
102
  hasWifi: true,
103
+
104
+ // OTA capabilities - Mentra Live supports ASG/BES/MTK OTA updates
105
+ hasOta: true,
103
106
  };
@@ -0,0 +1,59 @@
1
+ /**
2
+ * @fileoverview NIMO hardware capabilities.
3
+ *
4
+ * NIMO uses framed UART-over-BLE for widget content and a separate Opus
5
+ * microphone channel.
6
+ */
7
+
8
+ import type {Capabilities} from "../hardware"
9
+
10
+ export const nimo: Capabilities = {
11
+ modelName: "NIMO",
12
+ hasCamera: false,
13
+ camera: null,
14
+ hasDisplay: true,
15
+ display: {
16
+ count: 2,
17
+ isColor: false,
18
+ color: "green",
19
+ canDisplayBitmap: true,
20
+ // Bitmaps render into the 160x160 2bpp navigation widget. The resolution
21
+ // below remains the existing text-display placeholder until hardware
22
+ // screen information is available.
23
+ resolution: {width: 640, height: 400},
24
+ maxTextLines: 5,
25
+ adjustBrightness: true,
26
+ },
27
+ hasMicrophone: true,
28
+ microphone: {
29
+ count: 2,
30
+ hasVAD: false,
31
+ },
32
+ hasSpeaker: false,
33
+ speaker: null,
34
+ hasIMU: true,
35
+ imu: null,
36
+ hasButton: true,
37
+ button: {
38
+ count: 2,
39
+ buttons: [
40
+ {
41
+ type: "press",
42
+ events: ["press", "double_press", "long_press"],
43
+ isCapacitive: true,
44
+ },
45
+ {
46
+ type: "press",
47
+ events: ["press", "double_press", "long_press"],
48
+ isCapacitive: true,
49
+ },
50
+ ],
51
+ },
52
+ hasLight: false,
53
+ light: null,
54
+ power: {
55
+ hasExternalBattery: false,
56
+ },
57
+ hasWifi: false,
58
+ hasOta: false,
59
+ }
@@ -73,4 +73,7 @@ export const none: Capabilities = {
73
73
 
74
74
  // WiFi capabilities - does not support WiFi
75
75
  hasWifi: false,
76
+
77
+ // OTA capabilities - none profile does not support OTA
78
+ hasOta: false,
76
79
  };
@@ -73,4 +73,7 @@ export const simulatedGlasses: Capabilities = {
73
73
 
74
74
  // WiFi capabilities - does not support WiFi
75
75
  hasWifi: false,
76
+
77
+ // OTA capabilities - simulated glasses do not support OTA
78
+ hasOta: false,
76
79
  };
@@ -61,4 +61,7 @@ export const vuzixZ100: Capabilities = {
61
61
 
62
62
  // WiFi capabilities - does not support WiFi
63
63
  hasWifi: false,
64
+
65
+ // OTA capabilities - Z100 firmware updates are not driven by the ASG OTA flow
66
+ hasOta: false,
64
67
  };
@@ -11,6 +11,7 @@ export enum DeviceTypes {
11
11
  Z100 = "Vuzix Z100",
12
12
  NEX = "Mentra Display",
13
13
  FRAME = "Brilliant Frame",
14
+ NIMO = "NIMO",
14
15
  }
15
16
 
16
17
  export enum ControllerTypes {
@@ -4,6 +4,7 @@ import { evenRealitiesG1 } from "./capabilities/even-realities-g1";
4
4
  import { evenRealitiesG2 } from "./capabilities/even-realities-g2";
5
5
  import { mentraDisplay } from "./capabilities/mentra-display";
6
6
  import { mentraLive } from "./capabilities/mentra-live";
7
+ import { nimo } from "./capabilities/nimo";
7
8
  import { simulatedGlasses } from "./capabilities/simulated-glasses";
8
9
  import { vuzixZ100 } from "./capabilities/vuzix-z100";
9
10
  import { none } from "./capabilities/none";
@@ -158,7 +159,7 @@ export interface Capabilities {
158
159
  hasWifi: boolean;
159
160
 
160
161
  // OTA capability
161
- hasOta?: boolean;
162
+ hasOta: boolean;
162
163
 
163
164
  // Native dashboard capability
164
165
  // True when the device renders its own dashboard in firmware (e.g. Even
@@ -180,6 +181,7 @@ export const HARDWARE_CAPABILITIES: Record<string, Capabilities> = {
180
181
  [mentraLive.modelName]: mentraLive,
181
182
  [simulatedGlasses.modelName]: simulatedGlasses,
182
183
  [vuzixZ100.modelName]: vuzixZ100,
184
+ [nimo.modelName]: nimo,
183
185
  [DeviceTypes.MACH1]: vuzixZ100, // Mach1 uses same Vuzix Ultralite hardware as Z100
184
186
  [DeviceTypes.AR99]: {
185
187
  ...evenRealitiesG1,
@@ -207,4 +209,4 @@ export const getModelCapabilities = (deviceType: DeviceTypes): Capabilities => {
207
209
  };
208
210
 
209
211
  // export * from "./capabilities"
210
- export { simulatedGlasses, evenRealitiesG1, evenRealitiesG2, mentraLive, vuzixZ100, mentraDisplay };
212
+ export { simulatedGlasses, evenRealitiesG1, evenRealitiesG2, mentraLive, nimo, vuzixZ100, mentraDisplay };
@@ -25,6 +25,7 @@ export {
25
25
  evenRealitiesG1,
26
26
  evenRealitiesG2,
27
27
  mentraLive,
28
+ nimo,
28
29
  vuzixZ100,
29
30
  mentraDisplay,
30
31
  } from "./hardware"
@@ -11,7 +11,7 @@
11
11
  * 2. Merges columns line-by-line with pixel-precise space padding
12
12
  * 3. Returns a single pre-composed string ready for native to chunk & send
13
13
  *
14
- * @see cloud/issues/026-mobile-display-processor for design docs
14
+ * @see notes/miniapp-display-api-redesign.md for the current display design
15
15
  */
16
16
 
17
17
  import type { DisplayProfile } from "../profiles/types";