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.
- voice_mode/__version__.py +1 -1
- voice_mode/cli.py +73 -0
- voice_mode/cli_commands/claude.py +208 -0
- voice_mode/cli_commands/hook.py +197 -0
- voice_mode/cli_commands/pronounce_commands.py +223 -0
- voice_mode/config.py +25 -0
- voice_mode/data/default_pronunciation.yaml +268 -0
- voice_mode/frontend/.next/BUILD_ID +1 -1
- voice_mode/frontend/.next/app-build-manifest.json +5 -5
- voice_mode/frontend/.next/build-manifest.json +3 -3
- voice_mode/frontend/.next/next-minimal-server.js.nft.json +1 -1
- voice_mode/frontend/.next/next-server.js.nft.json +1 -1
- voice_mode/frontend/.next/prerender-manifest.json +1 -1
- voice_mode/frontend/.next/required-server-files.json +1 -1
- voice_mode/frontend/.next/server/app/_not-found/page.js +1 -1
- voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/server/app/_not-found.html +1 -1
- voice_mode/frontend/.next/server/app/_not-found.rsc +1 -1
- voice_mode/frontend/.next/server/app/api/connection-details/route.js +2 -2
- voice_mode/frontend/.next/server/app/favicon.ico/route.js +2 -2
- voice_mode/frontend/.next/server/app/index.html +1 -1
- voice_mode/frontend/.next/server/app/index.rsc +2 -2
- voice_mode/frontend/.next/server/app/page.js +2 -2
- voice_mode/frontend/.next/server/app/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/server/chunks/994.js +1 -1
- voice_mode/frontend/.next/server/middleware-build-manifest.js +1 -1
- voice_mode/frontend/.next/server/next-font-manifest.js +1 -1
- voice_mode/frontend/.next/server/next-font-manifest.json +1 -1
- voice_mode/frontend/.next/server/pages/404.html +1 -1
- voice_mode/frontend/.next/server/pages/500.html +1 -1
- voice_mode/frontend/.next/server/server-reference-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/.next/BUILD_ID +1 -1
- voice_mode/frontend/.next/standalone/.next/app-build-manifest.json +5 -5
- voice_mode/frontend/.next/standalone/.next/build-manifest.json +3 -3
- voice_mode/frontend/.next/standalone/.next/prerender-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/.next/required-server-files.json +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js +2 -2
- voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js +2 -2
- voice_mode/frontend/.next/standalone/.next/server/app/index.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/app/index.rsc +2 -2
- voice_mode/frontend/.next/standalone/.next/server/app/page.js +2 -2
- voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/chunks/994.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js +1 -1
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/.next/server/pages/404.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/pages/500.html +1 -1
- voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json +1 -1
- voice_mode/frontend/.next/standalone/server.js +1 -1
- voice_mode/frontend/.next/static/chunks/app/layout-df4aba5e7309efec.js +1 -0
- voice_mode/frontend/.next/static/chunks/app/page-a87d04099ce6aeb2.js +1 -0
- voice_mode/frontend/.next/static/chunks/{main-app-233f6c633f73ae84.js → main-app-ca62791c49278d6d.js} +1 -1
- voice_mode/frontend/.next/trace +43 -43
- voice_mode/frontend/.next/types/app/api/connection-details/route.ts +1 -1
- voice_mode/frontend/.next/types/app/layout.ts +1 -1
- voice_mode/frontend/.next/types/app/page.ts +1 -1
- voice_mode/frontend/package-lock.json +3 -3
- voice_mode/pronounce.py +397 -0
- voice_mode/tools/claude_thinking.py +285 -0
- voice_mode/tools/converse.py +11 -0
- voice_mode/tools/pronounce.py +245 -0
- voice_mode/tools/sound_fonts/__init__.py +1 -0
- voice_mode/tools/sound_fonts/audio_player.py +87 -0
- voice_mode/tools/sound_fonts/hook_handler.py +127 -0
- voice_mode/tools/sound_fonts/player.py +180 -0
- {voice_mode-4.0.1.dist-info → voice_mode-4.2.0.dist-info}/METADATA +1 -1
- {voice_mode-4.0.1.dist-info → voice_mode-4.2.0.dist-info}/RECORD +76 -65
- voice_mode/frontend/.next/static/chunks/app/layout-0074dd8ab91cdbe0.js +0 -1
- voice_mode/frontend/.next/static/chunks/app/page-ae5f3aa9d9ba5993.js +0 -1
- /voice_mode/frontend/.next/static/{c5TIe90lGzrESrqJkkXQa → FTYM9NyY_2zq92GYxPDhS}/_buildManifest.js +0 -0
- /voice_mode/frontend/.next/static/{c5TIe90lGzrESrqJkkXQa → FTYM9NyY_2zq92GYxPDhS}/_ssgManifest.js +0 -0
- {voice_mode-4.0.1.dist-info → voice_mode-4.2.0.dist-info}/WHEEL +0 -0
- {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
|
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=
|
4
|
-
voice_mode/cli.py,sha256=
|
5
|
-
voice_mode/config.py,sha256=
|
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=
|
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=
|
37
|
-
voice_mode/frontend/.next/app-build-manifest.json,sha256
|
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=
|
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=
|
43
|
-
voice_mode/frontend/.next/next-server.js.nft.json,sha256=
|
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
|
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=
|
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=
|
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=
|
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=
|
58
|
-
voice_mode/frontend/.next/server/next-font-manifest.json,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
71
|
-
voice_mode/frontend/.next/server/app/page.js,sha256=
|
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=
|
74
|
-
voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=
|
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=
|
77
|
-
voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=
|
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=
|
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=
|
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=
|
87
|
-
voice_mode/frontend/.next/server/pages/500.html,sha256=
|
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=
|
96
|
-
voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=
|
97
|
-
voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256
|
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=
|
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
|
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=
|
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=
|
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=
|
111
|
-
voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
124
|
-
voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=
|
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=
|
127
|
-
voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=
|
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=
|
130
|
-
voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=
|
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=
|
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=
|
138
|
-
voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=
|
139
|
-
voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=
|
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/
|
147
|
-
voice_mode/frontend/.next/static/
|
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-
|
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-
|
158
|
-
voice_mode/frontend/.next/static/chunks/app/page-
|
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=
|
168
|
-
voice_mode/frontend/.next/types/app/page.ts,sha256=
|
169
|
-
voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=
|
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=
|
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.
|
253
|
-
voice_mode-4.0.
|
254
|
-
voice_mode-4.0.
|
255
|
-
voice_mode-4.0.
|
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()}]);
|
/voice_mode/frontend/.next/static/{c5TIe90lGzrESrqJkkXQa → FTYM9NyY_2zq92GYxPDhS}/_buildManifest.js
RENAMED
File without changes
|