voice-mode 2.23.0__py3-none-any.whl → 2.25.0__py3-none-any.whl

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 (64) hide show
  1. voice_mode/__version__.py +1 -1
  2. voice_mode/cli.py +49 -25
  3. voice_mode/config.py +15 -5
  4. voice_mode/frontend/.next/BUILD_ID +1 -1
  5. voice_mode/frontend/.next/app-build-manifest.json +5 -5
  6. voice_mode/frontend/.next/build-manifest.json +3 -3
  7. voice_mode/frontend/.next/next-minimal-server.js.nft.json +1 -1
  8. voice_mode/frontend/.next/next-server.js.nft.json +1 -1
  9. voice_mode/frontend/.next/prerender-manifest.json +1 -1
  10. voice_mode/frontend/.next/required-server-files.json +1 -1
  11. voice_mode/frontend/.next/server/app/_not-found/page.js +1 -1
  12. voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  13. voice_mode/frontend/.next/server/app/_not-found.html +1 -1
  14. voice_mode/frontend/.next/server/app/_not-found.rsc +1 -1
  15. voice_mode/frontend/.next/server/app/api/connection-details/route.js +2 -2
  16. voice_mode/frontend/.next/server/app/favicon.ico/route.js +2 -2
  17. voice_mode/frontend/.next/server/app/index.html +1 -1
  18. voice_mode/frontend/.next/server/app/index.rsc +2 -2
  19. voice_mode/frontend/.next/server/app/page.js +2 -2
  20. voice_mode/frontend/.next/server/app/page_client-reference-manifest.js +1 -1
  21. voice_mode/frontend/.next/server/chunks/994.js +1 -1
  22. voice_mode/frontend/.next/server/middleware-build-manifest.js +1 -1
  23. voice_mode/frontend/.next/server/next-font-manifest.js +1 -1
  24. voice_mode/frontend/.next/server/next-font-manifest.json +1 -1
  25. voice_mode/frontend/.next/server/pages/404.html +1 -1
  26. voice_mode/frontend/.next/server/pages/500.html +1 -1
  27. voice_mode/frontend/.next/server/server-reference-manifest.json +1 -1
  28. voice_mode/frontend/.next/standalone/.next/BUILD_ID +1 -1
  29. voice_mode/frontend/.next/standalone/.next/app-build-manifest.json +5 -5
  30. voice_mode/frontend/.next/standalone/.next/build-manifest.json +3 -3
  31. voice_mode/frontend/.next/standalone/.next/prerender-manifest.json +1 -1
  32. voice_mode/frontend/.next/standalone/.next/required-server-files.json +1 -1
  33. voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  34. voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  35. voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html +1 -1
  36. voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  37. voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js +2 -2
  38. voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js +2 -2
  39. voice_mode/frontend/.next/standalone/.next/server/app/index.html +1 -1
  40. voice_mode/frontend/.next/standalone/.next/server/app/index.rsc +2 -2
  41. voice_mode/frontend/.next/standalone/.next/server/app/page.js +2 -2
  42. voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  43. voice_mode/frontend/.next/standalone/.next/server/chunks/994.js +1 -1
  44. voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  45. voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js +1 -1
  46. voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json +1 -1
  47. voice_mode/frontend/.next/standalone/.next/server/pages/404.html +1 -1
  48. voice_mode/frontend/.next/standalone/.next/server/pages/500.html +1 -1
  49. voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  50. voice_mode/frontend/.next/standalone/server.js +1 -1
  51. voice_mode/frontend/.next/static/chunks/app/{layout-b625329e9ada0473.js → layout-5675f418c42e0ae3.js} +1 -1
  52. voice_mode/frontend/.next/static/chunks/app/{page-983279b94d1fda4b.js → page-dbb3615cf25cdc16.js} +1 -1
  53. voice_mode/frontend/.next/static/chunks/{main-app-55293f39223cd65f.js → main-app-d25858d98b1d322b.js} +1 -1
  54. voice_mode/frontend/.next/trace +43 -43
  55. voice_mode/frontend/.next/types/app/api/connection-details/route.ts +1 -1
  56. voice_mode/frontend/.next/types/app/layout.ts +1 -1
  57. voice_mode/frontend/.next/types/app/page.ts +1 -1
  58. voice_mode/tools/converse.py +97 -40
  59. {voice_mode-2.23.0.dist-info → voice_mode-2.25.0.dist-info}/METADATA +1 -1
  60. {voice_mode-2.23.0.dist-info → voice_mode-2.25.0.dist-info}/RECORD +64 -64
  61. /voice_mode/frontend/.next/static/{Wzk1z2qG5teKcU-SpnqS6 → SsR9zBdw0hd2LN3Vo9tP_}/_buildManifest.js +0 -0
  62. /voice_mode/frontend/.next/static/{Wzk1z2qG5teKcU-SpnqS6 → SsR9zBdw0hd2LN3Vo9tP_}/_ssgManifest.js +0 -0
  63. {voice_mode-2.23.0.dist-info → voice_mode-2.25.0.dist-info}/WHEEL +0 -0
  64. {voice_mode-2.23.0.dist-info → voice_mode-2.25.0.dist-info}/entry_points.txt +0 -0
@@ -1,4 +1,4 @@
1
- // File: /tmp/build-via-sdist-99y8yie1/voice_mode-2.23.0/voice_mode/frontend/app/api/connection-details/route.ts
1
+ // File: /tmp/build-via-sdist-4ayms1lr/voice_mode-2.25.0/voice_mode/frontend/app/api/connection-details/route.ts
2
2
  import * as entry from '../../../../../app/api/connection-details/route.js'
3
3
  import type { NextRequest } from 'next/server.js'
4
4
 
@@ -1,4 +1,4 @@
1
- // File: /tmp/build-via-sdist-99y8yie1/voice_mode-2.23.0/voice_mode/frontend/app/layout.tsx
1
+ // File: /tmp/build-via-sdist-4ayms1lr/voice_mode-2.25.0/voice_mode/frontend/app/layout.tsx
2
2
  import * as entry from '../../../app/layout.js'
3
3
  import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
4
4
 
@@ -1,4 +1,4 @@
1
- // File: /tmp/build-via-sdist-99y8yie1/voice_mode-2.23.0/voice_mode/frontend/app/page.tsx
1
+ // File: /tmp/build-via-sdist-4ayms1lr/voice_mode-2.25.0/voice_mode/frontend/app/page.tsx
2
2
  import * as entry from '../../../app/page.js'
3
3
  import type { ResolvingMetadata, ResolvingViewport } from 'next/dist/lib/metadata/types/metadata-interface.js'
4
4
 
