voice-mode 4.0.1__py3-none-any.whl → 4.2.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 (78) hide show
  1. voice_mode/__version__.py +1 -1
  2. voice_mode/cli.py +73 -0
  3. voice_mode/cli_commands/claude.py +208 -0
  4. voice_mode/cli_commands/hook.py +197 -0
  5. voice_mode/cli_commands/pronounce_commands.py +223 -0
  6. voice_mode/config.py +25 -0
  7. voice_mode/data/default_pronunciation.yaml +268 -0
  8. voice_mode/frontend/.next/BUILD_ID +1 -1
  9. voice_mode/frontend/.next/app-build-manifest.json +5 -5
  10. voice_mode/frontend/.next/build-manifest.json +3 -3
  11. voice_mode/frontend/.next/next-minimal-server.js.nft.json +1 -1
  12. voice_mode/frontend/.next/next-server.js.nft.json +1 -1
  13. voice_mode/frontend/.next/prerender-manifest.json +1 -1
  14. voice_mode/frontend/.next/required-server-files.json +1 -1
  15. voice_mode/frontend/.next/server/app/_not-found/page.js +1 -1
  16. voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  17. voice_mode/frontend/.next/server/app/_not-found.html +1 -1
  18. voice_mode/frontend/.next/server/app/_not-found.rsc +1 -1
  19. voice_mode/frontend/.next/server/app/api/connection-details/route.js +2 -2
  20. voice_mode/frontend/.next/server/app/favicon.ico/route.js +2 -2
  21. voice_mode/frontend/.next/server/app/index.html +1 -1
  22. voice_mode/frontend/.next/server/app/index.rsc +2 -2
  23. voice_mode/frontend/.next/server/app/page.js +2 -2
  24. voice_mode/frontend/.next/server/app/page_client-reference-manifest.js +1 -1
  25. voice_mode/frontend/.next/server/chunks/994.js +1 -1
  26. voice_mode/frontend/.next/server/middleware-build-manifest.js +1 -1
  27. voice_mode/frontend/.next/server/next-font-manifest.js +1 -1
  28. voice_mode/frontend/.next/server/next-font-manifest.json +1 -1
  29. voice_mode/frontend/.next/server/pages/404.html +1 -1
  30. voice_mode/frontend/.next/server/pages/500.html +1 -1
  31. voice_mode/frontend/.next/server/server-reference-manifest.json +1 -1
  32. voice_mode/frontend/.next/standalone/.next/BUILD_ID +1 -1
  33. voice_mode/frontend/.next/standalone/.next/app-build-manifest.json +5 -5
  34. voice_mode/frontend/.next/standalone/.next/build-manifest.json +3 -3
  35. voice_mode/frontend/.next/standalone/.next/prerender-manifest.json +1 -1
  36. voice_mode/frontend/.next/standalone/.next/required-server-files.json +1 -1
  37. voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  38. voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  39. voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html +1 -1
  40. voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  41. voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js +2 -2
  42. voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js +2 -2
  43. voice_mode/frontend/.next/standalone/.next/server/app/index.html +1 -1
  44. voice_mode/frontend/.next/standalone/.next/server/app/index.rsc +2 -2
  45. voice_mode/frontend/.next/standalone/.next/server/app/page.js +2 -2
  46. voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  47. voice_mode/frontend/.next/standalone/.next/server/chunks/994.js +1 -1
  48. voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  49. voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js +1 -1
  50. voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json +1 -1
  51. voice_mode/frontend/.next/standalone/.next/server/pages/404.html +1 -1
  52. voice_mode/frontend/.next/standalone/.next/server/pages/500.html +1 -1
  53. voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  54. voice_mode/frontend/.next/standalone/server.js +1 -1
  55. voice_mode/frontend/.next/static/chunks/app/layout-df4aba5e7309efec.js +1 -0
  56. voice_mode/frontend/.next/static/chunks/app/page-a87d04099ce6aeb2.js +1 -0
  57. voice_mode/frontend/.next/static/chunks/{main-app-233f6c633f73ae84.js → main-app-ca62791c49278d6d.js} +1 -1
  58. voice_mode/frontend/.next/trace +43 -43
  59. voice_mode/frontend/.next/types/app/api/connection-details/route.ts +1 -1
  60. voice_mode/frontend/.next/types/app/layout.ts +1 -1
  61. voice_mode/frontend/.next/types/app/page.ts +1 -1
  62. voice_mode/frontend/package-lock.json +3 -3
  63. voice_mode/pronounce.py +397 -0
  64. voice_mode/tools/claude_thinking.py +285 -0
  65. voice_mode/tools/converse.py +11 -0
  66. voice_mode/tools/pronounce.py +245 -0
  67. voice_mode/tools/sound_fonts/__init__.py +1 -0
  68. voice_mode/tools/sound_fonts/audio_player.py +87 -0
  69. voice_mode/tools/sound_fonts/hook_handler.py +127 -0
  70. voice_mode/tools/sound_fonts/player.py +180 -0
  71. {voice_mode-4.0.1.dist-info → voice_mode-4.2.0.dist-info}/METADATA +1 -1
  72. {voice_mode-4.0.1.dist-info → voice_mode-4.2.0.dist-info}/RECORD +76 -65
  73. voice_mode/frontend/.next/static/chunks/app/layout-0074dd8ab91cdbe0.js +0 -1
  74. voice_mode/frontend/.next/static/chunks/app/page-ae5f3aa9d9ba5993.js +0 -1
  75. /voice_mode/frontend/.next/static/{c5TIe90lGzrESrqJkkXQa → FTYM9NyY_2zq92GYxPDhS}/_buildManifest.js +0 -0
  76. /voice_mode/frontend/.next/static/{c5TIe90lGzrESrqJkkXQa → FTYM9NyY_2zq92GYxPDhS}/_ssgManifest.js +0 -0
  77. {voice_mode-4.0.1.dist-info → voice_mode-4.2.0.dist-info}/WHEEL +0 -0
  78. {voice_mode-4.0.1.dist-info → voice_mode-4.2.0.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,127 @@
1
+ """
2
+ Hook Handler for Sound Fonts
3
+
4
+ Handles parsing of Claude Code hook data and extracting relevant information
5
+ for sound playback.
6
+ """
7
+
8
+ import json
9
+ import sys
10
+ from typing import Dict, Any, Optional
11
+
12
+
13
+ def parse_claude_code_hook(hook_data: Dict[str, Any]) -> Optional[Dict[str, Any]]:
14
+ """
15
+ Parse Claude Code hook data to extract sound-relevant information.
16
+
17
+ Args:
18
+ hook_data: Raw hook data from Claude Code
19
+
20
+ Returns:
21
+ Dict with tool_name, action, subagent_type, and metadata
22
+ """
23
+ # Extract tool name
24
+ tool_name = hook_data.get("tool_name")
25
+ if not tool_name:
26
+ return None
27
+
28
+ # For PreToolUse hooks, action is "start"
29
+ # For PostToolUse hooks, action is "end"
30
+ # We'll assume "start" if not specified
31
+ action = hook_data.get("action", "start")
32
+
33
+ # Extract subagent_type from tool_input for Task calls
34
+ subagent_type = None
35
+ tool_input = hook_data.get("tool_input", {})
36
+ if isinstance(tool_input, dict):
37
+ subagent_type = tool_input.get("subagent_type")
38
+
39
+ # Extract any additional metadata
40
+ metadata = {
41
+ "session_id": hook_data.get("session_id"),
42
+ "cwd": hook_data.get("cwd"),
43
+ "timestamp": hook_data.get("timestamp"),
44
+ }
45
+
46
+ return {
47
+ "tool_name": tool_name,
48
+ "action": action,
49
+ "subagent_type": subagent_type,
50
+ "metadata": metadata
51
+ }
52
+
53
+
54
+ def read_hook_data_from_stdin() -> Optional[Dict[str, Any]]:
55
+ """
56
+ Read hook data from stdin (JSON format).
57
+
58
+ Returns:
59
+ Parsed hook data or None if error
60
+ """
61
+ try:
62
+ return json.load(sys.stdin)
63
+ except (json.JSONDecodeError, EOFError):
64
+ return None
65
+
66
+
67
+ def parse_hook_arguments(args: list) -> Optional[Dict[str, Any]]:
68
+ """
69
+ Parse hook arguments from command line.
70
+
71
+ Expected formats:
72
+ - JSON string as single argument
73
+ - Individual arguments: tool_name action [subagent_type] [metadata_json]
74
+ """
75
+ if len(args) == 1:
76
+ # Single JSON argument
77
+ try:
78
+ return json.loads(args[0])
79
+ except json.JSONDecodeError:
80
+ return None
81
+
82
+ # Individual arguments
83
+ if len(args) < 2:
84
+ return None
85
+
86
+ hook_data = {
87
+ "tool_name": args[0],
88
+ "action": args[1]
89
+ }
90
+
91
+ if len(args) > 2:
92
+ hook_data["subagent_type"] = args[2]
93
+
94
+ if len(args) > 3:
95
+ try:
96
+ hook_data["metadata"] = json.loads(args[3])
97
+ except:
98
+ hook_data["metadata"] = {}
99
+
100
+ return hook_data
101
+
102
+
103
+ def extract_subagent_from_metadata(metadata: Dict[str, Any]) -> Optional[str]:
104
+ """
105
+ Extract subagent_type from Claude Code hook metadata.
106
+
107
+ For Task tool calls, the subagent_type might be in various places
108
+ depending on how Claude Code structures the hook data.
109
+ """
110
+ if not metadata:
111
+ return None
112
+
113
+ # Direct subagent_type field
114
+ if "subagent_type" in metadata:
115
+ return metadata["subagent_type"]
116
+
117
+ # Look in parameters
118
+ params = metadata.get("parameters", {})
119
+ if "subagent_type" in params:
120
+ return params["subagent_type"]
121
+
122
+ # Look in tool_args or similar
123
+ tool_args = metadata.get("tool_args", {})
124
+ if "subagent_type" in tool_args:
125
+ return tool_args["subagent_type"]
126
+
127
+ return None
@@ -0,0 +1,180 @@
1
+ """
2
+ Sound Fonts Audio Player
3
+
4
+ A lightweight audio player for Sound Fonts that can play audio file slices
5
+ with specified start and end points. Supports WAV and MP3 files.
6
+ """
7
+
8
+ import os
9
+ import sys
10
+ import json
11
+ import subprocess
12
+ from pathlib import Path
13
+ from typing import Dict, Any, Optional
14
+
15
+
16
+ class AudioPlayer:
17
+ def __init__(self, voicemode_home: str = None):
18
+ self.voicemode_home = Path(voicemode_home or os.path.expanduser("~/.voicemode"))
19
+
20
+ def play_audio_slice(self, file_path: str, start: float = 0.0, end: Optional[float] = None, volume: float = 1.0):
21
+ """
22
+ Play a slice of an audio file using ffmpeg/ffplay
23
+
24
+ Args:
25
+ file_path: Path to audio file
26
+ start: Start time in seconds
27
+ end: End time in seconds (None for end of file)
28
+ volume: Volume multiplier (0.0 to 1.0)
29
+ """
30
+ if not os.path.exists(file_path):
31
+ print(f"Error: Audio file not found: {file_path}", file=sys.stderr)
32
+ return False
33
+
34
+ # Build ffplay command for non-blocking audio playback
35
+ cmd = [
36
+ "ffplay",
37
+ "-nodisp", # No video display
38
+ "-autoexit", # Exit when playback ends
39
+ "-loglevel", "quiet", # Suppress output
40
+ "-ss", str(start), # Start time
41
+ ]
42
+
43
+ if end is not None:
44
+ duration = end - start
45
+ cmd.extend(["-t", str(duration)]) # Duration to play
46
+
47
+ if volume != 1.0:
48
+ cmd.extend(["-af", f"volume={volume}"]) # Volume filter
49
+
50
+ cmd.append(file_path)
51
+
52
+ try:
53
+ # Run in background (non-blocking)
54
+ subprocess.Popen(cmd, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
55
+ return True
56
+ except Exception as e:
57
+ print(f"Error playing audio: {e}", file=sys.stderr)
58
+ return False
59
+
60
+ def load_sound_font(self, font_name: str = None) -> Optional[Dict[str, Any]]:
61
+ """Load Sound Font configuration"""
62
+ if font_name:
63
+ config_path = self.voicemode_home / "sound-fonts" / font_name / "config.json"
64
+ else:
65
+ # Try to find active sound font from settings
66
+ settings_path = self.voicemode_home / "settings.json"
67
+ if settings_path.exists():
68
+ try:
69
+ with open(settings_path) as f:
70
+ settings = json.load(f)
71
+ font_name = settings.get("sound_font")
72
+ if font_name:
73
+ config_path = self.voicemode_home / "sound-fonts" / font_name / "config.json"
74
+ else:
75
+ return None
76
+ except:
77
+ return None
78
+ else:
79
+ return None
80
+
81
+ if not config_path.exists():
82
+ return None
83
+
84
+ try:
85
+ with open(config_path) as f:
86
+ return json.load(f)
87
+ except Exception as e:
88
+ print(f"Error loading sound font config: {e}", file=sys.stderr)
89
+ return None
90
+
91
+ def resolve_audio_path(self, config: Dict[str, Any], file_name: str) -> str:
92
+ """Resolve audio file path relative to sound font directory"""
93
+ font_dir = Path(config.get("base_path", self.voicemode_home / "sound-fonts" / config["name"]))
94
+ return str(font_dir / file_name)
95
+
96
+ def play_sound_for_event(self, tool_name: str, action: str, subagent_type: str = None, metadata: Dict[str, Any] = None):
97
+ """
98
+ Play sound for a specific tool event based on Sound Font configuration
99
+
100
+ Args:
101
+ tool_name: Name of the tool (e.g., "Task", "Bash", "Read")
102
+ action: Event action ("start" or "end")
103
+ subagent_type: For Task tool, the subagent (e.g., "mama-bear")
104
+ metadata: Additional event metadata
105
+ """
106
+ config = self.load_sound_font()
107
+ if not config:
108
+ return False
109
+
110
+ sounds = config.get("sounds", {})
111
+
112
+ # Look up sound configuration
113
+ tool_config = sounds.get(tool_name)
114
+ if not tool_config:
115
+ tool_config = sounds.get("default", {})
116
+ if not tool_config:
117
+ return False
118
+
119
+ # Handle subagent_type for Task tool
120
+ if subagent_type and "subagent_type" in tool_config:
121
+ subagent_config = tool_config["subagent_type"].get(subagent_type)
122
+ if subagent_config:
123
+ sound_config = subagent_config.get(action)
124
+ else:
125
+ sound_config = tool_config.get("default", {}).get(action)
126
+ else:
127
+ # For Task tool without subagent_type, use default sounds
128
+ if tool_name == "Task" and "default" in tool_config:
129
+ sound_config = tool_config["default"].get(action)
130
+ else:
131
+ sound_config = tool_config.get(action)
132
+
133
+ if not sound_config:
134
+ return False
135
+
136
+ # Extract sound parameters
137
+ file_name = sound_config.get("file")
138
+ if not file_name:
139
+ return False
140
+
141
+ file_path = self.resolve_audio_path(config, file_name)
142
+ start = sound_config.get("start", 0.0)
143
+ end = sound_config.get("end")
144
+ volume = sound_config.get("volume", 1.0)
145
+
146
+ # Log the event
147
+ self.log_sound_event(tool_name, action, subagent_type, sound_config)
148
+
149
+ return self.play_audio_slice(file_path, start, end, volume)
150
+
151
+ def log_sound_event(self, tool_name: str, action: str, subagent_type: str = None, sound_config: Dict[str, Any] = None):
152
+ """Log sound events in VoiceMode format"""
153
+ import time
154
+
155
+ timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
156
+
157
+ log_entry = {
158
+ "timestamp": timestamp,
159
+ "event": "sound_fonts_play",
160
+ "tool_name": tool_name,
161
+ "action": action,
162
+ "subagent_type": subagent_type,
163
+ "file": sound_config.get("file") if sound_config else None,
164
+ "start": sound_config.get("start") if sound_config else None,
165
+ "end": sound_config.get("end") if sound_config else None,
166
+ "volume": sound_config.get("volume") if sound_config else None
167
+ }
168
+
169
+ # Write to VoiceMode logs directory
170
+ log_file = self.voicemode_home / "logs" / "sound-fonts.log"
171
+ log_file.parent.mkdir(exist_ok=True)
172
+
173
+ with open(log_file, "a") as f:
174
+ f.write(json.dumps(log_entry) + "\n")
175
+
176
+ # Also print to stderr for debugging
177
+ print(f"[SoundFonts] {timestamp} - Playing {action} sound for {tool_name}" +
178
+ (f" ({subagent_type})" if subagent_type else "") +
179
+ f": {sound_config.get('file')}[{sound_config.get('start')}-{sound_config.get('end')}]" if sound_config else "",
180
+ file=sys.stderr)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-mode
3
- Version: 4.0.1
3
+ Version: 4.2.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,10 +1,11 @@
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=g5UKUSg6QuIQ6eGu-Eoki0fR2YX78w9nRiKenBJdTzQ,100
4
- voice_mode/cli.py,sha256=LMaHiFoT69mrjb4cqw_IOH8hmEdnYp2YvW0qfxkZCU4,71351
5
- voice_mode/config.py,sha256=WKKffIiF1pdQBFud0m9pTdneFRUHNofOpQPc4FQFwLY,31830
3
+ voice_mode/__version__.py,sha256=WlvjMg_WVRy8aHqiKjTebaoG9eZTW83Eg44TduxZNg4,100
4
+ voice_mode/cli.py,sha256=tK0yj2xuuy6Yl28Pd00YvA6bQZQoCeiF3Hze7ucU3q8,74012
5
+ voice_mode/config.py,sha256=YoxNLe6bNkV1UShl7ny0ELr7bauUmb9VhFK4NOYhHUU,32785
6
6
  voice_mode/conversation_logger.py,sha256=Nar92xabhaVmMKdZdLmgoYckK9fGAVVYWdass3-EI1I,9363
7
7
  voice_mode/core.py,sha256=WACixDHS23UMhmBJKN2zgDqeWtpAdXHOSduDc3fmOio,28452
8
+ voice_mode/pronounce.py,sha256=D9hKP8Op5PZMn9kalIifNcg3GMBIJOemgnhHGOGQSnU,13752
8
9
  voice_mode/provider_discovery.py,sha256=roELfldoo7s-_1XxJF-vb9BOxMmVRpYlwAX3EnTSlcQ,15729
9
10
  voice_mode/providers.py,sha256=RFFlBufQUA9lhAS59nMYA3yr2GVyNEDSeKHBoosBYsA,11959
10
11
  voice_mode/server.py,sha256=IhdTtraP51UlmN_yKDAk_ZBBxtkDOEdBV6B4olu7uVA,3044
@@ -14,8 +15,12 @@ voice_mode/statistics.py,sha256=ckssYzOJMMgCfmmGNlCRhX4o9y0LWN9Gt42WlEUI3DE,1578
14
15
  voice_mode/streaming.py,sha256=AP0dPt8jAGnM_i3qhtPe4334EBQryWxOJ6NPt48tHvE,21744
15
16
  voice_mode/version.py,sha256=rgv7tThj3fBO006bhff3iz_TlfE5uQS4Gws-9xf8YIc,2452
16
17
  voice_mode/cli_commands/__init__.py,sha256=qaIkE-dtA0_s400BfX7h6IIoFQlNrXwGLbuHRhGUjWA,32
18
+ voice_mode/cli_commands/claude.py,sha256=Y2RekhRmo2EPbOFlo-Nt1iS-TZkISQWVGy6ekPnp1IE,7897
17
19
  voice_mode/cli_commands/exchanges.py,sha256=R8k_MtiZmDG7ST974MoDTkUKgvGgLNESzTjg2dvZRoY,16828
20
+ voice_mode/cli_commands/hook.py,sha256=isBr5hYG3_2RCExWESfeMz-ceWpl4wmm0bipubIirQE,6771
21
+ voice_mode/cli_commands/pronounce_commands.py,sha256=uznL2OYGc-asQGSLciHo--o-nyuQV-ZS8ZMoBjmD6o0,7941
18
22
  voice_mode/cli_commands/transcribe.py,sha256=z5R8_66hRhNR-9vBWTj5gkPgbf6xV7dCxE0fpASUSJ8,4200
23
+ voice_mode/data/default_pronunciation.yaml,sha256=LD3TRi2R4A9h8CG5sg9tqF-fLgpMdy7je4A2irLWXY0,6048
19
24
  voice_mode/data/versions.json,sha256=84CR9_GOFEIlBouznSSIoZX7kKY_qZt5aupUgsYnvKs,1166
20
25
  voice_mode/exchanges/__init__.py,sha256=2rNsolj3FzY-3Xes6q_J6a-Eo6oTRWsl8Mu1VmJKeAE,734
21
26
  voice_mode/exchanges/conversations.py,sha256=cKRL-n212iFZ8PjPXTP1IBg62ESSU7NL6e-rC77o9v8,9519
@@ -27,64 +32,64 @@ voice_mode/exchanges/stats.py,sha256=UVnJnVuqmd64T_iqBLVLPjTIDoyZwRg-MZUFJMHHWxg
27
32
  voice_mode/frontend/README.md,sha256=uosvWgNiWL_sP9liv-wnDNdPmJ3oFiLstXygxyzcN7A,2131
28
33
  voice_mode/frontend/next-env.d.ts,sha256=ndnWQs24fU1bMXMhfgxFQps-R6b1z1-w6tbGROxf7QE,228
29
34
  voice_mode/frontend/next.config.mjs,sha256=5kqiwwjpFblS_IHlnDJh7ELk_3rldB6pcSXIbrkytpQ,767
30
- voice_mode/frontend/package-lock.json,sha256=uh0Z4iayt0BPOP-ne-DrOXxalMd3BVDqhFp3Fg5HrPE,143483
35
+ voice_mode/frontend/package-lock.json,sha256=Fi_sQCUvxVUHdckSUWsMgXg-a67tCAM5dD_CHKhbXDE,143483
31
36
  voice_mode/frontend/package.json,sha256=BUOh3UiaHq1D0Bww-jy2EjhOi-47rjOipeUqXONJndo,1150
32
37
  voice_mode/frontend/pnpm-lock.yaml,sha256=DSl1H3fb4tNVrHjsc5HbflJJIr95erkADNeUoFY21x4,127796
33
38
  voice_mode/frontend/postcss.config.mjs,sha256=76ZcZeF9UdWFcO3OnXArBgT99qm422Wvrtjwda-IZ8c,157
34
39
  voice_mode/frontend/tailwind.config.ts,sha256=w0mWCjy3kwryNcqgub24YLbmd2V9EvOmWSYHmsFdpkY,264
35
40
  voice_mode/frontend/tsconfig.json,sha256=VCAvHW01ulHD2uoyv2fo2iRWjsDLDDQfoLXtLOsXTy0,574
36
- voice_mode/frontend/.next/BUILD_ID,sha256=hkj3AomQp6V1HKjt46tkaxUqlLxWlRDGG2jgBBJbpvU,21
37
- voice_mode/frontend/.next/app-build-manifest.json,sha256=-v91RY6wUPfcgocETWCMfreibVC3NVTF6N0yppPB3Ks,1010
41
+ voice_mode/frontend/.next/BUILD_ID,sha256=vHN0uslqKuPSEVDGTcqH8--hUSC4Xtwzr1EfmJB0UXc,21
42
+ voice_mode/frontend/.next/app-build-manifest.json,sha256=wuKYnVP9YiriIyr6JxgfPgHfGqZoSiOEGHg0vq4E2xU,1010
38
43
  voice_mode/frontend/.next/app-path-routes-manifest.json,sha256=-WXlpEHFoCBUDPfxzUJleLsfZiEUU-rU0hRMZ8AVIJI,140
39
- voice_mode/frontend/.next/build-manifest.json,sha256=Bi57zRq-v4nH1D7FGvgm5BDZ7Sk_qCkSTt6wzOVHLZk,968
44
+ voice_mode/frontend/.next/build-manifest.json,sha256=6Ndga_rEiBC3muU3yGaIe_YKxN7stN14uXndAMIDF2I,968
40
45
  voice_mode/frontend/.next/export-marker.json,sha256=ALjrM5QMj5hmGX14xIc2wIFDfLaFKlK3n1wQpwjMagI,94
41
46
  voice_mode/frontend/.next/images-manifest.json,sha256=Z1eB8ppSn86wfAon69Z5DSKbg7IoIvyGB8uCu88xGjs,511
42
- voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=scQyKcK_MstJdHIpdt5rZOBtLLH4N6vF4y3YAXjx5O4,7314
43
- voice_mode/frontend/.next/next-server.js.nft.json,sha256=WxGTe7mImjiiablvfA3Ua_hkU3yutxVd-XHWq3byCpI,109011
47
+ voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=14v6YWwa4v-jwaP3VBOmggVC5dRFU-HXIJsd_3WDErg,7314
48
+ voice_mode/frontend/.next/next-server.js.nft.json,sha256=L4y4F-XXHYnxuUf6IuaPw0_y6scunbM8UE16qT-wfUo,109011
44
49
  voice_mode/frontend/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
45
- voice_mode/frontend/.next/prerender-manifest.json,sha256=gJxvitpD92_Bb_sZ6kRicSnUn-nEC4RCcrsLN6CywwE,959
50
+ voice_mode/frontend/.next/prerender-manifest.json,sha256=-jWMhBsyXzGnMpJu1wTLjmYduNzUKDPWqRh-maaEApg,959
46
51
  voice_mode/frontend/.next/react-loadable-manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
47
- voice_mode/frontend/.next/required-server-files.json,sha256=r2UqLxpMbcRPC2FAr9ElDhTezZq50hworAu-HV4Cws0,4748
52
+ voice_mode/frontend/.next/required-server-files.json,sha256=uLbifd3tpT2qaPKXS7ubNmQYWmGBc020qjSfpzUk-pY,4748
48
53
  voice_mode/frontend/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
49
- voice_mode/frontend/.next/trace,sha256=4NmhoDMqNknhnpHU49VCTrOM8HvPn_A3WhunmjA8Tz8,894254
54
+ voice_mode/frontend/.next/trace,sha256=zYCh2J9Rw8ycb40GI4_qphfJcde--x2bXIWyQBMKoHQ,898385
50
55
  voice_mode/frontend/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
51
56
  voice_mode/frontend/.next/server/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
52
57
  voice_mode/frontend/.next/server/functions-config-manifest.json,sha256=CUXUfXux-dC5WRXm4vr6xa3f-RKEsEV1aG-hO3KK0CE,56
53
58
  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=DzxQYGUfM4WY5JRHoRrrUk0lOFb-V-eAHAjuIdYtuUQ,888
59
+ voice_mode/frontend/.next/server/middleware-build-manifest.js,sha256=WE8FDi9NODeGrmOugK9WfcjbasmY60ZovFK4IpD_v-c,888
55
60
  voice_mode/frontend/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
56
61
  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=qqzp4Qa3tlqfOXcOnsvsFSma1kzqGJPgPcGg3cJSvWA,228
58
- voice_mode/frontend/.next/server/next-font-manifest.json,sha256=M2jfqMh-gV2nlOKdlH2zi9ubqV5FUAZbETG44hrywuw,199
62
+ voice_mode/frontend/.next/server/next-font-manifest.js,sha256=z9Pc5AHUHiQAAjd2FQCxtsohCL11CH4wuZdoi7UA7GQ,228
63
+ voice_mode/frontend/.next/server/next-font-manifest.json,sha256=R1kGWfSOMk-lqh7e4hGFDU-8mXbvKFdv1BflogxO0Bc,199
59
64
  voice_mode/frontend/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
60
65
  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=U_CViIKawPE2E5hDpO1GtAGsMkxqVBoXI22b2wP5pjU,84
66
+ voice_mode/frontend/.next/server/server-reference-manifest.json,sha256=NCcwsFcy5SQK9TiOYoCCFZE5ApxJs6il6Ncb0uWlx6w,84
62
67
  voice_mode/frontend/.next/server/webpack-runtime.js,sha256=mmuyol21D9il2KNetWeEUG5OBu3z05WsphIyIbwvads,1469
63
- voice_mode/frontend/.next/server/app/_not-found.html,sha256=ZlhtmIhTKvhZ3qm5YpwSFpMVO6TsjnUJ3Kn3vb9-HsM,6752
68
+ voice_mode/frontend/.next/server/app/_not-found.html,sha256=xccZlHnbgpQqkq29glHPT2jaS1LzUzFSp92MXyZXuhY,6752
64
69
  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=NMYW4-O_k1KXFq43Li_0-pI5XpufnQ2Fo1Ii6yZtuYU,3621
70
+ voice_mode/frontend/.next/server/app/_not-found.rsc,sha256=EsgBHyoMDmwwZNMpETLtTVSQRhCOVt6K3MUTM3Uz9mE,3621
66
71
  voice_mode/frontend/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
67
72
  voice_mode/frontend/.next/server/app/favicon.ico.meta,sha256=iac7LJDMkBlPpPPzKMbIDSh2bqoxNKhYx_5nQjo5Tds,211
68
- voice_mode/frontend/.next/server/app/index.html,sha256=nfFnR67jvwAFZz2nfTPQK8AbPP-QNU7n4AXkszhSvv8,5396
73
+ voice_mode/frontend/.next/server/app/index.html,sha256=sVLKx06gld-yjkYh-qb9kH46bMWP74nde1oKiotSmDo,5396
69
74
  voice_mode/frontend/.next/server/app/index.meta,sha256=BDswoSxeaM0dEV3Vl3-2HNVKE5mS5NQhBYZcQQt5mnQ,80
70
- voice_mode/frontend/.next/server/app/index.rsc,sha256=i52xvII_wdZGtxwX6q5Nwlw8nP3Xcd30yo0DnRgFhl0,2438
71
- voice_mode/frontend/.next/server/app/page.js,sha256=Xwp6CiMoWK5xpUj14bpJ7JgIGkVbHzajzYL-NT7-qqI,611916
75
+ voice_mode/frontend/.next/server/app/index.rsc,sha256=gFixSNWH5gleO0lb6C4rBRLwkNyC7jgalq2yqxfJonY,2438
76
+ voice_mode/frontend/.next/server/app/page.js,sha256=LK-GIQy3hONCCI1XFBYuWkdRxST0iHUBo6bzFIlrO-0,611918
72
77
  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=8Jl45trZe5qJcYK-uLpigKa9RAAYA4sZggfXGwkyrhE,4174
74
- voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=D9DtPjU80BZflMYAGKDmVG0vc1JqTCmmxNKfwYZmG0Q,3384
78
+ voice_mode/frontend/.next/server/app/page_client-reference-manifest.js,sha256=eWUzQmA44qYtNfe45Hfx-Vwbq8vO2hcLij7gaIv6STc,4174
79
+ voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=4gsGkKigvYlXNaaZCSp_5C6gwqugyUaefRo4SDVjVNE,3386
75
80
  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=1Uu3VdyT2XK88gNA9wk8cQYhGQexxn3p-wnJ6yE_GAM,4277
77
- voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=uJf_34BlZYQqMrRuA8WapykOJSmGOwij93yvbVWDCzk,121019
81
+ voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=dX5z97OX-454_3ukA6aq01AaIiayZD7zMbbnpWjGoaU,4277
82
+ voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=Ov1TjfNJbp7v0WywXNYVv-bFFqQ1J-VWP44wqbxtsn0,121019
78
83
  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=sEtY3QpWt3VK20k0KeLUFxtHMymG0dnzoDStyBydTnc,66227
84
+ voice_mode/frontend/.next/server/app/favicon.ico/route.js,sha256=OYTjLP8mTJDftpMy4INRour4uCQ6ogxbxjttm2KBxlI,66227
80
85
  voice_mode/frontend/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
81
86
  voice_mode/frontend/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
82
87
  voice_mode/frontend/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
83
88
  voice_mode/frontend/.next/server/chunks/948.js,sha256=2QNDLi5TnS9qLpgKRmsx_sJzO2vtdQJIRn124o6fjeI,57650
84
- voice_mode/frontend/.next/server/chunks/994.js,sha256=NV_n-WqvYO1qjW3dau_7sD60UxgYKcj_H2aGSSDNHjY,95353
89
+ voice_mode/frontend/.next/server/chunks/994.js,sha256=i128XwWHMZmlhPHLV76BJNAGgLDg1ALjdvY54udilxc,95353
85
90
  voice_mode/frontend/.next/server/chunks/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
86
- voice_mode/frontend/.next/server/pages/404.html,sha256=ZlhtmIhTKvhZ3qm5YpwSFpMVO6TsjnUJ3Kn3vb9-HsM,6752
87
- voice_mode/frontend/.next/server/pages/500.html,sha256=jBZzDE2jLVZ8hQbqvF6aKaLqmmqqda6GKCfO2xnXuJA,1995
91
+ voice_mode/frontend/.next/server/pages/404.html,sha256=xccZlHnbgpQqkq29glHPT2jaS1LzUzFSp92MXyZXuhY,6752
92
+ voice_mode/frontend/.next/server/pages/500.html,sha256=lhuIgX5ueaPMyOLPxruyxi-fFqfKEC6PsCWs6xtv6D8,1995
88
93
  voice_mode/frontend/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
89
94
  voice_mode/frontend/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
90
95
  voice_mode/frontend/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
@@ -92,70 +97,70 @@ voice_mode/frontend/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRyt
92
97
  voice_mode/frontend/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
93
98
  voice_mode/frontend/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
94
99
  voice_mode/frontend/.next/standalone/package.json,sha256=BUOh3UiaHq1D0Bww-jy2EjhOi-47rjOipeUqXONJndo,1150
95
- voice_mode/frontend/.next/standalone/server.js,sha256=rPGrLFawAN0qFD1ku0YJ4lDpXpd11UHxONEFFSdQrVQ,4741
96
- voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=hkj3AomQp6V1HKjt46tkaxUqlLxWlRDGG2jgBBJbpvU,21
97
- voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=-v91RY6wUPfcgocETWCMfreibVC3NVTF6N0yppPB3Ks,1010
100
+ voice_mode/frontend/.next/standalone/server.js,sha256=koikyG9G_9fSNhDi9Qu7MD5zzdYjuSmdbyeWT-v9eJA,4741
101
+ voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=vHN0uslqKuPSEVDGTcqH8--hUSC4Xtwzr1EfmJB0UXc,21
102
+ voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=wuKYnVP9YiriIyr6JxgfPgHfGqZoSiOEGHg0vq4E2xU,1010
98
103
  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=Bi57zRq-v4nH1D7FGvgm5BDZ7Sk_qCkSTt6wzOVHLZk,968
104
+ voice_mode/frontend/.next/standalone/.next/build-manifest.json,sha256=6Ndga_rEiBC3muU3yGaIe_YKxN7stN14uXndAMIDF2I,968
100
105
  voice_mode/frontend/.next/standalone/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
101
- voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=gJxvitpD92_Bb_sZ6kRicSnUn-nEC4RCcrsLN6CywwE,959
106
+ voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=-jWMhBsyXzGnMpJu1wTLjmYduNzUKDPWqRh-maaEApg,959
102
107
  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=r2UqLxpMbcRPC2FAr9ElDhTezZq50hworAu-HV4Cws0,4748
108
+ voice_mode/frontend/.next/standalone/.next/required-server-files.json,sha256=uLbifd3tpT2qaPKXS7ubNmQYWmGBc020qjSfpzUk-pY,4748
104
109
  voice_mode/frontend/.next/standalone/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
105
110
  voice_mode/frontend/.next/standalone/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
106
111
  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=DzxQYGUfM4WY5JRHoRrrUk0lOFb-V-eAHAjuIdYtuUQ,888
112
+ voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js,sha256=WE8FDi9NODeGrmOugK9WfcjbasmY60ZovFK4IpD_v-c,888
108
113
  voice_mode/frontend/.next/standalone/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
109
114
  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=qqzp4Qa3tlqfOXcOnsvsFSma1kzqGJPgPcGg3cJSvWA,228
111
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=M2jfqMh-gV2nlOKdlH2zi9ubqV5FUAZbETG44hrywuw,199
115
+ voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js,sha256=z9Pc5AHUHiQAAjd2FQCxtsohCL11CH4wuZdoi7UA7GQ,228
116
+ voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=R1kGWfSOMk-lqh7e4hGFDU-8mXbvKFdv1BflogxO0Bc,199
112
117
  voice_mode/frontend/.next/standalone/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
113
118
  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=U_CViIKawPE2E5hDpO1GtAGsMkxqVBoXI22b2wP5pjU,84
119
+ voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json,sha256=NCcwsFcy5SQK9TiOYoCCFZE5ApxJs6il6Ncb0uWlx6w,84
115
120
  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=ZlhtmIhTKvhZ3qm5YpwSFpMVO6TsjnUJ3Kn3vb9-HsM,6752
121
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html,sha256=xccZlHnbgpQqkq29glHPT2jaS1LzUzFSp92MXyZXuhY,6752
117
122
  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=NMYW4-O_k1KXFq43Li_0-pI5XpufnQ2Fo1Ii6yZtuYU,3621
123
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc,sha256=EsgBHyoMDmwwZNMpETLtTVSQRhCOVt6K3MUTM3Uz9mE,3621
119
124
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
120
125
  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=nfFnR67jvwAFZz2nfTPQK8AbPP-QNU7n4AXkszhSvv8,5396
126
+ voice_mode/frontend/.next/standalone/.next/server/app/index.html,sha256=sVLKx06gld-yjkYh-qb9kH46bMWP74nde1oKiotSmDo,5396
122
127
  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=i52xvII_wdZGtxwX6q5Nwlw8nP3Xcd30yo0DnRgFhl0,2438
124
- voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=Xwp6CiMoWK5xpUj14bpJ7JgIGkVbHzajzYL-NT7-qqI,611916
128
+ voice_mode/frontend/.next/standalone/.next/server/app/index.rsc,sha256=gFixSNWH5gleO0lb6C4rBRLwkNyC7jgalq2yqxfJonY,2438
129
+ voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=LK-GIQy3hONCCI1XFBYuWkdRxST0iHUBo6bzFIlrO-0,611918
125
130
  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=8Jl45trZe5qJcYK-uLpigKa9RAAYA4sZggfXGwkyrhE,4174
127
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=D9DtPjU80BZflMYAGKDmVG0vc1JqTCmmxNKfwYZmG0Q,3384
131
+ voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js,sha256=eWUzQmA44qYtNfe45Hfx-Vwbq8vO2hcLij7gaIv6STc,4174
132
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=4gsGkKigvYlXNaaZCSp_5C6gwqugyUaefRo4SDVjVNE,3386
128
133
  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=1Uu3VdyT2XK88gNA9wk8cQYhGQexxn3p-wnJ6yE_GAM,4277
130
- voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=uJf_34BlZYQqMrRuA8WapykOJSmGOwij93yvbVWDCzk,121019
134
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=dX5z97OX-454_3ukA6aq01AaIiayZD7zMbbnpWjGoaU,4277
135
+ voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=Ov1TjfNJbp7v0WywXNYVv-bFFqQ1J-VWP44wqbxtsn0,121019
131
136
  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=sEtY3QpWt3VK20k0KeLUFxtHMymG0dnzoDStyBydTnc,66227
137
+ voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js,sha256=OYTjLP8mTJDftpMy4INRour4uCQ6ogxbxjttm2KBxlI,66227
133
138
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
134
139
  voice_mode/frontend/.next/standalone/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
135
140
  voice_mode/frontend/.next/standalone/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
136
141
  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=NV_n-WqvYO1qjW3dau_7sD60UxgYKcj_H2aGSSDNHjY,95353
138
- voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=ZlhtmIhTKvhZ3qm5YpwSFpMVO6TsjnUJ3Kn3vb9-HsM,6752
139
- voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=jBZzDE2jLVZ8hQbqvF6aKaLqmmqqda6GKCfO2xnXuJA,1995
142
+ voice_mode/frontend/.next/standalone/.next/server/chunks/994.js,sha256=i128XwWHMZmlhPHLV76BJNAGgLDg1ALjdvY54udilxc,95353
143
+ voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=xccZlHnbgpQqkq29glHPT2jaS1LzUzFSp92MXyZXuhY,6752
144
+ voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=lhuIgX5ueaPMyOLPxruyxi-fFqfKEC6PsCWs6xtv6D8,1995
140
145
  voice_mode/frontend/.next/standalone/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
141
146
  voice_mode/frontend/.next/standalone/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
142
147
  voice_mode/frontend/.next/standalone/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
143
148
  voice_mode/frontend/.next/standalone/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRytU5c-NAEx-tGGNI1TP2CMldwr8xtDQYk,1932
144
149
  voice_mode/frontend/.next/standalone/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
145
150
  voice_mode/frontend/.next/standalone/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
146
- voice_mode/frontend/.next/static/c5TIe90lGzrESrqJkkXQa/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
147
- voice_mode/frontend/.next/static/c5TIe90lGzrESrqJkkXQa/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
151
+ voice_mode/frontend/.next/static/FTYM9NyY_2zq92GYxPDhS/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
152
+ voice_mode/frontend/.next/static/FTYM9NyY_2zq92GYxPDhS/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
148
153
  voice_mode/frontend/.next/static/chunks/117-40bc79a2b97edb21.js,sha256=sKMdOWIlJELukIK1QNRwH8hweTr_NgWzvc-bHWrZ9zM,123528
149
154
  voice_mode/frontend/.next/static/chunks/144d3bae-2d5f122b82426d88.js,sha256=tGa8lG7iuv-oxVEA7BdFJPmskDLIVXYnDOBb6j4_zp8,383332
150
155
  voice_mode/frontend/.next/static/chunks/471-bd4b96a33883dfa2.js,sha256=qT-fK-XMK3eAlXh2APHuRcKfG9EriUu-tXTEcNYWUp0,194375
151
156
  voice_mode/frontend/.next/static/chunks/fd9d1056-af324d327b243cf1.js,sha256=uL3flIHYWdZI4eBQ-DIus97-PdP5vRP0xE3W8uz1q4A,172834
152
157
  voice_mode/frontend/.next/static/chunks/framework-f66176bb897dc684.js,sha256=QlDVPwvHVuzi3daQoAit0df9yIdSjGcfTf6NkW13h7c,139978
153
158
  voice_mode/frontend/.next/static/chunks/main-3163eca598b76a9f.js,sha256=IwuNOgi-ik3KFA_tnaPvAfRY5q6hTp4DRK1lkjkWdwQ,116431
154
- voice_mode/frontend/.next/static/chunks/main-app-233f6c633f73ae84.js,sha256=JyCE48tBhBjzeDStFAfZVAROjhMv00k2_bRWltmsRdc,461
159
+ voice_mode/frontend/.next/static/chunks/main-app-ca62791c49278d6d.js,sha256=a01jpDRHF-pDaoSt8U_PiFMA79zCGVH2LsQjm0TbsvI,461
155
160
  voice_mode/frontend/.next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
156
161
  voice_mode/frontend/.next/static/chunks/webpack-0ea9b80f19935b70.js,sha256=1Us0m_ZxEgMEb2DAN4ePlpq9Fv7QqUxcuV2CqICEB5w,3605
157
- voice_mode/frontend/.next/static/chunks/app/layout-0074dd8ab91cdbe0.js,sha256=--geBHCU4zkZLTwc5197Ymbte6Y5RFSRT2LBKTWe6gU,507
158
- voice_mode/frontend/.next/static/chunks/app/page-ae5f3aa9d9ba5993.js,sha256=FQYIIfgXsACeM1uPR5dLk-fSY_DbwZuuka7eHsHGFu0,7664
162
+ voice_mode/frontend/.next/static/chunks/app/layout-df4aba5e7309efec.js,sha256=uYp5s6508II7N_nywUXdsvCztqdddE1TulFXvWbvFgg,505
163
+ voice_mode/frontend/.next/static/chunks/app/page-a87d04099ce6aeb2.js,sha256=Ph4mEaV6MMfsHM8T0YGatJmWqrm7SJUMHek5XuHfbqg,7666
159
164
  voice_mode/frontend/.next/static/chunks/app/_not-found/page-5011050e402ab9c8.js,sha256=u5LYOU4LZ2HFeEcz6xZqSflSnU4WDt-TnQNu3CdcEWk,1745
160
165
  voice_mode/frontend/.next/static/chunks/pages/_app-72b849fbd24ac258.js,sha256=QN-PY1h1HDIO4K4ZYwFl6rtEeaxWCynYauVLK_oWmzE,280
161
166
  voice_mode/frontend/.next/static/chunks/pages/_error-7ba65e1336b92748.js,sha256=oxr2dz6MkKWnm3jN3fWb2RPhCHB4-JgrzVMS_wTNr_E,247
@@ -164,9 +169,9 @@ voice_mode/frontend/.next/static/media/01099be941da1820-s.woff2,sha256=ZaNN8qxUZ
164
169
  voice_mode/frontend/.next/static/media/39883d31a7792467-s.p.woff2,sha256=i_qVPOm6vZ-H4B0Mk_d5yUQR_YKsz4XRc-8J2R_QWKs,14620
165
170
  voice_mode/frontend/.next/static/media/6368404d2e8d66fe-s.woff2,sha256=2GFQ1JjbLJOSmwrIsgCHPVMSJpcx2QX2i13kJbg8IFE,4464
166
171
  voice_mode/frontend/.next/types/package.json,sha256=49WkothVGqUsWgHSoO-y4GotlxG09cXx0g3m4hgH4s0,18
167
- voice_mode/frontend/.next/types/app/layout.ts,sha256=3q0H4bS0WzILF9kPKsNyM9DjkJr9hYeXinwQ68gcXyc,3510
168
- voice_mode/frontend/.next/types/app/page.ts,sha256=R1RUz3EIoFX2YYfeI0p-vC8P_dJoJpoVOqp2PwU9chA,3498
169
- voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=KNgFSqXTHMa-dBorbA3B3WsqF7BJQZ6naHtj9UTorxY,8530
172
+ voice_mode/frontend/.next/types/app/layout.ts,sha256=MZJrLx1_G10sRAHBxQWWTltxexQhGostW5jP3tYYLYY,3510
173
+ voice_mode/frontend/.next/types/app/page.ts,sha256=pWY7IrWjSVBARlAcducVAw_lMskAsqlAx0BBf7y4l20,3498
174
+ voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=HOiaVyAbT9G_NptkQwZLXFzv5URrCU7GYzQv_90wUu8,8530
170
175
  voice_mode/frontend/app/favicon.ico,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
171
176
  voice_mode/frontend/app/globals.css,sha256=yMCx8ta7sGyt40nzBTlRR644nlAGGYt73zj7e9YLgl4,362
172
177
  voice_mode/frontend/app/layout.tsx,sha256=Q0LYcf_Z8GT8zDhlWgk7XEZArp2ZS2HpB1tmv3epp68,537
@@ -203,11 +208,13 @@ voice_mode/templates/systemd/voicemode-kokoro.service,sha256=5JGv_Xf9u2MvmbGLBQt
203
208
  voice_mode/templates/systemd/voicemode-livekit.service,sha256=hVjT4Vd0SOABXGYbp9iF9R6SWtXXLfRXt7i1xbud6Lg,692
204
209
  voice_mode/templates/systemd/voicemode-whisper.service,sha256=aa5gIHI9xKF0M_DY6SO95QHRFhkV2JOzmFVo2U8RhN4,844
205
210
  voice_mode/tools/__init__.py,sha256=Hd8-dNoB58apt6PqMCfGHYDAeQWbarFrMRfxseJi8Jo,1069
211
+ voice_mode/tools/claude_thinking.py,sha256=MKKhk1gxCKmAEKyCmO0iccB491VHJI_LueyUpLAD5Rw,11028
206
212
  voice_mode/tools/configuration_management.py,sha256=jR6WYsrkeWRohI8_9kk48YQ6GNwdiMAuTXx3vln_m4w,12748
207
- voice_mode/tools/converse.py,sha256=BZ9hiZNGGUlvkmyGCUQlgii9qcABjceWL369oR2-1oQ,104426
213
+ voice_mode/tools/converse.py,sha256=7wKF0rcU_gO6b4YcyvlfQFPx6ALqVIV5OREhclpRLDE,104926
208
214
  voice_mode/tools/dependencies.py,sha256=V72gS_bD0pCmW_be2Hxs_cEnIoNPFKlK7rE9cLMTDGE,6670
209
215
  voice_mode/tools/devices.py,sha256=v0KV-Rix2lKZMFfVcobHiJB_6NnPAJsuZI5LXYHlgl0,10446
210
216
  voice_mode/tools/diagnostics.py,sha256=pWl9wwaBMJubBKhWOVbNIGeYet84ECVshtPok-v2pl8,2059
217
+ voice_mode/tools/pronounce.py,sha256=neyJXqQxclI8wUAnLOGBCfMXHzvS31NBuaEnt6GLovA,8915
211
218
  voice_mode/tools/providers.py,sha256=KuO5lFmSHjYUoK3hjIqx3l7XeNOLPMAeXQnTtH00Iow,7768
212
219
  voice_mode/tools/service.py,sha256=ll7BsUdSaXSGjtElZf7vSmOspe92ZIyIB-UaYbLrdf4,46454
213
220
  voice_mode/tools/statistics.py,sha256=XMljbNCBqatPgyh6rq1LZ3ICNEmji2c82P7pyCZfr8Q,9326
@@ -230,6 +237,10 @@ voice_mode/tools/services/whisper/model_install.py,sha256=v6huRo40nSKECR5nUCwVOX
230
237
  voice_mode/tools/services/whisper/model_remove.py,sha256=zlt4C7uxvdPSUNge-dMsfLNYTPDwWa6eXRBGGVzV11Y,1139
231
238
  voice_mode/tools/services/whisper/models.py,sha256=423rNK45vsciIUxVve3nntH-8v2NBd7V8Wk7t0kQShM,14902
232
239
  voice_mode/tools/services/whisper/uninstall.py,sha256=M81JCwCSbmV_tnuXB1jkn-V9BhSqmwAQVpHKbb62skc,8393
240
+ voice_mode/tools/sound_fonts/__init__.py,sha256=fBEz4cgzf4TSbrM-PIFfpxRXSZxMQpUOeTcBDv8IQkg,40
241
+ voice_mode/tools/sound_fonts/audio_player.py,sha256=G6atrGlWXIA_Pdl-fgBa5D4Pw0tP39HgF0tqD-T489U,2729
242
+ voice_mode/tools/sound_fonts/hook_handler.py,sha256=1cKKeYzWvWBZSWmrM65l161hB1yP1YmYRHnq3u9vcdA,3357
243
+ voice_mode/tools/sound_fonts/player.py,sha256=pmiOwNelc78GcTFMu5BxJ745T2jE_fe4TZ8FtoFleR8,7038
233
244
  voice_mode/tools/transcription/__init__.py,sha256=DTDBkpZZ_VLotiIqPm_fhCmKV1naGpmSU5rTV23zals,388
234
245
  voice_mode/tools/transcription/backends.py,sha256=0fHxqFo61QLGdouzTk6jNOExmpcm5GTB3dqcuLEDHlk,8794
235
246
  voice_mode/tools/transcription/core.py,sha256=UUCEuLudhq-VEem5T_e6xxlNtZZUMbQd_8PJApQr3dA,4353
@@ -249,7 +260,7 @@ voice_mode/utils/services/kokoro_helpers.py,sha256=57NsS1i4ptk5Gg3zm5g68QhtV3aU3
249
260
  voice_mode/utils/services/livekit_helpers.py,sha256=OFw0GxVIJAZE2m9dGCDZVegWD-LnMO6iSjcOUDgAA9U,3627
250
261
  voice_mode/utils/services/whisper_helpers.py,sha256=1Oy9TR5g5-l6j07KaWlAoijkCUDGaTWIz__BXvV0TWw,19632
251
262
  voice_mode/utils/services/whisper_version.py,sha256=68e0Oa-tG73IJlla-e3P0sh_qzBF4ToYBe4KKZ2FvEY,4861
252
- voice_mode-4.0.1.dist-info/METADATA,sha256=vbiNegdwm8xeGkL-UvAiLhbsj2hovsN2hYDRv5Uto4E,25459
253
- voice_mode-4.0.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
254
- voice_mode-4.0.1.dist-info/entry_points.txt,sha256=hS5faHc0R5Fde3Z_uvz8u6YkRIYtvh17X8tVN90Rbro,95
255
- voice_mode-4.0.1.dist-info/RECORD,,
263
+ voice_mode-4.2.0.dist-info/METADATA,sha256=cgmhL6HNdOERGjrF30q4YtFmGLrWBtJgd0mL6W1mo2Y,25459
264
+ voice_mode-4.2.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
265
+ voice_mode-4.2.0.dist-info/entry_points.txt,sha256=hS5faHc0R5Fde3Z_uvz8u6YkRIYtvh17X8tVN90Rbro,95
266
+ voice_mode-4.2.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{2812:function(n,e,t){Promise.resolve().then(t.t.bind(t,5019,23)),Promise.resolve().then(t.t.bind(t,7787,23)),Promise.resolve().then(t.t.bind(t,7960,23))},7960:function(){},7787:function(){},5019:function(n){n.exports={style:{fontFamily:"'__Public_Sans_8ff03a', '__Public_Sans_Fallback_8ff03a'",fontWeight:400,fontStyle:"normal"},className:"__className_8ff03a"}}},function(n){n.O(0,[17,971,117,744],function(){return n(n.s=2812)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{840:function(e,t,n){Promise.resolve().then(n.bind(n,6924))},6924:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return m}});var s=n(7437);function i(){return(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,s.jsx)("path",{d:"M3.33398 3.33334L12.6673 12.6667M12.6673 3.33334L3.33398 12.6667",stroke:"currentColor","stroke-width":"2","stroke-linecap":"square"})})}var a=n(2265);function r(e){let t=(0,a.useRef)(null),[n,i]=(0,a.useState)(!1),r=(0,a.useRef)(!1);return["listening","thinking","speaking"].includes(e.state)&&!1==r.current&&(r.current=!0),(0,a.useEffect)(()=>("connecting"===e.state?t.current=window.setTimeout(()=>{"connecting"===e.state&&!1===r.current&&i(!0)},1e4):(t.current&&window.clearTimeout(t.current),i(!1)),()=>{t.current&&window.clearTimeout(t.current)}),[e.state]),(0,s.jsx)(s.Fragment,{children:n?(0,s.jsxs)("div",{className:"fixed text-sm left-1/2 max-w-[90vw] -translate-x-1/2 flex top-6 items-center gap-4 bg-[#1F1F1F] px-4 py-3 rounded-lg",children:[(0,s.jsx)("div",{children:(0,s.jsx)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,s.jsx)("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.85068 3.63564C10.8197 2.00589 13.1793 2.00589 14.1484 3.63564L21.6323 16.2223C22.6232 17.8888 21.4223 20 19.4835 20H4.51555C2.57676 20 1.37584 17.8888 2.36671 16.2223L9.85068 3.63564ZM12 8.5C12.2761 8.5 12.5 8.72386 12.5 9V13.5C12.5 13.7761 12.2761 14 12 14C11.7239 14 11.5 13.7761 11.5 13.5V9C11.5 8.72386 11.7239 8.5 12 8.5ZM12.75 16C12.75 16.4142 12.4142 16.75 12 16.75C11.5858 16.75 11.25 16.4142 11.25 16C11.25 15.5858 11.5858 15.25 12 15.25C12.4142 15.25 12.75 15.5858 12.75 16Z",fill:"#666666"})})}),(0,s.jsx)("p",{className:"text-pretty w-max",children:"It's quiet... too quiet. Is your agent lost? Ensure your agent is properly configured and running on your machine."}),(0,s.jsx)("a",{href:"https://docs.livekit.io/agents/quickstarts/s2s/",target:"_blank",className:"underline whitespace-nowrap",children:"View guide"}),(0,s.jsx)("button",{onClick:()=>i(!1),children:(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:(0,s.jsx)("path",{d:"M3.16602 3.16666L12.8327 12.8333M12.8327 3.16666L3.16602 12.8333",stroke:"#999999",strokeWidth:"1.5",strokeLinecap:"square"})})})]}):null})}var o=n(7933),l=n(3819);function c(){let e=function(){let{agentTranscriptions:e}=(0,o.V)(),t=function(){let{microphoneTrack:e,localParticipant:t}=(0,o.C)();return(0,a.useMemo)(()=>({participant:t,source:l.fQ.Source.Microphone,publication:e}),[t,e])}(),{segments:n}=(0,o.U)(t);return(0,a.useMemo)(()=>[...e.map(e=>({...e,role:"assistant"})),...n.map(e=>({...e,role:"user"}))].sort((e,t)=>e.firstReceivedTime-t.firstReceivedTime),[e,n])}(),t=a.useRef(null);return a.useEffect(()=>{t.current&&(t.current.scrollTop=t.current.scrollHeight)},[e]),(0,s.jsxs)("div",{className:"relative h-[200px] w-[512px] max-w-[90vw] mx-auto",children:[(0,s.jsx)("div",{className:"absolute top-0 left-0 right-0 h-8 bg-gradient-to-b from-[var(--lk-bg)] to-transparent z-10 pointer-events-none"}),(0,s.jsx)("div",{className:"absolute bottom-0 left-0 right-0 h-8 bg-gradient-to-t from-[var(--lk-bg)] to-transparent z-10 pointer-events-none"}),(0,s.jsx)("div",{ref:t,className:"h-full flex flex-col gap-2 overflow-y-auto px-4 py-8",children:e.map(e=>(0,s.jsx)("div",{id:e.id,className:"assistant"===e.role?"p-2 self-start fit-content":"bg-gray-800 rounded-md p-2 self-end fit-content",children:e.text},e.id))})]})}var d=n(9426),u=n(2297),p=n(168),x=n(8614),h=n(521),f=n(257);function m(){let[e]=(0,a.useState)(new l.du),[t,n]=(0,a.useState)(""),[i,r]=(0,a.useState)(""),o=(0,a.useCallback)(async()=>{var n;r("");let s=new URL(null!==(n=f.env.NEXT_PUBLIC_CONN_DETAILS_ENDPOINT)&&void 0!==n?n:"/api/connection-details",window.location.origin);s.searchParams.set("password",t);let i=await fetch(s.toString());if(!i.ok){401===i.status?r("Invalid password"):r("Connection failed");return}let a=await i.json();await e.connect(a.serverUrl,a.participantToken),await e.localParticipant.setMicrophoneEnabled(!0)},[e,t]);return(0,a.useEffect)(()=>(e.on(l.TQ.MediaDevicesError,j),()=>{e.off(l.TQ.MediaDevicesError,j)}),[e]),(0,s.jsx)("main",{"data-lk-theme":"default",className:"h-full grid content-center bg-[var(--lk-bg)]",children:(0,s.jsx)(d.R.Provider,{value:e,children:(0,s.jsx)("div",{className:"lk-room-container max-w-[1024px] w-[90vw] mx-auto max-h-[90vh]",children:(0,s.jsx)(w,{onConnectButtonClicked:o,password:t,setPassword:n,error:i})})})})}function w(e){let{state:t}=(0,o.V)();return(0,s.jsx)(s.Fragment,{children:(0,s.jsx)(x.M,{mode:"wait",children:"disconnected"===t?(0,s.jsx)(h.E.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},transition:{duration:.3,ease:[.09,1.04,.245,1.055]},className:"grid items-center justify-center h-full",children:(0,s.jsxs)("div",{className:"flex flex-col items-center gap-4",children:[(0,s.jsx)("input",{type:"password",placeholder:"Enter password",value:e.password,onChange:t=>e.setPassword(t.target.value),onKeyPress:t=>{"Enter"===t.key&&e.onConnectButtonClicked()},className:"px-4 py-2 bg-gray-800 text-white rounded-md focus:outline-none focus:ring-2 focus:ring-white"}),e.error&&(0,s.jsx)("p",{className:"text-red-500 text-sm",children:e.error}),(0,s.jsx)(h.E.button,{initial:{opacity:0},animate:{opacity:1},transition:{duration:.3,delay:.1},className:"uppercase px-4 py-2 bg-white text-black rounded-md",onClick:()=>e.onConnectButtonClicked(),children:"Start a conversation"})]})},"disconnected"):(0,s.jsxs)(h.E.div,{initial:{opacity:0,y:20},animate:{opacity:1,y:0},exit:{opacity:0,y:-20},transition:{duration:.3,ease:[.09,1.04,.245,1.055]},className:"flex flex-col items-center gap-4 h-full",children:[(0,s.jsx)(g,{}),(0,s.jsx)("div",{className:"flex-1 w-full",children:(0,s.jsx)(c,{})}),(0,s.jsx)("div",{className:"w-full",children:(0,s.jsx)(v,{onConnectButtonClicked:e.onConnectButtonClicked})}),(0,s.jsx)(u.R,{}),(0,s.jsx)(r,{state:t})]},"connected")})})}function g(){let{state:e,videoTrack:t,audioTrack:n}=(0,o.V)();return t?(0,s.jsx)("div",{className:"h-[512px] w-[512px] rounded-lg overflow-hidden",children:(0,s.jsx)(u.V,{trackRef:t})}):(0,s.jsx)("div",{className:"h-[300px] w-full",children:(0,s.jsx)(u.B,{state:e,barCount:5,trackRef:n,className:"agent-visualizer",options:{minHeight:24}})})}function v(e){let{state:t}=(0,o.V)();return(0,s.jsxs)("div",{className:"relative h-[60px]",children:[(0,s.jsx)(x.M,{children:"disconnected"===t&&(0,s.jsx)(h.E.button,{initial:{opacity:0,top:0},animate:{opacity:1},exit:{opacity:0,top:"-10px"},transition:{duration:1,ease:[.09,1.04,.245,1.055]},className:"uppercase absolute left-1/2 -translate-x-1/2 px-4 py-2 bg-white text-black rounded-md",onClick:()=>e.onConnectButtonClicked(),children:"Start a conversation"})}),(0,s.jsx)(x.M,{children:"disconnected"!==t&&"connecting"!==t&&(0,s.jsxs)(h.E.div,{initial:{opacity:0,top:"10px"},animate:{opacity:1,top:0},exit:{opacity:0,top:"-10px"},transition:{duration:.4,ease:[.09,1.04,.245,1.055]},className:"flex h-8 absolute left-1/2 -translate-x-1/2 justify-center",children:[(0,s.jsx)(p.P6,{controls:{leave:!1}}),(0,s.jsx)(u.D,{children:(0,s.jsx)(i,{})})]})})]})}function j(e){console.error(e),alert("Error acquiring camera or microphone permissions. Please make sure you grant the necessary permissions in your browser and reload the tab")}}},function(e){e.O(0,[481,471,971,117,744],function(){return e(e.s=840)}),_N_E=e.O()}]);