even-toolkit 1.1.1 → 1.3.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 (82) hide show
  1. package/README.md +74 -0
  2. package/dist/glasses/bridge.d.ts +5 -2
  3. package/dist/glasses/bridge.d.ts.map +1 -1
  4. package/dist/glasses/bridge.js +25 -2
  5. package/dist/glasses/bridge.js.map +1 -1
  6. package/dist/glasses/composer.js +2 -2
  7. package/dist/glasses/layout.d.ts +2 -0
  8. package/dist/glasses/layout.d.ts.map +1 -1
  9. package/dist/glasses/layout.js +4 -0
  10. package/dist/glasses/layout.js.map +1 -1
  11. package/dist/glasses/types.d.ts +23 -0
  12. package/dist/glasses/types.d.ts.map +1 -1
  13. package/dist/glasses/types.js +15 -0
  14. package/dist/glasses/types.js.map +1 -1
  15. package/dist/glasses/useGlasses.d.ts.map +1 -1
  16. package/dist/glasses/useGlasses.js +17 -4
  17. package/dist/glasses/useGlasses.js.map +1 -1
  18. package/dist/stt/debug.d.ts +8 -0
  19. package/dist/stt/debug.d.ts.map +1 -0
  20. package/dist/stt/debug.js +34 -0
  21. package/dist/stt/debug.js.map +1 -0
  22. package/dist/stt/engine.d.ts +9 -6
  23. package/dist/stt/engine.d.ts.map +1 -1
  24. package/dist/stt/engine.js +141 -75
  25. package/dist/stt/engine.js.map +1 -1
  26. package/dist/stt/index.d.ts +1 -0
  27. package/dist/stt/index.d.ts.map +1 -1
  28. package/dist/stt/index.js +1 -0
  29. package/dist/stt/index.js.map +1 -1
  30. package/dist/stt/providers/deepgram.d.ts +1 -1
  31. package/dist/stt/providers/deepgram.d.ts.map +1 -1
  32. package/dist/stt/providers/deepgram.js +24 -9
  33. package/dist/stt/providers/deepgram.js.map +1 -1
  34. package/dist/stt/providers/whisper-api.d.ts.map +1 -1
  35. package/dist/stt/providers/whisper-api.js +75 -4
  36. package/dist/stt/providers/whisper-api.js.map +1 -1
  37. package/dist/stt/react/useSTT.d.ts.map +1 -1
  38. package/dist/stt/react/useSTT.js +44 -11
  39. package/dist/stt/react/useSTT.js.map +1 -1
  40. package/dist/stt/registry.d.ts.map +1 -1
  41. package/dist/stt/registry.js +0 -8
  42. package/dist/stt/registry.js.map +1 -1
  43. package/dist/stt/sources/glass-bridge.d.ts +8 -15
  44. package/dist/stt/sources/glass-bridge.d.ts.map +1 -1
  45. package/dist/stt/sources/glass-bridge.js +66 -9
  46. package/dist/stt/sources/glass-bridge.js.map +1 -1
  47. package/dist/stt/sources/microphone.d.ts.map +1 -1
  48. package/dist/stt/sources/microphone.js +4 -0
  49. package/dist/stt/sources/microphone.js.map +1 -1
  50. package/dist/stt/types.d.ts +7 -3
  51. package/dist/stt/types.d.ts.map +1 -1
  52. package/glasses/bridge.ts +24 -3
  53. package/glasses/composer.ts +2 -2
  54. package/glasses/layout.ts +6 -0
  55. package/glasses/types.ts +28 -0
  56. package/glasses/useGlasses.ts +18 -5
  57. package/package.json +7 -19
  58. package/stt/debug.ts +38 -0
  59. package/stt/engine.ts +158 -83
  60. package/stt/index.ts +1 -0
  61. package/stt/providers/deepgram.ts +26 -9
  62. package/stt/providers/whisper-api.ts +78 -4
  63. package/stt/react/useSTT.ts +45 -11
  64. package/stt/registry.ts +0 -8
  65. package/stt/sources/glass-bridge.ts +69 -25
  66. package/stt/sources/microphone.ts +7 -0
  67. package/stt/types.ts +4 -3
  68. package/dist/stt/providers/web-speech.d.ts +0 -25
  69. package/dist/stt/providers/web-speech.d.ts.map +0 -1
  70. package/dist/stt/providers/web-speech.js +0 -153
  71. package/dist/stt/providers/web-speech.js.map +0 -1
  72. package/dist/stt/providers/whisper-local/provider.d.ts +0 -31
  73. package/dist/stt/providers/whisper-local/provider.d.ts.map +0 -1
  74. package/dist/stt/providers/whisper-local/provider.js +0 -174
  75. package/dist/stt/providers/whisper-local/provider.js.map +0 -1
  76. package/dist/stt/providers/whisper-local/worker.d.ts +0 -2
  77. package/dist/stt/providers/whisper-local/worker.d.ts.map +0 -1
  78. package/dist/stt/providers/whisper-local/worker.js +0 -35
  79. package/dist/stt/providers/whisper-local/worker.js.map +0 -1
  80. package/stt/providers/web-speech.ts +0 -221
  81. package/stt/providers/whisper-local/provider.ts +0 -226
  82. package/stt/providers/whisper-local/worker.ts +0 -40