@@ -32,6 +32,7 @@ from voice_mode.config import (
32
32
  CHANNELS,
33
33
  DEBUG,
34
34
  DEBUG_DIR,
35
+ VAD_DEBUG,
35
36
  SAVE_AUDIO,
36
37
  AUDIO_DIR,
37
38
  OPENAI_API_KEY,
@@ -872,7 +873,7 @@ def record_audio(duration: float) -> np.ndarray:
872
873
  sys.stderr = original_stderr
873
874
 
874
875
 
875
- def record_audio_with_silence_detection(max_duration: float, disable_silence_detection: bool = False, min_duration: float = 0.0, vad_aggressiveness: Optional[int] = None) -> np.ndarray:
876
+ def record_audio_with_silence_detection(max_duration: float, disable_silence_detection: bool = False, min_duration: float = 0.0, vad_aggressiveness: Optional[int] = None) -> Tuple[np.ndarray, bool]:
876
877
  """Record audio from microphone with automatic silence detection.
877
878
 
878
879
  Uses WebRTC VAD to detect when the user stops speaking and automatically
@@ -885,21 +886,25 @@ def record_audio_with_silence_detection(max_duration: float, disable_silence_det
885
886
  vad_aggressiveness: VAD aggressiveness level (0-3). If None, uses VAD_AGGRESSIVENESS from config
886
887
 
887
888
  Returns:
888
- Numpy array of recorded audio samples
889
+ Tuple of (audio_data, speech_detected):
890
+ - audio_data: Numpy array of recorded audio samples
891
+ - speech_detected: Boolean indicating if speech was detected during recording
889
892
  """
890
893
 
891
894
  logger.info(f"record_audio_with_silence_detection called - VAD_AVAILABLE={VAD_AVAILABLE}, DISABLE_SILENCE_DETECTION={DISABLE_SILENCE_DETECTION}, min_duration={min_duration}")
892
895
 
893
896
  if not VAD_AVAILABLE:
894
897
  logger.warning("webrtcvad not available, falling back to fixed duration recording")
895
- return record_audio(max_duration)
898
+ # For fallback, assume speech is present since we can't detect
899
+ return (record_audio(max_duration), True)
896
900
 
897
901
  if DISABLE_SILENCE_DETECTION or disable_silence_detection:
898
902
  if disable_silence_detection:
899
903
  logger.info("Silence detection disabled for this interaction by request")
900
904
  else:
901
905
  logger.info("Silence detection disabled globally via VOICEMODE_DISABLE_SILENCE_DETECTION")
902
- return record_audio(max_duration)
906
+ # For fallback, assume speech is present since we can't detect
907
+ return (record_audio(max_duration), True)
903
908
 
904
909
  logger.info(f"🎤 Recording with silence detection (max {max_duration}s)...")
905
910
 
@@ -940,6 +945,16 @@ def record_audio_with_silence_detection(max_duration: float, disable_silence_det
940
945
  f"Min duration: {MIN_RECORDING_DURATION}s, "
941
946
  f"Initial grace period: {INITIAL_SILENCE_GRACE_PERIOD}s")
942
947
 
948
+ if VAD_DEBUG:
949
+ logger.info(f"[VAD_DEBUG] Starting VAD recording with config:")
950
+ logger.info(f"[VAD_DEBUG] max_duration: {max_duration}s")
951
+ logger.info(f"[VAD_DEBUG] min_duration: {min_duration}s")
952
+ logger.info(f"[VAD_DEBUG] effective_min_duration: {max(MIN_RECORDING_DURATION, min_duration)}s")
953
+ logger.info(f"[VAD_DEBUG] VAD aggressiveness: {effective_vad_aggressiveness}")
954
+ logger.info(f"[VAD_DEBUG] Silence threshold: {SILENCE_THRESHOLD_MS}ms")
955
+ logger.info(f"[VAD_DEBUG] Sample rate: {SAMPLE_RATE}Hz (VAD using {vad_sample_rate}Hz)")
956
+ logger.info(f"[VAD_DEBUG] Chunk duration: {VAD_CHUNK_DURATION_MS}ms")
957
+
943
958
  def audio_callback(indata, frames, time, status):
944
959
  """Callback for continuous audio stream"""
945
960
  if status:
@@ -979,35 +994,53 @@ def record_audio_with_silence_detection(max_duration: float, disable_silence_det
979
994
  # Check if chunk contains speech
980
995
  try:
981
996
  is_speech = vad.is_speech(chunk_bytes, vad_sample_rate)
997
+ if VAD_DEBUG:
998
+ # Log VAD decision every 500ms for less spam
999
+ if int(recording_duration * 1000) % 500 == 0:
1000
+ rms = np.sqrt(np.mean(chunk.astype(float)**2))
1001
+ logger.info(f"[VAD_DEBUG] t={recording_duration:.1f}s: speech={is_speech}, RMS={rms:.0f}, state={'WAITING' if not speech_detected else 'ACTIVE'}")
982
1002
  except Exception as vad_e:
983
1003
  logger.warning(f"VAD error: {vad_e}, treating as speech")
984
1004
  is_speech = True
985
1005
 
986
- if is_speech:
987
- if not speech_detected:
988
- logger.debug("Speech detected, recording...")
989
- speech_detected = True
990
- silence_duration_ms = 0
1006
+ # State machine for speech detection
1007
+ if not speech_detected:
1008
+ # WAITING_FOR_SPEECH state
1009
+ if is_speech:
1010
+ logger.info("🎤 Speech detected, starting active recording")
1011
+ if VAD_DEBUG:
1012
+ logger.info(f"[VAD_DEBUG] STATE CHANGE: WAITING_FOR_SPEECH -> SPEECH_ACTIVE at t={recording_duration:.1f}s")
1013
+ speech_detected = True
1014
+ silence_duration_ms = 0
1015
+ # No timeout in this state - just keep waiting
1016
+ # The only exit is speech detection or max_duration
991
1017
  else:
992
- silence_duration_ms += VAD_CHUNK_DURATION_MS
993
- if speech_detected and silence_duration_ms % 200 == 0: # Log every 200ms
994
- logger.debug(f"Silence: {silence_duration_ms}ms")
1018
+ # We have detected speech at some point
1019
+ if is_speech:
1020
+ # SPEECH_ACTIVE state - reset silence counter
1021
+ silence_duration_ms = 0
1022
+ else:
1023
+ # SILENCE_AFTER_SPEECH state - accumulate silence
1024
+ silence_duration_ms += VAD_CHUNK_DURATION_MS
1025
+ if VAD_DEBUG and silence_duration_ms % 100 == 0: # More frequent logging in debug mode
1026
+ logger.info(f"[VAD_DEBUG] Accumulating silence: {silence_duration_ms}/{SILENCE_THRESHOLD_MS}ms, t={recording_duration:.1f}s")
1027
+ elif silence_duration_ms % 200 == 0: # Log every 200ms
1028
+ logger.debug(f"Silence: {silence_duration_ms}ms")
1029
+
1030
+ # Check if we should stop due to silence threshold
1031
+ # Use the larger of MIN_RECORDING_DURATION (global) or min_duration (parameter)
1032
+ effective_min_duration = max(MIN_RECORDING_DURATION, min_duration)
1033
+ if recording_duration >= effective_min_duration and silence_duration_ms >= SILENCE_THRESHOLD_MS:
1034
+ logger.info(f"✓ Silence threshold reached after {recording_duration:.1f}s of recording")
1035
+ if VAD_DEBUG:
1036
+ logger.info(f"[VAD_DEBUG] STOP: silence_duration={silence_duration_ms}ms >= threshold={SILENCE_THRESHOLD_MS}ms")
1037
+ logger.info(f"[VAD_DEBUG] STOP: recording_duration={recording_duration:.1f}s >= min_duration={effective_min_duration}s")
1038
+ stop_recording = True
1039
+ elif VAD_DEBUG and recording_duration < effective_min_duration:
1040
+ if int(recording_duration * 1000) % 500 == 0: # Log every 500ms
1041
+ logger.info(f"[VAD_DEBUG] Min duration not met: {recording_duration:.1f}s < {effective_min_duration}s")
995
1042
 
996
1043
  recording_duration += chunk_duration_s
997
-
998
- # Check stop conditions
999
- # Use the larger of MIN_RECORDING_DURATION (global) or min_duration (parameter)
1000
- effective_min_duration = max(MIN_RECORDING_DURATION, min_duration)
1001
- if speech_detected and recording_duration >= effective_min_duration:
1002
- if silence_duration_ms >= SILENCE_THRESHOLD_MS:
1003
- logger.info(f"✓ Silence detected after {recording_duration:.1f}s (min: {effective_min_duration:.1f}s), stopping recording")
1004
- stop_recording = True
1005
-
1006
- # Also stop if we haven't detected any speech after a grace period
1007
- # Give user time to start speaking
1008
- if not speech_detected and recording_duration >= INITIAL_SILENCE_GRACE_PERIOD:
1009
- logger.info(f"No speech detected after {INITIAL_SILENCE_GRACE_PERIOD}s grace period, stopping recording")
1010
- stop_recording = True
1011
1044
 
1012
1045
  except queue.Empty:
1013
1046
  # No audio data available, continue waiting
@@ -1019,17 +1052,26 @@ def record_audio_with_silence_detection(max_duration: float, disable_silence_det
1019
1052
  # Concatenate all chunks
1020
1053
  if chunks:
1021
1054
  full_recording = np.concatenate(chunks)
1022
- logger.info(f"✓ Recorded {len(full_recording)} samples ({recording_duration:.1f}s)")
1055
+
1056
+ if not speech_detected:
1057
+ logger.info(f"✓ Recording completed ({recording_duration:.1f}s) - No speech detected")
1058
+ if VAD_DEBUG:
1059
+ logger.info(f"[VAD_DEBUG] FINAL STATE: No speech was ever detected during recording")
1060
+ else:
1061
+ logger.info(f"✓ Recorded {len(full_recording)} samples ({recording_duration:.1f}s) with speech")
1062
+ if VAD_DEBUG:
1063
+ logger.info(f"[VAD_DEBUG] FINAL STATE: Speech was detected, recording complete")
1023
1064
 
1024
1065
  if DEBUG:
1025
1066
  # Calculate RMS for debug
1026
1067
  rms = np.sqrt(np.mean(full_recording.astype(float) ** 2))
1027
1068
  logger.debug(f"Recording stats - RMS: {rms:.2f}, Speech detected: {speech_detected}")
1028
1069
 
1029
- return full_recording
1070
+ # Return tuple: (audio_data, speech_detected)
1071
+ return (full_recording, speech_detected)
1030
1072
  else:
1031
1073
  logger.warning("No audio chunks recorded")
1032
- return np.array([])
1074
+ return (np.array([]), False)
1033
1075
 
1034
1076
  except Exception as e:
1035
1077
  logger.error(f"Recording with VAD failed: {e}")
@@ -1042,7 +1084,8 @@ def record_audio_with_silence_detection(max_duration: float, disable_silence_det
1042
1084
  logger.error(f"\n{help_message}")
1043
1085
 
1044
1086
  logger.info("Falling back to fixed duration recording")
1045
- return record_audio(max_duration)
1087
+ # For fallback, assume speech is present since we can't detect
1088
+ return (record_audio(max_duration), True)
1046
1089
 
1047
1090
  finally:
1048
1091
  # Restore stdio
@@ -1056,7 +1099,8 @@ def record_audio_with_silence_detection(max_duration: float, disable_silence_det
1056
1099
  except Exception as e:
1057
1100
  logger.error(f"VAD initialization failed: {e}")
1058
1101
  logger.info("Falling back to fixed duration recording")
1059
- return record_audio(max_duration)
1102
+ # For fallback, assume speech is present since we can't detect
1103
+ return (record_audio(max_duration), True)
1060
1104
 
1061
1105
 
1062
1106
  async def check_livekit_available() -> bool:
@@ -1713,7 +1757,7 @@ async def converse(
1713
1757
 
1714
1758
  record_start = time.perf_counter()
1715
1759
  logger.debug(f"About to call record_audio_with_silence_detection with duration={listen_duration}, disable_silence_detection={disable_silence_detection}, min_duration={min_listen_duration}, vad_aggressiveness={vad_aggressiveness}")
1716
- audio_data = await asyncio.get_event_loop().run_in_executor(
1760
+ audio_data, speech_detected = await asyncio.get_event_loop().run_in_executor(
1717
1761
  None, record_audio_with_silence_detection, listen_duration, disable_silence_detection, min_listen_duration, vad_aggressiveness
1718
1762
  )
1719
1763
  timings['record'] = time.perf_counter() - record_start
@@ -1736,14 +1780,27 @@ async def converse(
1736
1780
  result = "Error: Could not record audio"
1737
1781
  return result
1738
1782
 
1739
- # Convert to text
1740
- # Log STT start
1741
- if event_logger:
1742
- event_logger.log_event(event_logger.STT_START)
1743
-
1744
- stt_start = time.perf_counter()
1745
- response_text = await speech_to_text(audio_data, SAVE_AUDIO, AUDIO_DIR if SAVE_AUDIO else None, transport)
1746
- timings['stt'] = time.perf_counter() - stt_start
1783
+ # Check if no speech was detected
1784
+ if not speech_detected:
1785
+ logger.info("No speech detected during recording - skipping STT processing")
1786
+ response_text = None
1787
+ timings['stt'] = 0.0
1788
+
1789
+ # Still save the audio if configured
1790
+ if SAVE_AUDIO and AUDIO_DIR:
1791
+ timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
1792
+ audio_path = os.path.join(AUDIO_DIR, f"no_speech_{timestamp}.wav")
1793
+ write(audio_path, SAMPLE_RATE, audio_data)
1794
+ logger.debug(f"Saved no-speech audio to: {audio_path}")
1795
+ else:
1796
+ # Convert to text
1797
+ # Log STT start
1798
+ if event_logger:
1799
+ event_logger.log_event(event_logger.STT_START)
1800
+
1801
+ stt_start = time.perf_counter()
1802
+ response_text = await speech_to_text(audio_data, SAVE_AUDIO, AUDIO_DIR if SAVE_AUDIO else None, transport)
1803
+ timings['stt'] = time.perf_counter() - stt_start
1747
1804
 
1748
1805
  # Log STT complete
1749
1806
  if event_logger:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-mode
3
- Version: 2.23.0
3
+ Version: 2.25.0
4
4
  Summary: VoiceMode - Voice interaction capabilities for AI assistants (formerly voice-mcp)
5
5
  Project-URL: Homepage, https://github.com/mbailey/voicemode
6
6
  Project-URL: Repository, https://github.com/mbailey/voicemode
@@ -1,8 +1,8 @@
1
1
  voice_mode/__init__.py,sha256=PDCwE2rrm8yyYxEiQQJkznQ_4xYp3DWIxGSB84K_mnI,346
2
2
  voice_mode/__main__.py,sha256=td-njie1XgkR-NrQjOEUse4TSJBC8DAmYywHum3V6WQ,138
3
- voice_mode/__version__.py,sha256=Lbh7btvmt5r2DNRPClsUtC8GHUDxnOJNG72pxUcuFeQ,101
4
- voice_mode/cli.py,sha256=X1MMcPh50QXBhrLovEQ0WT75AHMRtdYbQ5GxXa1lIeE,35106
5
- voice_mode/config.py,sha256=_GvRP1SW6d1ATcJ4GjhbQMwLtGLxN0X_C_N0ePEkt6c,26581
3
+ voice_mode/__version__.py,sha256=2oqO4DZihdoBPS01DfTxmzzFAZYB3xVYDm4WZ9rT470,101
4
+ voice_mode/cli.py,sha256=4cx7okaePG0GsorJFgYoHcliesOF7VX0ztx_uJBdRI4,36825
5
+ voice_mode/config.py,sha256=z6pHKCM6ioRtMyL5Xz7yndOKzsd3jLJFNjrFCttlDMM,27056
6
6
  voice_mode/conversation_logger.py,sha256=Nar92xabhaVmMKdZdLmgoYckK9fGAVVYWdass3-EI1I,9363
7
7
  voice_mode/core.py,sha256=Nx9pxVWcI2BFRqU7MLmfuJlcvvRJ7_Wy14Wq3VZOmm8,25217
8
8
  voice_mode/provider_discovery.py,sha256=roELfldoo7s-_1XxJF-vb9BOxMmVRpYlwAX3EnTSlcQ,15729
@@ -33,58 +33,58 @@ voice_mode/frontend/pnpm-lock.yaml,sha256=DSl1H3fb4tNVrHjsc5HbflJJIr95erkADNeUoF
33
33
  voice_mode/frontend/postcss.config.mjs,sha256=76ZcZeF9UdWFcO3OnXArBgT99qm422Wvrtjwda-IZ8c,157
34
34
  voice_mode/frontend/tailwind.config.ts,sha256=w0mWCjy3kwryNcqgub24YLbmd2V9EvOmWSYHmsFdpkY,264
35
35
  voice_mode/frontend/tsconfig.json,sha256=VCAvHW01ulHD2uoyv2fo2iRWjsDLDDQfoLXtLOsXTy0,574
36
- voice_mode/frontend/.next/BUILD_ID,sha256=dodtcqVR51ptC6BtDppX8NICli0_ULqwAJU4wgCikWE,21
37
- voice_mode/frontend/.next/app-build-manifest.json,sha256=87hDPUGgMwIS5c8d04Iq0vKAPgUVtSc7R-xFBk6wNPg,1010
36
+ voice_mode/frontend/.next/BUILD_ID,sha256=p64duedCfOGqAPr6OGbw9WN_WNm_q5IqQIlA0ilhVyE,21
37
+ voice_mode/frontend/.next/app-build-manifest.json,sha256=w6sf82qUZegvPa3Gx3TwH1Q_ZxnhRsb6MfXC4Ssue-M,1010
38
38
  voice_mode/frontend/.next/app-path-routes-manifest.json,sha256=-WXlpEHFoCBUDPfxzUJleLsfZiEUU-rU0hRMZ8AVIJI,140
39
- voice_mode/frontend/.next/build-manifest.json,sha256=a4mP5IjJ0zO9yez2AD3j6JPzTysnMVXLLDpBjUNzJvE,968
39
+ voice_mode/frontend/.next/build-manifest.json,sha256=joBmEnaBOhKX6aGXKruTqZoQsELadthA7yUAHR37oJs,968
40
40
  voice_mode/frontend/.next/export-marker.json,sha256=ALjrM5QMj5hmGX14xIc2wIFDfLaFKlK3n1wQpwjMagI,94
41
41
  voice_mode/frontend/.next/images-manifest.json,sha256=Z1eB8ppSn86wfAon69Z5DSKbg7IoIvyGB8uCu88xGjs,511
42
- voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=py4454R5OUCnSb61K6Dv4M2cz2PJjudezY1npJdH8B0,7314
43
- voice_mode/frontend/.next/next-server.js.nft.json,sha256=PGI_fmwObVV6GeglMKn7h0zckSfHCwwW8b9oQlP-Xuw,109011
42
+ voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=DUatMYnXzvJOLib2M-Ny52LDvCc5_FuVD8t0q-CURpk,7314
43
+ voice_mode/frontend/.next/next-server.js.nft.json,sha256=7yJxDkFoTmTVjglhjjgOLHnulPZ1Ll_20YrnXNsDj1U,109011
44
44
  voice_mode/frontend/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
45
- voice_mode/frontend/.next/prerender-manifest.json,sha256=tHg4SZFs2Zax2AOZCvijqthR12wOJ-mrGSpt_bydEt0,959
45
+ voice_mode/frontend/.next/prerender-manifest.json,sha256=POYCduiFZnYEEmeld-erytkpB1Csefp5VmWT-SNSDb4,959
46
46
  voice_mode/frontend/.next/react-loadable-manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
47
- voice_mode/frontend/.next/required-server-files.json,sha256=DSPnyH-8TMyQOlaPo4BCDGA7J4REcV8ntW7hh5QT0fo,4750
47
+ voice_mode/frontend/.next/required-server-files.json,sha256=71rG3O1sERiQj1j1UE08lrPXO0_O12dkB0HEF-Y2NfM,4750
48
48
  voice_mode/frontend/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
49
- voice_mode/frontend/.next/trace,sha256=lWkDHV4Mmr3lbAzHny90f3gSaKR9T0K_xTRRVaIPoR8,904158
49
+ voice_mode/frontend/.next/trace,sha256=k3xexchhiGsKJCyx2gXTHLEXcH6Pceg1BGC7iQFMwhg,895637
50
50
  voice_mode/frontend/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
51
51
  voice_mode/frontend/.next/server/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
52
52
  voice_mode/frontend/.next/server/functions-config-manifest.json,sha256=CUXUfXux-dC5WRXm4vr6xa3f-RKEsEV1aG-hO3KK0CE,56
53
53
  voice_mode/frontend/.next/server/interception-route-rewrite-manifest.js,sha256=_FEz5ArPCeZRewc93XtcDCGNCZOISJAiEPLME_COHIE,48
54
- voice_mode/frontend/.next/server/middleware-build-manifest.js,sha256=PmvT1QRUWxNe8NWtwpO6nPtg10VTqTtbZtTOOD7CIek,888
54
+ voice_mode/frontend/.next/server/middleware-build-manifest.js,sha256=e2VqRObZYz38VG25GWIsZ7U1uMKj7p-pRkSATn7CZl8,888
55
55
  voice_mode/frontend/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
56
56
  voice_mode/frontend/.next/server/middleware-react-loadable-manifest.js,sha256=rS557JHipUQIQNo9i9IiwnmztMR-ialoMnpm9ssS64I,36
57
- voice_mode/frontend/.next/server/next-font-manifest.js,sha256=AJThnxe5pJvV_bCNSxjiBvoZKa1onpWewEVPkdy33Pk,229
58
- voice_mode/frontend/.next/server/next-font-manifest.json,sha256=HigXDcPP2yBm72yVaPySO0IznB4EusX2swwvjSI2zs8,200
57
+ voice_mode/frontend/.next/server/next-font-manifest.js,sha256=2RX-3ChR9TRL_VlZhReAAsKdJMiQ8_ZrpBi5j3aPwwc,229
58
+ voice_mode/frontend/.next/server/next-font-manifest.json,sha256=it2mZjNng9h4XKOxF4uRF9vBEJFPxKz_DKFa7WovTqk,200
59
59
  voice_mode/frontend/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
60
60
  voice_mode/frontend/.next/server/server-reference-manifest.js,sha256=zgEAbADh9jvL_kGz9-3SYNlptB0KMjtwXETh753xPYw,123
61
- voice_mode/frontend/.next/server/server-reference-manifest.json,sha256=M4OgNDlf0JIvmoiGLlvYCJjstAz7lhV3NafjjdC3PQ4,84
61
+ voice_mode/frontend/.next/server/server-reference-manifest.json,sha256=Ln-bJ9aUImNa7bmScNAMjad1g7iMUIJqXei2NLu4zpQ,84
62
62
  voice_mode/frontend/.next/server/webpack-runtime.js,sha256=mmuyol21D9il2KNetWeEUG5OBu3z05WsphIyIbwvads,1469
63
- voice_mode/frontend/.next/server/app/_not-found.html,sha256=XetO3025j65PvnJvC3tGnEjZJaOWcTs9RSPwOLAAvb4,6752
63
+ voice_mode/frontend/.next/server/app/_not-found.html,sha256=22o6PZLPoXEVFnemcbRRbnhs9d5J5HyddIelNLKroPc,6752
64
64
  voice_mode/frontend/.next/server/app/_not-found.meta,sha256=8-vSzkZIhJgJ7_uOmMyzHNf5QN3Exhbk-5ObKal4lrc,142
65
- voice_mode/frontend/.next/server/app/_not-found.rsc,sha256=yc-1D7d18LswwqA7P_xxyd8iamSxGSdglazqPlUzsFA,3621
65
+ voice_mode/frontend/.next/server/app/_not-found.rsc,sha256=LhhffajCOOKgOd-5YWYvFO12wL_OyhMrybylOTnSuwU,3621
66
66
  voice_mode/frontend/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
67
67
  voice_mode/frontend/.next/server/app/favicon.ico.meta,sha256=iac7LJDMkBlPpPPzKMbIDSh2bqoxNKhYx_5nQjo5Tds,211
68
- voice_mode/frontend/.next/server/app/index.html,sha256=0oGCYMBx87Qqac6p-zHL1fX15QA8_bs7iXN9IVW5o7I,5396
68
+ voice_mode/frontend/.next/server/app/index.html,sha256=ZoByryVzJ0YLtI0Gp9vJqUiS8-3HG9klfcvN9F1ZRqE,5396
69
69
  voice_mode/frontend/.next/server/app/index.meta,sha256=BDswoSxeaM0dEV3Vl3-2HNVKE5mS5NQhBYZcQQt5mnQ,80
70
- voice_mode/frontend/.next/server/app/index.rsc,sha256=9HIIu4xVpitIFtZ3o8nQhu9YtOSDH59OaXMZ-9CW0u0,2438
71
- voice_mode/frontend/.next/server/app/page.js,sha256=MHgckqgSJ-hFmVzrsm6pKQflBgd-r5CCJEnS954Vsak,611922
70
+ voice_mode/frontend/.next/server/app/index.rsc,sha256=LOVJ5wsK9tXEN7lEn4BimJIqHAcz4koTChzwvuhXEMc,2438
71
+ voice_mode/frontend/.next/server/app/page.js,sha256=TOS3oLnVkqjHf8O_TTRqPxJ-teyXgw47jTOGgN-7GcI,611920
72
72
  voice_mode/frontend/.next/server/app/page.js.nft.json,sha256=6plKkaMV7NDsYDUQsMAnayayODq1vS_l6nRXRrm9Trg,1168
73
- voice_mode/frontend/.next/server/app/page_client-reference-manifest.js,sha256=avIOMGoipjCTGiHVWKRSzTNx4v7Wwx_7e0-sMqMdL3A,4193
74
- voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=mInuXrOY8WrEzB6E7SXVKx2ZwgfBQ0m1v1YaYsfg3pU,3387
73
+ voice_mode/frontend/.next/server/app/page_client-reference-manifest.js,sha256=uH2okYTc3-r9gDQurGlgXtRBJlmYsWVjSSE5khEdB2g,4193
74
+ voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=XkWMVc7seDJGe1IZ61bpY6i57UjziotFqABuDOh_JEk,3387
75
75
  voice_mode/frontend/.next/server/app/_not-found/page.js.nft.json,sha256=7Z_Wav7koMsnepi3GignvrVRYuDbzwvKqqg84LuoSis,1195
76
- voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=f43IEN0-78BvMk6jWhRDsNP56olrW2I17B-Z7MCPIzk,4297
77
- voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=5FuQ9YRz0yMEe8K_30IwrtlwhIwRA_u_9Nu89KZ4v8k,121020
76
+ voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=igh2SQ9DR1yHwQx_nKf3mX26mIhLxS5DQ1RW9Zi4z0w,4297
77
+ voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=e56HCHEeb-g74uEvKcYpCMWGykr9qM8eqxhRSF-8Nrw,121020
78
78
  voice_mode/frontend/.next/server/app/api/connection-details/route.js.nft.json,sha256=qjdiqEpb5s6iSOQsC1MI3A0_sVjbF9Eh1t1mR_VcS9o,1327
79
- voice_mode/frontend/.next/server/app/favicon.ico/route.js,sha256=f_SmkSDdccBmhGFg5nTGpffLmQ6PVzAA_zEzFtwi3Q8,66228
79
+ voice_mode/frontend/.next/server/app/favicon.ico/route.js,sha256=KCGV7MSduYAWvKgqfgIjTCcLxq262maUbCbg5XepZFA,66228
80
80
  voice_mode/frontend/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
81
81
  voice_mode/frontend/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
82
82
  voice_mode/frontend/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
83
83
  voice_mode/frontend/.next/server/chunks/948.js,sha256=2QNDLi5TnS9qLpgKRmsx_sJzO2vtdQJIRn124o6fjeI,57650
84
- voice_mode/frontend/.next/server/chunks/994.js,sha256=KqflCcEwOF5YY9vM0DQEwOCuzNyZlhSHY3gOR-Ka4KU,95359
84
+ voice_mode/frontend/.next/server/chunks/994.js,sha256=SAKb7ovZnvXvMANDV0PTWln5Vf_-JoLuhwoZDVcm-WE,95359
85
85
  voice_mode/frontend/.next/server/chunks/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
86
- voice_mode/frontend/.next/server/pages/404.html,sha256=XetO3025j65PvnJvC3tGnEjZJaOWcTs9RSPwOLAAvb4,6752
87
- voice_mode/frontend/.next/server/pages/500.html,sha256=yOwSISKf-HCowug5AuvLlc0OqIZmRNv7UZ0KI6-wwv8,1995
86
+ voice_mode/frontend/.next/server/pages/404.html,sha256=22o6PZLPoXEVFnemcbRRbnhs9d5J5HyddIelNLKroPc,6752
87
+ voice_mode/frontend/.next/server/pages/500.html,sha256=tzRvFGXPQOGUt6fL71Y45pbwPUseC-cJhnPMza7OgQY,1995
88
88
  voice_mode/frontend/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
89
89
  voice_mode/frontend/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
90
90
  voice_mode/frontend/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
@@ -92,70 +92,70 @@ voice_mode/frontend/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRyt
92
92
  voice_mode/frontend/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
93
93
  voice_mode/frontend/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
94
94
  voice_mode/frontend/.next/standalone/package.json,sha256=BUOh3UiaHq1D0Bww-jy2EjhOi-47rjOipeUqXONJndo,1150
95
- voice_mode/frontend/.next/standalone/server.js,sha256=lc2Wvd6JTUnmCpAfvy8HRjpkkNrzGS2mynPyrU5ngvg,4742
96
- voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=dodtcqVR51ptC6BtDppX8NICli0_ULqwAJU4wgCikWE,21
97
- voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=87hDPUGgMwIS5c8d04Iq0vKAPgUVtSc7R-xFBk6wNPg,1010
95
+ voice_mode/frontend/.next/standalone/server.js,sha256=RlIywTYhv5zBDv6YyKxY5YNqy8_wlHg5yCbzDdmB6sk,4742
96
+ voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=p64duedCfOGqAPr6OGbw9WN_WNm_q5IqQIlA0ilhVyE,21
97
+ voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=w6sf82qUZegvPa3Gx3TwH1Q_ZxnhRsb6MfXC4Ssue-M,1010
98
98
  voice_mode/frontend/.next/standalone/.next/app-path-routes-manifest.json,sha256=-WXlpEHFoCBUDPfxzUJleLsfZiEUU-rU0hRMZ8AVIJI,140
99
- voice_mode/frontend/.next/standalone/.next/build-manifest.json,sha256=a4mP5IjJ0zO9yez2AD3j6JPzTysnMVXLLDpBjUNzJvE,968
99
+ voice_mode/frontend/.next/standalone/.next/build-manifest.json,sha256=joBmEnaBOhKX6aGXKruTqZoQsELadthA7yUAHR37oJs,968
100
100
  voice_mode/frontend/.next/standalone/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
101
- voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=tHg4SZFs2Zax2AOZCvijqthR12wOJ-mrGSpt_bydEt0,959
101
+ voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=POYCduiFZnYEEmeld-erytkpB1Csefp5VmWT-SNSDb4,959
102
102
  voice_mode/frontend/.next/standalone/.next/react-loadable-manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
103
- voice_mode/frontend/.next/standalone/.next/required-server-files.json,sha256=DSPnyH-8TMyQOlaPo4BCDGA7J4REcV8ntW7hh5QT0fo,4750
103
+ voice_mode/frontend/.next/standalone/.next/required-server-files.json,sha256=71rG3O1sERiQj1j1UE08lrPXO0_O12dkB0HEF-Y2NfM,4750
104
104
  voice_mode/frontend/.next/standalone/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
105
105
  voice_mode/frontend/.next/standalone/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
106
106
  voice_mode/frontend/.next/standalone/.next/server/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
107
- voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js,sha256=PmvT1QRUWxNe8NWtwpO6nPtg10VTqTtbZtTOOD7CIek,888
107
+ voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js,sha256=e2VqRObZYz38VG25GWIsZ7U1uMKj7p-pRkSATn7CZl8,888
108
108
  voice_mode/frontend/.next/standalone/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
109
109
  voice_mode/frontend/.next/standalone/.next/server/middleware-react-loadable-manifest.js,sha256=rS557JHipUQIQNo9i9IiwnmztMR-ialoMnpm9ssS64I,36
110
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js,sha256=AJThnxe5pJvV_bCNSxjiBvoZKa1onpWewEVPkdy33Pk,229
111
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=HigXDcPP2yBm72yVaPySO0IznB4EusX2swwvjSI2zs8,200
110
+ voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js,sha256=2RX-3ChR9TRL_VlZhReAAsKdJMiQ8_ZrpBi5j3aPwwc,229
111
+ voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=it2mZjNng9h4XKOxF4uRF9vBEJFPxKz_DKFa7WovTqk,200
112
112
  voice_mode/frontend/.next/standalone/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
113
113
  voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.js,sha256=zgEAbADh9jvL_kGz9-3SYNlptB0KMjtwXETh753xPYw,123
114
- voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json,sha256=M4OgNDlf0JIvmoiGLlvYCJjstAz7lhV3NafjjdC3PQ4,84
114
+ voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json,sha256=Ln-bJ9aUImNa7bmScNAMjad1g7iMUIJqXei2NLu4zpQ,84
115
115
  voice_mode/frontend/.next/standalone/.next/server/webpack-runtime.js,sha256=mmuyol21D9il2KNetWeEUG5OBu3z05WsphIyIbwvads,1469
116
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html,sha256=XetO3025j65PvnJvC3tGnEjZJaOWcTs9RSPwOLAAvb4,6752
116
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html,sha256=22o6PZLPoXEVFnemcbRRbnhs9d5J5HyddIelNLKroPc,6752
117
117
  voice_mode/frontend/.next/standalone/.next/server/app/_not-found.meta,sha256=8-vSzkZIhJgJ7_uOmMyzHNf5QN3Exhbk-5ObKal4lrc,142
118
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc,sha256=yc-1D7d18LswwqA7P_xxyd8iamSxGSdglazqPlUzsFA,3621
118
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc,sha256=LhhffajCOOKgOd-5YWYvFO12wL_OyhMrybylOTnSuwU,3621
119
119
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
120
120
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico.meta,sha256=iac7LJDMkBlPpPPzKMbIDSh2bqoxNKhYx_5nQjo5Tds,211
121
- voice_mode/frontend/.next/standalone/.next/server/app/index.html,sha256=0oGCYMBx87Qqac6p-zHL1fX15QA8_bs7iXN9IVW5o7I,5396
121
+ voice_mode/frontend/.next/standalone/.next/server/app/index.html,sha256=ZoByryVzJ0YLtI0Gp9vJqUiS8-3HG9klfcvN9F1ZRqE,5396
122
122
  voice_mode/frontend/.next/standalone/.next/server/app/index.meta,sha256=BDswoSxeaM0dEV3Vl3-2HNVKE5mS5NQhBYZcQQt5mnQ,80
123
- voice_mode/frontend/.next/standalone/.next/server/app/index.rsc,sha256=9HIIu4xVpitIFtZ3o8nQhu9YtOSDH59OaXMZ-9CW0u0,2438
124
- voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=MHgckqgSJ-hFmVzrsm6pKQflBgd-r5CCJEnS954Vsak,611922
123
+ voice_mode/frontend/.next/standalone/.next/server/app/index.rsc,sha256=LOVJ5wsK9tXEN7lEn4BimJIqHAcz4koTChzwvuhXEMc,2438
124
+ voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=TOS3oLnVkqjHf8O_TTRqPxJ-teyXgw47jTOGgN-7GcI,611920
125
125
  voice_mode/frontend/.next/standalone/.next/server/app/page.js.nft.json,sha256=6plKkaMV7NDsYDUQsMAnayayODq1vS_l6nRXRrm9Trg,1168
126
- voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js,sha256=avIOMGoipjCTGiHVWKRSzTNx4v7Wwx_7e0-sMqMdL3A,4193
127
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=mInuXrOY8WrEzB6E7SXVKx2ZwgfBQ0m1v1YaYsfg3pU,3387
126
+ voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js,sha256=uH2okYTc3-r9gDQurGlgXtRBJlmYsWVjSSE5khEdB2g,4193
127
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=XkWMVc7seDJGe1IZ61bpY6i57UjziotFqABuDOh_JEk,3387
128
128
  voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js.nft.json,sha256=7Z_Wav7koMsnepi3GignvrVRYuDbzwvKqqg84LuoSis,1195
129
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=f43IEN0-78BvMk6jWhRDsNP56olrW2I17B-Z7MCPIzk,4297
130
- voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=5FuQ9YRz0yMEe8K_30IwrtlwhIwRA_u_9Nu89KZ4v8k,121020
129
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=igh2SQ9DR1yHwQx_nKf3mX26mIhLxS5DQ1RW9Zi4z0w,4297
130
+ voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=e56HCHEeb-g74uEvKcYpCMWGykr9qM8eqxhRSF-8Nrw,121020
131
131
  voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js.nft.json,sha256=qjdiqEpb5s6iSOQsC1MI3A0_sVjbF9Eh1t1mR_VcS9o,1327
132
- voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js,sha256=f_SmkSDdccBmhGFg5nTGpffLmQ6PVzAA_zEzFtwi3Q8,66228
132
+ voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js,sha256=KCGV7MSduYAWvKgqfgIjTCcLxq262maUbCbg5XepZFA,66228
133
133
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
134
134
  voice_mode/frontend/.next/standalone/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
135
135
  voice_mode/frontend/.next/standalone/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
136
136
  voice_mode/frontend/.next/standalone/.next/server/chunks/948.js,sha256=2QNDLi5TnS9qLpgKRmsx_sJzO2vtdQJIRn124o6fjeI,57650
137
- voice_mode/frontend/.next/standalone/.next/server/chunks/994.js,sha256=KqflCcEwOF5YY9vM0DQEwOCuzNyZlhSHY3gOR-Ka4KU,95359
138
- voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=XetO3025j65PvnJvC3tGnEjZJaOWcTs9RSPwOLAAvb4,6752
139
- voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=yOwSISKf-HCowug5AuvLlc0OqIZmRNv7UZ0KI6-wwv8,1995
137
+ voice_mode/frontend/.next/standalone/.next/server/chunks/994.js,sha256=SAKb7ovZnvXvMANDV0PTWln5Vf_-JoLuhwoZDVcm-WE,95359
138
+ voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=22o6PZLPoXEVFnemcbRRbnhs9d5J5HyddIelNLKroPc,6752
139
+ voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=tzRvFGXPQOGUt6fL71Y45pbwPUseC-cJhnPMza7OgQY,1995
140
140
  voice_mode/frontend/.next/standalone/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
141
141
  voice_mode/frontend/.next/standalone/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
142
142
  voice_mode/frontend/.next/standalone/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
143
143
  voice_mode/frontend/.next/standalone/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRytU5c-NAEx-tGGNI1TP2CMldwr8xtDQYk,1932
144
144
  voice_mode/frontend/.next/standalone/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
145
145
  voice_mode/frontend/.next/standalone/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
146
- voice_mode/frontend/.next/static/Wzk1z2qG5teKcU-SpnqS6/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
147
- voice_mode/frontend/.next/static/Wzk1z2qG5teKcU-SpnqS6/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
146
+ voice_mode/frontend/.next/static/SsR9zBdw0hd2LN3Vo9tP_/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
147
+ voice_mode/frontend/.next/static/SsR9zBdw0hd2LN3Vo9tP_/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
148
148
  voice_mode/frontend/.next/static/chunks/117-40bc79a2b97edb21.js,sha256=sKMdOWIlJELukIK1QNRwH8hweTr_NgWzvc-bHWrZ9zM,123528
149
149
  voice_mode/frontend/.next/static/chunks/144d3bae-2d5f122b82426d88.js,sha256=tGa8lG7iuv-oxVEA7BdFJPmskDLIVXYnDOBb6j4_zp8,383332
150
150
  voice_mode/frontend/.next/static/chunks/471-bd4b96a33883dfa2.js,sha256=qT-fK-XMK3eAlXh2APHuRcKfG9EriUu-tXTEcNYWUp0,194375
151
151
  voice_mode/frontend/.next/static/chunks/fd9d1056-af324d327b243cf1.js,sha256=uL3flIHYWdZI4eBQ-DIus97-PdP5vRP0xE3W8uz1q4A,172834
152
152
  voice_mode/frontend/.next/static/chunks/framework-f66176bb897dc684.js,sha256=QlDVPwvHVuzi3daQoAit0df9yIdSjGcfTf6NkW13h7c,139978
153
153
  voice_mode/frontend/.next/static/chunks/main-3163eca598b76a9f.js,sha256=IwuNOgi-ik3KFA_tnaPvAfRY5q6hTp4DRK1lkjkWdwQ,116431
154
- voice_mode/frontend/.next/static/chunks/main-app-55293f39223cd65f.js,sha256=RY5UAwb8WY86tX1KoIMwc-qpsJkDUWQUoxCAVoe5BQk,461
154
+ voice_mode/frontend/.next/static/chunks/main-app-d25858d98b1d322b.js,sha256=SNzBa7Say_t2PpnbPtS0RxzCLfst4xfmQBg6oBpUf2Y,461
155
155
  voice_mode/frontend/.next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
156
156
  voice_mode/frontend/.next/static/chunks/webpack-0ea9b80f19935b70.js,sha256=1Us0m_ZxEgMEb2DAN4ePlpq9Fv7QqUxcuV2CqICEB5w,3605
157
- voice_mode/frontend/.next/static/chunks/app/layout-b625329e9ada0473.js,sha256=1Wr76OW1gCvb1SndSynBHAdwHkKhiQZj6fyMjQeV_X8,507
158
- voice_mode/frontend/.next/static/chunks/app/page-983279b94d1fda4b.js,sha256=2CB3zFx2gOycVjgGflB2kPiAoGJplWnB-iqQ9IerDFs,7666
157
+ voice_mode/frontend/.next/static/chunks/app/layout-5675f418c42e0ae3.js,sha256=5bEPJP-kTZGTf4qjaXGSYBb007hyPbX9QiEQK0SHfvI,507
158
+ voice_mode/frontend/.next/static/chunks/app/page-dbb3615cf25cdc16.js,sha256=qxr4ZM8xtolWgwICHhk5hrrfOWk6OH8O__P5AF-Knpg,7666
159
159
  voice_mode/frontend/.next/static/chunks/app/_not-found/page-5011050e402ab9c8.js,sha256=u5LYOU4LZ2HFeEcz6xZqSflSnU4WDt-TnQNu3CdcEWk,1745
160
160
  voice_mode/frontend/.next/static/chunks/pages/_app-72b849fbd24ac258.js,sha256=QN-PY1h1HDIO4K4ZYwFl6rtEeaxWCynYauVLK_oWmzE,280
161
161
  voice_mode/frontend/.next/static/chunks/pages/_error-7ba65e1336b92748.js,sha256=oxr2dz6MkKWnm3jN3fWb2RPhCHB4-JgrzVMS_wTNr_E,247
@@ -164,9 +164,9 @@ voice_mode/frontend/.next/static/media/01099be941da1820-s.woff2,sha256=ZaNN8qxUZ
164
164
  voice_mode/frontend/.next/static/media/39883d31a7792467-s.p.woff2,sha256=i_qVPOm6vZ-H4B0Mk_d5yUQR_YKsz4XRc-8J2R_QWKs,14620
165
165
  voice_mode/frontend/.next/static/media/6368404d2e8d66fe-s.woff2,sha256=2GFQ1JjbLJOSmwrIsgCHPVMSJpcx2QX2i13kJbg8IFE,4464
166
166
  voice_mode/frontend/.next/types/package.json,sha256=49WkothVGqUsWgHSoO-y4GotlxG09cXx0g3m4hgH4s0,18
167
- voice_mode/frontend/.next/types/app/layout.ts,sha256=W7oKxxPFURlwBHPEiuaS_Vg_15zMHprTj9MBrBfKjGY,3511
168
- voice_mode/frontend/.next/types/app/page.ts,sha256=H0TFxy3ibKHYqmakcsQQTnurdlu8BOlbwPiDEspineE,3499
169
- voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=3fs_Ge4yvpF5ZFawQupElt9iBBgSg9Ii6OqkaTQcfQc,8531
167
+ voice_mode/frontend/.next/types/app/layout.ts,sha256=bpB6PRQir-cCYOHdPUdrK9VPT_0n07cLN-SKl1BrMMs,3511
168
+ voice_mode/frontend/.next/types/app/page.ts,sha256=NhKL9LMcE6TNlidp8rKihwvNFNt-cb0vti5G1qS3lFw,3499
169
+ voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=aa-tonqJb4MTW7AHkBIzllR-6yMw6at9yOwOPdQvDdk,8531
170
170
  voice_mode/frontend/app/favicon.ico,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
171
171
  voice_mode/frontend/app/globals.css,sha256=yMCx8ta7sGyt40nzBTlRR644nlAGGYt73zj7e9YLgl4,362
172
172
  voice_mode/frontend/app/layout.tsx,sha256=Q0LYcf_Z8GT8zDhlWgk7XEZArp2ZS2HpB1tmv3epp68,537
@@ -201,7 +201,7 @@ voice_mode/templates/systemd/voicemode-livekit.service,sha256=hVjT4Vd0SOABXGYbp9
201
201
  voice_mode/templates/systemd/voicemode-whisper.service,sha256=aa5gIHI9xKF0M_DY6SO95QHRFhkV2JOzmFVo2U8RhN4,844
202
202
  voice_mode/tools/__init__.py,sha256=Hd8-dNoB58apt6PqMCfGHYDAeQWbarFrMRfxseJi8Jo,1069
203
203
  voice_mode/tools/configuration_management.py,sha256=N_lB2JDNe5QrbifNqh8RK_9Yv1l9Hz2Ylc5kgE8cJUM,8431
204
- voice_mode/tools/converse.py,sha256=eNzi6vVZ5BGIF7CWOE4dxnTY_StIGnLQcywmYjsBMuU,89854
204
+ voice_mode/tools/converse.py,sha256=LVFBUme9C1wx7NwtpdR9jUlI89AjIowTO-hp5Y5HFDc,94318
205
205
  voice_mode/tools/dependencies.py,sha256=V72gS_bD0pCmW_be2Hxs_cEnIoNPFKlK7rE9cLMTDGE,6670
206
206
  voice_mode/tools/devices.py,sha256=v0KV-Rix2lKZMFfVcobHiJB_6NnPAJsuZI5LXYHlgl0,10446
207
207
  voice_mode/tools/diagnostics.py,sha256=pWl9wwaBMJubBKhWOVbNIGeYet84ECVshtPok-v2pl8,2059
@@ -233,7 +233,7 @@ voice_mode/utils/services/common.py,sha256=tMzsQ8ZSmTvZdlHEuiuPX7hmX2XAc3Zbtb1vf
233
233
  voice_mode/utils/services/kokoro_helpers.py,sha256=VE3wa9cI2ZIc95ro58aaKVKdAE7DPXmZQLxml3QYbcI,1206
234
234
  voice_mode/utils/services/livekit_helpers.py,sha256=OFw0GxVIJAZE2m9dGCDZVegWD-LnMO6iSjcOUDgAA9U,3627
235
235
  voice_mode/utils/services/whisper_helpers.py,sha256=8guaPTWXS0bM289Wp-IpxQsS61Ll93dJCIyUi-ZV0Ok,8493
236
- voice_mode-2.23.0.dist-info/METADATA,sha256=w_XpLDhny-m3h6z7EBCpyyw84MddGuUr9WbzTAQuCoQ,24618
237
- voice_mode-2.23.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
238
- voice_mode-2.23.0.dist-info/entry_points.txt,sha256=hS5faHc0R5Fde3Z_uvz8u6YkRIYtvh17X8tVN90Rbro,95
239
- voice_mode-2.23.0.dist-info/RECORD,,
236
+ voice_mode-2.25.0.dist-info/METADATA,sha256=OaIGwA9fwd4LiwV_B9dZQ5r_FRE3w8dFSHhP1Qo5g6I,24618
237
+ voice_mode-2.25.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
238
+ voice_mode-2.25.0.dist-info/entry_points.txt,sha256=hS5faHc0R5Fde3Z_uvz8u6YkRIYtvh17X8tVN90Rbro,95
239
+ voice_mode-2.25.0.dist-info/RECORD,,