@@ -1 +1 @@
1
- {"version":3,"file":"whisper-api.js","sourceRoot":"","sources":["../../../stt/providers/whisper-api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"whisper-api.js","sourceRoot":"","sources":["../../../stt/providers/whisper-api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useSTT.d.ts","sourceRoot":"","sources":["../../../stt/react/useSTT.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAsB,MAAM,UAAU,CAAC;AAG/E,wBAAgB,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,YAAY,CA4G9D"}
1
+ {"version":3,"file":"useSTT.d.ts","sourceRoot":"","sources":["../../../stt/react/useSTT.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAsB,MAAM,UAAU,CAAC;AAI/E,wBAAgB,MAAM,CAAC,MAAM,GAAE,YAAiB,GAAG,YAAY,CA6I9D"}
@@ -1,14 +1,15 @@
1
1
  import { useState, useRef, useEffect, useCallback } from 'react';
2
2
  import { STTEngine } from '../engine';
3
+ import { sttLog } from '../debug';
3
4
  export function useSTT(config = {}) {
4
5
  const [transcript, setTranscript] = useState('');
5
6
  const [interimTranscript, setInterimTranscript] = useState('');
6
7
  const [isListening, setIsListening] = useState(false);
7
8
  const [isLoading, setIsLoading] = useState(false);
8
- const [loadProgress] = useState(0);
9
9
  const [error, setError] = useState(null);
10
10
  const [state, setState] = useState('idle');
11
11
  const engineRef = useRef(null);
12
+ const busyRef = useRef(false); // prevent start/stop race
12
13
  const configRef = useRef(config);
13
14
  configRef.current = config;
14
15
  // Cleanup on unmount
@@ -19,29 +20,45 @@ export function useSTT(config = {}) {
19
20
  };
20
21
  }, []);
21
22
  const start = useCallback(async () => {
22
- // Dispose previous engine
23
+ if (busyRef.current) {
24
+ sttLog('useSTT: start() blocked — busy');
25
+ return;
26
+ }
27
+ busyRef.current = true;
23
28
  engineRef.current?.dispose();
24
29
  const cfg = configRef.current;
30
+ sttLog('useSTT: start()', cfg.provider, 'apiKey?', !!cfg.apiKey);
25
31
  const engine = new STTEngine({
26
- provider: cfg.provider ?? 'web-speech',
32
+ provider: cfg.provider ?? 'whisper-api',
27
33
  source: cfg.source,
28
34
  language: cfg.language,
29
35
  mode: cfg.mode,
30
36
  apiKey: cfg.apiKey,
31
37
  modelId: cfg.modelId,
32
38
  continuous: cfg.continuous,
33
- vad: cfg.vad,
39
+ vad: cfg.vad ?? true,
40
+ chunkIntervalMs: cfg.chunkIntervalMs,
34
41
  fallback: cfg.fallback,
35
42
  });
36
43
  engineRef.current = engine;
37
- // Subscribe to events
44
+ // Accumulate final results for streaming providers
45
+ let accumulated = '';
38
46
  engine.onTranscript((t) => {
39
47
  if (t.isFinal) {
40
- setTranscript((prev) => (prev ? prev + ' ' + t.text : t.text));
48
+ // Append final to accumulated text
49
+ const clean = t.text.replace(/\.+$/, '').trim();
50
+ if (clean) {
51
+ accumulated = accumulated ? accumulated + ' ' + clean : clean;
52
+ }
53
+ setTranscript(accumulated);
41
54
  setInterimTranscript('');
42
55
  }
43
56
  else {
44
- setInterimTranscript(t.text);
57
+ // Interim: show accumulated + current interim
58
+ const clean = t.text.replace(/\.+$/, '').trim();
59
+ const full = accumulated ? accumulated + ' ' + clean : clean;
60
+ setInterimTranscript(full);
61
+ setTranscript(full);
45
62
  }
46
63
  cfg.onTranscript?.(t.text, t.isFinal);
47
64
  });
@@ -49,24 +66,41 @@ export function useSTT(config = {}) {
49
66
  setState(s);
50
67
  setIsListening(s === 'listening');
51
68
  setIsLoading(s === 'loading');
52
- if (s === 'idle') {
69
+ if (s === 'idle' || s === 'error') {
53
70
  setInterimTranscript('');
71
+ busyRef.current = false;
54
72
  }
55
73
  });
56
74
  engine.onError((e) => {
57
75
  setError(e);
76
+ busyRef.current = false;
58
77
  });
59
78
  setError(null);
60
- await engine.start();
79
+ try {
80
+ await engine.start();
81
+ busyRef.current = false;
82
+ }
83
+ catch {
84
+ busyRef.current = false;
85
+ }
61
86
  }, []);
62
87
  const stop = useCallback(() => {
63
- engineRef.current?.stop();
88
+ sttLog('useSTT: stop()');
89
+ if (!engineRef.current)
90
+ return;
91
+ // Stop mic immediately, then engine handles final transcription
92
+ engineRef.current.stop();
64
93
  }, []);
65
94
  const abort = useCallback(() => {
95
+ sttLog('useSTT: abort()');
66
96
  engineRef.current?.abort();
97
+ busyRef.current = false;
67
98
  }, []);
68
99
  const reset = useCallback(() => {
100
+ sttLog('useSTT: reset()');
69
101
  engineRef.current?.abort();
102
+ engineRef.current = null;
103
+ busyRef.current = false;
70
104
  setTranscript('');
71
105
  setInterimTranscript('');
72
106
  setError(null);
@@ -87,7 +121,6 @@ export function useSTT(config = {}) {
87
121
  interimTranscript,
88
122
  isListening,
89
123
  isLoading,
90
- loadProgress,
91
124
  error,
92
125
  state,
93
126
  start,
@@ -1 +1 @@
1
- {"version":3,"file":"useSTT.js","sourceRoot":"","sources":["../../../stt/react/useSTT.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"useSTT.js","sourceRoot":"","sources":["../../../stt/react/useSTT.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../stt/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAqBvE"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../stt/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAavE"}
@@ -1,13 +1,5 @@
1
1
  export async function createProvider(type) {
2
2
  switch (type) {
3
- case 'web-speech': {
4
- const { WebSpeechProvider } = await import('./providers/web-speech');
5
- return new WebSpeechProvider();
6
- }
7
- case 'whisper-local': {
8
- const { WhisperLocalProvider } = await import('./providers/whisper-local/provider');
9
- return new WhisperLocalProvider();
10
- }
11
3
  case 'whisper-api': {
12
4
  const { WhisperApiProvider } = await import('./providers/whisper-api');
13
5
  return new WhisperApiProvider();
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../stt/registry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;YACrE,OAAO,IAAI,iBAAiB,EAAE,CAAC;QACjC,CAAC;QACD,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,oCAAoC,CAAC,CAAC;YACpF,OAAO,IAAI,oBAAoB,EAAE,CAAC;QACpC,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACvE,OAAO,IAAI,kBAAkB,EAAE,CAAC;QAClC,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAClE,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../stt/registry.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAY;IAC/C,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;YACvE,OAAO,IAAI,kBAAkB,EAAE,CAAC;QAClC,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;YAClE,OAAO,IAAI,gBAAgB,EAAE,CAAC;QAChC,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
@@ -1,25 +1,18 @@
1
1
  import type { AudioSource } from '../types';
2
- export interface GlassBridgeSourceConfig {
3
- /** The EvenHub bridge instance that fires audio events */
4
- bridge: {
5
- onEvent(handler: (event: GlassAudioEvent) => void): void;
6
- };
7
- }
8
- export interface GlassAudioEvent {
9
- audioEvent?: {
10
- audioPcm?: Uint8Array;
11
- };
12
- }
13
2
  /**
14
3
  * AudioSource for G2 smart glasses.
15
- * Listens for audio PCM events from the EvenHub SDK bridge
16
- * and converts 16-bit PCM to Float32.
4
+ *
5
+ * Automatically opens/closes the glasses microphone via the EvenHub SDK bridge
6
+ * and listens for PCM audio chunks from `audioEvent.audioPcm`.
7
+ *
8
+ * Usage:
9
+ * const source = new GlassBridgeSource();
10
+ * // It auto-detects the bridge from window.__evenBridge
17
11
  */
18
12
  export declare class GlassBridgeSource implements AudioSource {
19
- private config;
20
13
  private listeners;
21
14
  private listening;
22
- constructor(config: GlassBridgeSourceConfig);
15
+ private bridge;
23
16
  start(): Promise<void>;
24
17
  stop(): void;
25
18
  onAudioData(cb: (pcm: Float32Array, sampleRate: number) => void): () => void;
@@ -1 +1 @@
1
- {"version":3,"file":"glass-bridge.d.ts","sourceRoot":"","sources":["../../../stt/sources/glass-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,MAAM,WAAW,uBAAuB;IACtC,0DAA0D;IAC1D,MAAM,EAAE;QACN,OAAO,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI,CAAC;KAC1D,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE;QACX,QAAQ,CAAC,EAAE,UAAU,CAAC;KACvB,CAAC;CACH;AAED;;;;GAIG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,SAAS,CAA8D;IAC/E,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,uBAAuB;IAIrC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB5B,IAAI,IAAI,IAAI;IAIZ,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ5E,OAAO,IAAI,IAAI;CAIhB"}
1
+ {"version":3,"file":"glass-bridge.d.ts","sourceRoot":"","sources":["../../../stt/sources/glass-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACnD,OAAO,CAAC,SAAS,CAA8D;IAC/E,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,MAAM,CAAa;IAErB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiD5B,IAAI,IAAI,IAAI;IAkBZ,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ5E,OAAO,IAAI,IAAI;CAIhB"}
@@ -1,35 +1,82 @@
1
- import { uint8ToPcm16, pcm16ToFloat32 } from '../audio/pcm-utils';
1
+ import { sttLog } from '../debug';
2
2
  const GLASS_SAMPLE_RATE = 16000;
3
3
  /**
4
4
  * AudioSource for G2 smart glasses.
5
- * Listens for audio PCM events from the EvenHub SDK bridge
6
- * and converts 16-bit PCM to Float32.
5
+ *
6
+ * Automatically opens/closes the glasses microphone via the EvenHub SDK bridge
7
+ * and listens for PCM audio chunks from `audioEvent.audioPcm`.
8
+ *
9
+ * Usage:
10
+ * const source = new GlassBridgeSource();
11
+ * // It auto-detects the bridge from window.__evenBridge
7
12
  */
8
13
  export class GlassBridgeSource {
9
- constructor(config) {
14
+ constructor() {
10
15
  this.listeners = [];
11
16
  this.listening = false;
12
- this.config = config;
17
+ this.bridge = null;
13
18
  }
14
19
  async start() {
15
20
  if (this.listening)
16
21
  return;
22
+ // Get bridge from global (set by useGlasses)
23
+ this.bridge = window.__evenBridge ?? null;
24
+ sttLog('GlassBridgeSource.start()', 'bridge found:', !!this.bridge);
25
+ if (!this.bridge) {
26
+ throw new Error('Glasses bridge not available. Make sure useGlasses is mounted and __evenBridge is set.');
27
+ }
17
28
  this.listening = true;
18
- this.config.bridge.onEvent((event) => {
29
+ // Open the glasses microphone
30
+ try {
31
+ if (this.bridge.rawBridge?.audioControl) {
32
+ sttLog('GlassBridgeSource', 'calling audioControl(true)');
33
+ await this.bridge.rawBridge.audioControl(true);
34
+ sttLog('GlassBridgeSource', 'audioControl(true) succeeded');
35
+ }
36
+ else if (this.bridge.rawBridge?.callEvenApp) {
37
+ sttLog('GlassBridgeSource', 'calling callEvenApp("audioControl", {isOpen: true})');
38
+ await this.bridge.rawBridge.callEvenApp('audioControl', { isOpen: true });
39
+ sttLog('GlassBridgeSource', 'callEvenApp audioControl succeeded');
40
+ }
41
+ else {
42
+ sttLog('GlassBridgeSource', 'WARNING: no audioControl method found on bridge');
43
+ }
44
+ }
45
+ catch (err) {
46
+ sttLog('GlassBridgeSource', 'audioControl(true) error:', err);
47
+ }
48
+ // Listen for audio PCM events
49
+ this.bridge.onEvent((event) => {
19
50
  if (!this.listening)
20
51
  return;
21
- const audioPcm = event.audioEvent?.audioPcm;
52
+ const audioPcm = event?.audioEvent?.audioPcm;
22
53
  if (!audioPcm || audioPcm.length === 0)
23
54
  return;
24
- const pcm16 = uint8ToPcm16(audioPcm);
25
- const float32 = pcm16ToFloat32(pcm16);
55
+ sttLog('GlassBridgeSource', 'got audioPcm chunk, bytes:', audioPcm.length);
56
+ // Convert Uint8Array (16-bit PCM little-endian) to Float32Array
57
+ const float32 = pcm16ToFloat32(audioPcm);
26
58
  for (const cb of this.listeners) {
27
59
  cb(float32, GLASS_SAMPLE_RATE);
28
60
  }
29
61
  });
30
62
  }
31
63
  stop() {
64
+ sttLog('GlassBridgeSource.stop()');
32
65
  this.listening = false;
66
+ // Close the glasses microphone
67
+ if (this.bridge) {
68
+ try {
69
+ if (this.bridge.rawBridge?.audioControl) {
70
+ this.bridge.rawBridge.audioControl(false);
71
+ }
72
+ else if (this.bridge.rawBridge?.callEvenApp) {
73
+ this.bridge.rawBridge.callEvenApp('audioControl', { isOpen: false });
74
+ }
75
+ }
76
+ catch (err) {
77
+ sttLog('GlassBridgeSource', 'audioControl(false) error:', err);
78
+ }
79
+ }
33
80
  }
34
81
  onAudioData(cb) {
35
82
  this.listeners.push(cb);
@@ -44,4 +91,14 @@ export class GlassBridgeSource {
44
91
  this.listeners.length = 0;
45
92
  }
46
93
  }
94
+ /** Convert raw bytes (16-bit PCM little-endian) to Float32Array */
95
+ function pcm16ToFloat32(bytes) {
96
+ const samples = bytes.length / 2;
97
+ const float32 = new Float32Array(samples);
98
+ const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
99
+ for (let i = 0; i < samples; i++) {
100
+ float32[i] = view.getInt16(i * 2, true) / 32768;
101
+ }
102
+ return float32;
103
+ }
47
104
  //# sourceMappingURL=glass-bridge.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"glass-bridge.js","sourceRoot":"","sources":["../../../stt/sources/glass-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAElE,MAAM,iBAAiB,GAAG,KAAK,CAAC;AAehC;;;;GAIG;AACH,MAAM,OAAO,iBAAiB;IAK5B,YAAY,MAA+B;QAHnC,cAAS,GAA2D,EAAE,CAAC;QACvE,cAAS,GAAG,KAAK,CAAC;QAGxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,KAAsB,EAAE,EAAE;YACpD,IAAI,CAAC,IAAI,CAAC,SAAS;gBAAE,OAAO;YAC5B,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC;YAC5C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YAE/C,MAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAEtC,KAAK,MAAM,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,EAAE,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YACjC,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI;QACF,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,EAAmD;QAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE;YACV,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,CAAC,IAAI,EAAE,CAAC;QACZ,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"glass-bridge.js","sourceRoot":"","sources":["../../../stt/sources/glass-bridge.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"microphone.d.ts","sourceRoot":"","sources":["../../../stt/sources/microphone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,SAAS,CAA8D;IAEzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAwB5B,IAAI,IAAI,IAAI;IAsBZ,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ5E,OAAO,IAAI,IAAI;CAIhB"}
1
+ {"version":3,"file":"microphone.d.ts","sourceRoot":"","sources":["../../../stt/sources/microphone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,WAAW;IAClD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,UAAU,CAAoC;IACtD,OAAO,CAAC,UAAU,CAA2C;IAC7D,OAAO,CAAC,SAAS,CAA8D;IAEzE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA+B5B,IAAI,IAAI,IAAI;IAsBZ,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI;IAQ5E,OAAO,IAAI,IAAI;CAIhB"}
@@ -13,6 +13,10 @@ export class MicrophoneSource {
13
13
  this.listeners = [];
14
14
  }
15
15
  async start() {
16
+ if (!navigator.mediaDevices?.getUserMedia) {
17
+ throw new Error('getUserMedia not available — likely running in a WebView. ' +
18
+ 'Use glass-bridge source or pass a custom AudioSource instead.');
19
+ }
16
20
  this.stream = await navigator.mediaDevices.getUserMedia({
17
21
  audio: { sampleRate: DEFAULT_SAMPLE_RATE, channelCount: 1 },
18
22
  });
@@ -1 +1 @@
1
- {"version":3,"file":"microphone.js","sourceRoot":"","sources":["../../../stt/sources/microphone.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"microphone.js","sourceRoot":"","sources":["../../../stt/sources/microphone.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- export type STTProviderType = 'web-speech' | 'whisper-local' | 'whisper-api' | 'deepgram' | string;
1
+ export type STTProviderType = 'whisper-api' | 'deepgram' | string;
2
2
  export type STTMode = 'streaming' | 'batch';
3
3
  export type STTState = 'idle' | 'loading' | 'listening' | 'processing' | 'error';
4
4
  export interface STTTranscript {
@@ -58,6 +58,7 @@ export interface STTEngineConfig {
58
58
  thresholdDb?: number;
59
59
  };
60
60
  sampleRate?: number;
61
+ chunkIntervalMs?: number;
61
62
  fallback?: STTProviderType;
62
63
  }
63
64
  export interface UseSTTConfig {
@@ -68,7 +69,11 @@ export interface UseSTTConfig {
68
69
  apiKey?: string;
69
70
  modelId?: string;
70
71
  continuous?: boolean;
71
- vad?: boolean;
72
+ vad?: boolean | {
73
+ silenceMs?: number;
74
+ thresholdDb?: number;
75
+ };
76
+ chunkIntervalMs?: number;
72
77
  autoStart?: boolean;
73
78
  fallback?: STTProviderType;
74
79
  onTranscript?: (text: string, isFinal: boolean) => void;
@@ -78,7 +83,6 @@ export interface UseSTTReturn {
78
83
  interimTranscript: string;
79
84
  isListening: boolean;
80
85
  isLoading: boolean;
81
- loadProgress: number;
82
86
  error: STTError | null;
83
87
  state: STTState;
84
88
  start: () => Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../stt/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,eAAe,GAAG,aAAa,GAAG,UAAU,GAAG,MAAM,CAAC;AACnG,MAAM,MAAM,OAAO,GAAG,WAAW,GAAG,OAAO,CAAC;AAC5C,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,WAAW,GAAG,YAAY,GAAG,OAAO,CAAC;AAEjF,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,GAAG,SAAS,GAAG,aAAa,GAAG,SAAS,CAAC;IACrG,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC;IACnC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IAEzB,IAAI,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/C,KAAK,IAAI,IAAI,CAAC;IACd,IAAI,IAAI,IAAI,CAAC;IACb,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,IAAI,CAAC;IAEhB,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACzD,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IACrD,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAE/C,mDAAmD;IACnD,UAAU,CAAC,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;CAC9E;AAID,MAAM,WAAW,WAAW;IAC1B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,IAAI,CAAC;IACb,WAAW,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CAAC;IAC7E,OAAO,IAAI,IAAI,CAAC;CACjB;AAID,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,WAAW,CAAC;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,GAAG;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;CAC5B;AAID,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CACzD;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,QAAQ,CAAC;IAChB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI,EAAE,MAAM,IAAI,CAAC;IACjB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../stt/types.ts"],"names":[],"mappings":"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"}
package/glasses/bridge.ts CHANGED
@@ -24,7 +24,8 @@ export interface ColumnConfig {
24
24
 
25
25
  export class EvenHubBridge {
26
26
  private sdk: EvenBetterSdk;
27
- private rawBridge: EvenAppBridge | null = null;
27
+ /** Raw EvenHub SDK bridge exposed for STT audio control */
28
+ rawBridge: EvenAppBridge | null = null;
28
29
  private _currentMode: PageMode | null = null;
29
30
  private _pageReady = false;
30
31
 
@@ -95,8 +96,12 @@ export class EvenHubBridge {
95
96
  }
96
97
 
97
98
  async init(): Promise<void> {
98
- this.rawBridge = await EvenBetterSdk.getRawBridge() as unknown as EvenAppBridge;
99
- this._pageReady = true;
99
+ try {
100
+ this.rawBridge = await EvenBetterSdk.getRawBridge() as unknown as EvenAppBridge;
101
+ this._pageReady = true;
102
+ } catch (err) {
103
+ throw err;
104
+ }
100
105
  }
101
106
 
102
107
  // ── Setup (required before chart/home layout switch) ──
@@ -294,6 +299,22 @@ export class EvenHubBridge {
294
299
  );
295
300
  }
296
301
 
302
+ // ── IMU ──
303
+
304
+ async imuEnable(): Promise<void> {
305
+ if (!this.rawBridge) return;
306
+ try {
307
+ await (this.rawBridge as any).callEvenApp('imuControl', { isOpen: true });
308
+ } catch { /* IMU might not be supported */ }
309
+ }
310
+
311
+ async imuDisable(): Promise<void> {
312
+ if (!this.rawBridge) return;
313
+ try {
314
+ await (this.rawBridge as any).callEvenApp('imuControl', { isOpen: false });
315
+ } catch { /* IMU might not be supported */ }
316
+ }
317
+
297
318
  // ── Events ──
298
319
 
299
320
  onEvent(handler: (event: EvenHubEvent) => void): void {
@@ -27,7 +27,7 @@ function eventCaptureContainer(): TextContainerProperty {
27
27
  height: MAIN_SLOT.h,
28
28
  borderWidth: 0,
29
29
  borderColor: 0,
30
- borderRdaius: 0,
30
+ borderRadius: 0,
31
31
  paddingLength: 0,
32
32
  content: '',
33
33
  isEventCapture: 1,
@@ -45,7 +45,7 @@ function dummy(): TextContainerProperty {
45
45
  height: s.h,
46
46
  borderWidth: 0,
47
47
  borderColor: 0,
48
- borderRdaius: 0,
48
+ borderRadius: 0,
49
49
  paddingLength: 0,
50
50
  content: '',
51
51
  isEventCapture: 0,
package/glasses/layout.ts CHANGED
@@ -2,9 +2,15 @@
2
2
 
3
3
  export const DISPLAY_W = 576;
4
4
  export const DISPLAY_H = 288;
5
+
6
+ // Default tile size (used by all existing apps)
5
7
  export const G2_IMAGE_MAX_W = 200;
6
8
  export const G2_IMAGE_MAX_H = 100;
7
9
 
10
+ // SDK 0.0.9 max image bounds (for apps that want larger tiles)
11
+ export const G2_IMAGE_LIMIT_W = 288;
12
+ export const G2_IMAGE_LIMIT_H = 144;
13
+
8
14
  // ── Image tile slots (for chart layout: 3 tiles across the top) ──
9
15
 
10
16
  export interface TileSlot {
package/glasses/types.ts CHANGED
@@ -20,6 +20,22 @@ export function separator(): DisplayLine {
20
20
  return { text: '', inverted: false, style: 'separator' };
21
21
  }
22
22
 
23
+ /**
24
+ * Build a glasses header block: title + optional action bar + separator line.
25
+ * Returns 2 DisplayLines: [header, separator]
26
+ *
27
+ * Usage:
28
+ * lines.push(...glassHeader('INBOX (3)'));
29
+ * lines.push(...glassHeader('Step 1/4', '▶Timer◀ Scroll'));
30
+ */
31
+ export function glassHeader(title: string, actionBar?: string): DisplayLine[] {
32
+ const text = actionBar ? `${title} ${actionBar}` : title;
33
+ return [
34
+ { text, inverted: false, style: 'normal' as LineStyle },
35
+ { text: '', inverted: false, style: 'separator' as LineStyle },
36
+ ];
37
+ }
38
+
23
39
  // ── Column layout types (for multi-text-container pages) ──
24
40
 
25
41
  export interface ColumnData {
@@ -44,6 +60,18 @@ export type PageMode =
44
60
  | 'home' // image tile + text + empty overlay (home screens)
45
61
  | 'chart'; // 3 image tiles + text (chart detail)
46
62
 
63
+ // ── Launch source ──
64
+
65
+ export type LaunchSource = 'appMenu' | 'glassesMenu';
66
+
67
+ // ── IMU data ──
68
+
69
+ export interface IMUData {
70
+ accelerometer: { x: number; y: number; z: number };
71
+ gyroscope: { x: number; y: number; z: number };
72
+ timestamp: number;
73
+ }
74
+
47
75
  // ── Glass action types ──
48
76
 
49
77
  export type GlassActionType = 'HIGHLIGHT_MOVE' | 'SELECT_HIGHLIGHTED' | 'GO_BACK';