voice-mode 4.3.2__py3-none-any.whl → 4.5.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 (80) hide show
  1. voice_mode/__version__.py +1 -1
  2. voice_mode/cli.py +82 -5
  3. voice_mode/cli_commands/claude.py +6 -199
  4. voice_mode/cli_commands/hook.py +13 -16
  5. voice_mode/cli_commands/transcribe.py +7 -6
  6. voice_mode/config.py +1 -1
  7. voice_mode/conversation_logger.py +6 -0
  8. voice_mode/core.py +9 -2
  9. voice_mode/frontend/.next/BUILD_ID +1 -1
  10. voice_mode/frontend/.next/app-build-manifest.json +5 -5
  11. voice_mode/frontend/.next/build-manifest.json +3 -3
  12. voice_mode/frontend/.next/next-minimal-server.js.nft.json +1 -1
  13. voice_mode/frontend/.next/next-server.js.nft.json +1 -1
  14. voice_mode/frontend/.next/prerender-manifest.json +1 -1
  15. voice_mode/frontend/.next/required-server-files.json +1 -1
  16. voice_mode/frontend/.next/server/app/_not-found/page.js +1 -1
  17. voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. voice_mode/frontend/.next/server/app/_not-found.html +1 -1
  19. voice_mode/frontend/.next/server/app/_not-found.rsc +1 -1
  20. voice_mode/frontend/.next/server/app/api/connection-details/route.js +2 -2
  21. voice_mode/frontend/.next/server/app/favicon.ico/route.js +2 -2
  22. voice_mode/frontend/.next/server/app/index.html +1 -1
  23. voice_mode/frontend/.next/server/app/index.rsc +2 -2
  24. voice_mode/frontend/.next/server/app/page.js +2 -2
  25. voice_mode/frontend/.next/server/app/page_client-reference-manifest.js +1 -1
  26. voice_mode/frontend/.next/server/chunks/994.js +2 -2
  27. voice_mode/frontend/.next/server/middleware-build-manifest.js +1 -1
  28. voice_mode/frontend/.next/server/next-font-manifest.js +1 -1
  29. voice_mode/frontend/.next/server/next-font-manifest.json +1 -1
  30. voice_mode/frontend/.next/server/pages/404.html +1 -1
  31. voice_mode/frontend/.next/server/pages/500.html +1 -1
  32. voice_mode/frontend/.next/server/server-reference-manifest.json +1 -1
  33. voice_mode/frontend/.next/standalone/.next/BUILD_ID +1 -1
  34. voice_mode/frontend/.next/standalone/.next/app-build-manifest.json +5 -5
  35. voice_mode/frontend/.next/standalone/.next/build-manifest.json +3 -3
  36. voice_mode/frontend/.next/standalone/.next/prerender-manifest.json +1 -1
  37. voice_mode/frontend/.next/standalone/.next/required-server-files.json +1 -1
  38. voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js +1 -1
  39. voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  40. voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html +1 -1
  41. voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc +1 -1
  42. voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js +2 -2
  43. voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js +2 -2
  44. voice_mode/frontend/.next/standalone/.next/server/app/index.html +1 -1
  45. voice_mode/frontend/.next/standalone/.next/server/app/index.rsc +2 -2
  46. voice_mode/frontend/.next/standalone/.next/server/app/page.js +2 -2
  47. voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  48. voice_mode/frontend/.next/standalone/.next/server/chunks/994.js +2 -2
  49. voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js +1 -1
  50. voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js +1 -1
  51. voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json +1 -1
  52. voice_mode/frontend/.next/standalone/.next/server/pages/404.html +1 -1
  53. voice_mode/frontend/.next/standalone/.next/server/pages/500.html +1 -1
  54. voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json +1 -1
  55. voice_mode/frontend/.next/standalone/server.js +1 -1
  56. voice_mode/frontend/.next/static/chunks/app/layout-d3ec7f6f14ea7396.js +1 -0
  57. voice_mode/frontend/.next/static/chunks/app/{page-728ce55710c9bd80.js → page-471796963fb1a4bd.js} +1 -1
  58. voice_mode/frontend/.next/static/chunks/{main-app-991c8c54319817e0.js → main-app-78da5e437b6a2a9f.js} +1 -1
  59. voice_mode/frontend/.next/trace +43 -43
  60. voice_mode/frontend/.next/types/app/api/connection-details/route.ts +1 -1
  61. voice_mode/frontend/.next/types/app/layout.ts +1 -1
  62. voice_mode/frontend/.next/types/app/page.ts +1 -1
  63. voice_mode/frontend/package-lock.json +26 -15
  64. voice_mode/provider_discovery.py +55 -79
  65. voice_mode/providers.py +61 -45
  66. voice_mode/simple_failover.py +41 -12
  67. voice_mode/statistics_tracking.py +42 -0
  68. voice_mode/tools/__init__.py +150 -16
  69. voice_mode/tools/converse.py +149 -338
  70. voice_mode/tools/diagnostics.py +2 -1
  71. voice_mode/tools/statistics.py +0 -33
  72. voice_mode/tools/voice_registry.py +24 -28
  73. {voice_mode-4.3.2.dist-info → voice_mode-4.5.0.dist-info}/METADATA +36 -41
  74. {voice_mode-4.3.2.dist-info → voice_mode-4.5.0.dist-info}/RECORD +78 -78
  75. voice_mode/frontend/.next/static/chunks/app/layout-d89915a94cb8f604.js +0 -1
  76. voice_mode/tools/claude_thinking.py +0 -285
  77. /voice_mode/frontend/.next/static/{-9MkXl-xGB2BLmGEAZVmg → Ni4GIqyDdn0QehvmlLBZg}/_buildManifest.js +0 -0
  78. /voice_mode/frontend/.next/static/{-9MkXl-xGB2BLmGEAZVmg → Ni4GIqyDdn0QehvmlLBZg}/_ssgManifest.js +0 -0
  79. {voice_mode-4.3.2.dist-info → voice_mode-4.5.0.dist-info}/WHEEL +0 -0
  80. {voice_mode-4.3.2.dist-info → voice_mode-4.5.0.dist-info}/entry_points.txt +0 -0
@@ -7,14 +7,14 @@ from voice_mode.provider_discovery import provider_registry
7
7
  @mcp.tool()
8
8
  async def voice_registry() -> str:
9
9
  """Get the current voice provider registry showing all discovered endpoints.
10
-
10
+
11
11
  Returns a formatted view of all TTS and STT endpoints with their:
12
- - Health status
13
12
  - Available models
14
13
  - Available voices (TTS only)
15
- - Response times
16
- - Last health check time
17
-
14
+ - Provider type
15
+ - Last check time
16
+ - Any recent errors
17
+
18
18
  This allows the LLM to see what voice services are currently available.
19
19
  """
20
20
  # Ensure registry is initialized
@@ -31,36 +31,32 @@ async def voice_registry() -> str:
31
31
  lines.append("-" * 30)
32
32
 
33
33
  for url, info in registry_data["tts"].items():
34
- status = "" if info["healthy"] else ""
34
+ status = "" if info.get("last_error") else ""
35
35
  lines.append(f"\n{status} {url}")
36
-
37
- if info["healthy"]:
38
- lines.append(f" Models: {', '.join(info['models']) if info['models'] else 'none detected'}")
39
- lines.append(f" Voices: {', '.join(info['voices']) if info['voices'] else 'none detected'}")
40
- if info["response_time_ms"]:
41
- lines.append(f" Response Time: {info['response_time_ms']:.0f}ms")
42
- else:
43
- if info.get("error"):
44
- lines.append(f" Error: {info['error']}")
45
-
46
- lines.append(f" Last Check: {info['last_check']}")
36
+ lines.append(f" Provider: {info.get('provider_type', 'unknown')}")
37
+ lines.append(f" Models: {', '.join(info['models']) if info['models'] else 'none detected'}")
38
+ lines.append(f" Voices: {', '.join(info['voices']) if info['voices'] else 'none detected'}")
39
+
40
+ if info.get("last_error"):
41
+ lines.append(f" Last Error: {info['last_error']}")
42
+
43
+ if info.get('last_check'):
44
+ lines.append(f" Last Check: {info['last_check']}")
47
45
 
48
46
  # STT Endpoints
49
47
  lines.append("\n\nSTT Endpoints:")
50
48
  lines.append("-" * 30)
51
49
 
52
50
  for url, info in registry_data["stt"].items():
53
- status = "" if info["healthy"] else ""
51
+ status = "" if info.get("last_error") else ""
54
52
  lines.append(f"\n{status} {url}")
55
-
56
- if info["healthy"]:
57
- lines.append(f" Models: {', '.join(info['models']) if info['models'] else 'none detected'}")
58
- if info["response_time_ms"]:
59
- lines.append(f" Response Time: {info['response_time_ms']:.0f}ms")
60
- else:
61
- if info.get("error"):
62
- lines.append(f" Error: {info['error']}")
63
-
64
- lines.append(f" Last Check: {info['last_check']}")
53
+ lines.append(f" Provider: {info.get('provider_type', 'unknown')}")
54
+ lines.append(f" Models: {', '.join(info['models']) if info['models'] else 'none detected'}")
55
+
56
+ if info.get("last_error"):
57
+ lines.append(f" Last Error: {info['last_error']}")
58
+
59
+ if info.get('last_check'):
60
+ lines.append(f" Last Check: {info['last_check']}")
65
61
 
66
62
  return "\n".join(lines)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: voice-mode
3
- Version: 4.3.2
3
+ Version: 4.5.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
@@ -78,6 +78,8 @@ Description-Content-Type: text/markdown
78
78
 
79
79
  # Voice Mode
80
80
 
81
+ mcp-name: com.failmode/voicemode
82
+
81
83
  > **Install via:** `uvx voice-mode` | `pip install voice-mode` | [getvoicemode.com](https://getvoicemode.com)
82
84
 
83
85
  [![PyPI Downloads](https://static.pepy.tech/badge/voice-mode)](https://pepy.tech/project/voice-mode)
@@ -113,7 +115,7 @@ Natural voice conversations for AI assistants. Voice Mode brings human-like voic
113
115
 
114
116
  ## Quick Start
115
117
 
116
- > 📖 **Using a different tool?** See our [Integration Guides](docs/integrations/README.md) for Cursor, VS Code, Gemini CLI, and more!
118
+ > 📖 **Using a different tool?** See our [Getting Started Guide](docs/tutorials/getting-started.md) for setup instructions!
117
119
 
118
120
  ### Automatic Installation (Recommended)
119
121
 
@@ -140,7 +142,7 @@ This installer will:
140
142
 
141
143
  ### Manual Installation
142
144
 
143
- For manual setup steps, see the [Claude Code Integration Guide](docs/integrations/claude-code/README.md).
145
+ For manual setup steps, see the [Getting Started Guide](docs/tutorials/getting-started.md).
144
146
 
145
147
  ## 🎬 Demo
146
148
 
@@ -180,16 +182,16 @@ The `converse` function makes voice interactions natural - it automatically wait
180
182
 
181
183
  Voice Mode works with your favorite AI coding assistants:
182
184
 
183
- - 🤖 **[Claude Code](docs/integrations/claude-code/README.md)** - Anthropic's official CLI
184
- - 🖥️ **[Claude Desktop](docs/integrations/claude-desktop/README.md)** - Desktop application
185
- - 🌟 **[Gemini CLI](docs/integrations/gemini-cli/README.md)** - Google's CLI tool
186
- - ⚡ **[Cursor](docs/integrations/cursor/README.md)** - AI-first code editor
187
- - 💻 **[VS Code](docs/integrations/vscode/README.md)** - With MCP preview support
188
- - 🦘 **[Roo Code](docs/integrations/roo-code/README.md)** - AI dev team in VS Code
189
- - 🔧 **[Cline](docs/integrations/cline/README.md)** - Autonomous coding agent
190
- - ⚡ **[Zed](docs/integrations/zed/README.md)** - High-performance editor
191
- - 🏄 **[Windsurf](docs/integrations/windsurf/README.md)** - Agentic IDE by Codeium
192
- - 🔄 **[Continue](docs/integrations/continue/README.md)** - Open-source AI assistant
185
+ - 🤖 **Claude Code** - Anthropic's official CLI
186
+ - 🖥️ **Claude Desktop** - Desktop application
187
+ - 🌟 **Gemini CLI** - Google's CLI tool
188
+ - ⚡ **Cursor** - AI-first code editor
189
+ - 💻 **VS Code** - With MCP preview support
190
+ - 🦘 **Roo Code** - AI dev team in VS Code
191
+ - 🔧 **Cline** - Autonomous coding agent
192
+ - ⚡ **Zed** - High-performance editor
193
+ - 🏄 **Windsurf** - Agentic IDE by Codeium
194
+ - 🔄 **Continue** - Open-source AI assistant
193
195
 
194
196
  ## Installation
195
197
 
@@ -208,7 +210,7 @@ sudo apt update
208
210
  sudo apt install -y python3-dev libasound2-dev libasound2-plugins libportaudio2 portaudio19-dev ffmpeg pulseaudio pulseaudio-utils
209
211
  ```
210
212
 
211
- **Note for WSL2 users**: WSL2 requires additional audio packages (pulseaudio, libasound2-plugins) for microphone access. See our [WSL2 Microphone Access Guide](docs/troubleshooting/wsl2-microphone-access.md) if you encounter issues.
213
+ **Note for WSL2 users**: WSL2 requires additional audio packages (pulseaudio, libasound2-plugins) for microphone access.
212
214
  </details>
213
215
 
214
216
  <details>
@@ -259,9 +261,12 @@ claude mcp add --scope user voice-mode uvx voice-mode
259
261
  # Using Claude Code with Nix (NixOS)
260
262
  claude mcp add voice-mode nix run github:mbailey/voicemode
261
263
 
262
- # Using UV
264
+ # Using UV (recommended)
263
265
  uvx voice-mode
264
266
 
267
+ # For cleanest experience with UV (no deprecation warnings):
268
+ UV_PYTHON=python3.13 uvx voice-mode
269
+
265
270
  # Using pip
266
271
  pip install voice-mode
267
272
 
@@ -271,7 +276,7 @@ nix run github:mbailey/voicemode
271
276
 
272
277
  ### Configuration for AI Coding Assistants
273
278
 
274
- > 📖 **Looking for detailed setup instructions?** Check our comprehensive [Integration Guides](docs/integrations/README.md) for step-by-step instructions for each tool!
279
+ > 📖 **Looking for detailed setup instructions?** Check our comprehensive [Getting Started Guide](docs/tutorials/getting-started.md) for step-by-step instructions!
275
280
 
276
281
  Below are quick configuration snippets. For full installation and setup instructions, see the integration guides above.
277
282
 
@@ -549,12 +554,12 @@ nix run github:mbailey/voicemode
549
554
 
550
555
  **Note:** The `converse` tool is the primary interface for voice interactions, combining speaking and listening in a natural flow.
551
556
 
552
- **New:** The `install_whisper_cpp` and `install_kokoro_fastapi` tools help you set up free, private, open-source voice services locally. See [Installation Tools Documentation](docs/installation-tools.md) for detailed usage.
557
+ **New:** The `install_whisper_cpp` and `install_kokoro_fastapi` tools help you set up free, private, open-source voice services locally.
553
558
 
554
559
  ## Configuration
555
560
 
556
- - 📖 **[Integration Guides](docs/integrations/README.md)** - Step-by-step setup for each tool
557
- - 🔧 **[Configuration Reference](docs/configuration.md)** - All environment variables
561
+ - 📖 **[Getting Started](docs/tutorials/getting-started.md)** - Step-by-step setup guide
562
+ - 🔧 **[Configuration Reference](docs/guides/configuration.md)** - All environment variables
558
563
  - 📁 **[Config Examples](config-examples/)** - Ready-to-use configuration files
559
564
 
560
565
  ### Quick Setup
@@ -616,8 +621,8 @@ The audio format is automatically validated against provider capabilities and wi
616
621
 
617
622
  For privacy-focused or offline usage, Voice Mode supports local speech services:
618
623
 
619
- - **[Whisper.cpp](docs/whisper.cpp.md)** - Local speech-to-text with OpenAI-compatible API
620
- - **[Kokoro](docs/kokoro.md)** - Local text-to-speech with multiple voice options
624
+ - **[Whisper.cpp](docs/guides/whisper-setup.md)** - Local speech-to-text with OpenAI-compatible API
625
+ - **[Kokoro](docs/guides/kokoro-setup.md)** - Local text-to-speech with multiple voice options
621
626
 
622
627
  These services provide the same API interface as OpenAI, allowing seamless switching between cloud and local processing.
623
628
 
@@ -663,7 +668,7 @@ The OpenAI SDK handles this automatically - no Voice Mode configuration needed!
663
668
  ### Common Issues
664
669
 
665
670
  - **No microphone access**: Check system permissions for terminal/application
666
- - **WSL2 Users**: See [WSL2 Microphone Access Guide](docs/troubleshooting/wsl2-microphone-access.md)
671
+ - **WSL2 Users**: Additional audio packages (pulseaudio, libasound2-plugins) required for microphone access
667
672
  - **UV not found**: Install with `curl -LsSf https://astral.sh/uv/install.sh | sh`
668
673
  - **OpenAI API error**: Verify your `OPENAI_API_KEY` is set correctly
669
674
  - **No audio output**: Check system audio settings and available devices
@@ -703,24 +708,17 @@ Audio files are saved to: `~/.voicemode/audio/YYYY/MM/` with timestamps in the f
703
708
  📚 **[Read the full documentation at voice-mode.readthedocs.io](https://voice-mode.readthedocs.io)**
704
709
 
705
710
  ### Getting Started
706
- - **[Integration Guides](docs/integrations/README.md)** - Step-by-step setup for all supported tools
707
- - **[Configuration Guide](docs/configuration.md)** - Complete environment variable reference
711
+ - **[Getting Started](docs/tutorials/getting-started.md)** - Step-by-step setup for all supported tools
712
+ - **[Configuration Guide](docs/guides/configuration.md)** - Complete environment variable reference
708
713
 
709
714
  ### Development
710
- - **[Using uv/uvx](docs/uv.md)** - Package management with uv and uvx
711
- - **[Local Development](docs/local-development-uvx.md)** - Development setup guide
712
- - **[Audio Formats](docs/audio-format-migration.md)** - Audio format configuration and migration
713
- - **[Statistics Dashboard](docs/statistics-dashboard.md)** - Performance monitoring and metrics
715
+ - **[Development Setup](docs/tutorials/development-setup.md)** - Local development guide
714
716
 
715
717
  ### Service Guides
716
- - **[Whisper.cpp Setup](docs/whisper.cpp.md)** - Local speech-to-text configuration
717
- - **[Kokoro Setup](docs/kokoro.md)** - Local text-to-speech configuration
718
- - **[Service Health Checks](docs/service-health-checks.md)** - Service readiness and health monitoring
719
- - **[LiveKit Integration](docs/livekit/README.md)** - Real-time voice communication
718
+ - **[Whisper.cpp Setup](docs/guides/whisper-setup.md)** - Local speech-to-text configuration
719
+ - **[Kokoro Setup](docs/guides/kokoro-setup.md)** - Local text-to-speech configuration
720
+ - **[LiveKit Integration](docs/guides/livekit-setup.md)** - Real-time voice communication
720
721
 
721
- ### Troubleshooting
722
- - **[WSL2 Microphone Access](docs/troubleshooting/wsl2-microphone-access.md)** - WSL2 audio setup
723
- - **[Migration Guide](docs/migration-guide.md)** - Upgrading from older versions
724
722
 
725
723
  ## Links
726
724
 
@@ -738,15 +736,12 @@ Audio files are saved to: `~/.voicemode/audio/YYYY/MM/` with timestamps in the f
738
736
 
739
737
  ## See Also
740
738
 
741
- - 🚀 [Integration Guides](docs/integrations/README.md) - Setup instructions for all supported tools
742
- - 🔧 [Configuration Reference](docs/configuration.md) - Environment variables and options
743
- - 🎤 [Local Services Setup](docs/kokoro.md) - Run TTS/STT locally for privacy
744
- - 🐛 [Troubleshooting](docs/troubleshooting/README.md) - Common issues and solutions
739
+ - 🚀 [Getting Started](docs/tutorials/getting-started.md) - Setup instructions for all supported tools
740
+ - 🔧 [Configuration Reference](docs/guides/configuration.md) - Environment variables and options
741
+ - 🎤 [Local Services Setup](docs/guides/kokoro-setup.md) - Run TTS/STT locally for privacy
745
742
 
746
743
  ## License
747
744
 
748
745
  MIT - A [Failmode](https://failmode.com) Project
749
746
 
750
747
  ---
751
-
752
- <sub>[Project Statistics](docs/project-stats/README.md)</sub>
@@ -1,25 +1,26 @@
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=p5bDeWVMbJO4ZwDNboOxSuHqdv4mOVdil80HYAIpcBg,100
4
- voice_mode/cli.py,sha256=iFvRBLmzzHe22vZGJkwABzaNU7d5TQjE4gt2z7tDcSc,74590
5
- voice_mode/config.py,sha256=GZzhp6D_20tVx5Utxny9R2CX2PHFdsJxPJBQBZtT0Os,36397
6
- voice_mode/conversation_logger.py,sha256=Nar92xabhaVmMKdZdLmgoYckK9fGAVVYWdass3-EI1I,9363
7
- voice_mode/core.py,sha256=WACixDHS23UMhmBJKN2zgDqeWtpAdXHOSduDc3fmOio,28452
3
+ voice_mode/__version__.py,sha256=GG-lRFEh9D_RIUAKuMUHnZd-NurJdlD5eP82m9Boq98,100
4
+ voice_mode/cli.py,sha256=ASVK_N3ca_ZMBGIzbAp9-PmbNA_7atdJmwNeh833C5g,77420
5
+ voice_mode/config.py,sha256=WsrRcmsYwNE0p2WzT1FqbuEXsNmBjwFCDiTR7N9hGY8,36357
6
+ voice_mode/conversation_logger.py,sha256=kqlEDr2o0G8uwv_y2nWkhTqUsCL8xf_j-Y3K-o7naZ0,9665
7
+ voice_mode/core.py,sha256=QpeOZuFfakNmDWO7HpyrMmJYCO776dkti_e505rd2uI,28787
8
8
  voice_mode/pronounce.py,sha256=D9hKP8Op5PZMn9kalIifNcg3GMBIJOemgnhHGOGQSnU,13752
9
- voice_mode/provider_discovery.py,sha256=roELfldoo7s-_1XxJF-vb9BOxMmVRpYlwAX3EnTSlcQ,15729
10
- voice_mode/providers.py,sha256=RFFlBufQUA9lhAS59nMYA3yr2GVyNEDSeKHBoosBYsA,11959
9
+ voice_mode/provider_discovery.py,sha256=AA4Ner4i7ufgQVt1sq9y2csgSyvWwkToNrTzBCDGQtI,14007
10
+ voice_mode/providers.py,sha256=Wck2_GFSjiQp0WEXA0UsOVcrVTzNWkKdW5dYYRIa9bY,12629
11
11
  voice_mode/server.py,sha256=IhdTtraP51UlmN_yKDAk_ZBBxtkDOEdBV6B4olu7uVA,3044
12
12
  voice_mode/shared.py,sha256=dr6rki6lKPtn6lhkZSXbIJl-rhK9dKXAw6eYpHFhUOU,3468
13
- voice_mode/simple_failover.py,sha256=1LvbxZNXJOX2Ai6vGJ_Rwaa5_1A0TsL5hXHb_PvZoT0,6070
13
+ voice_mode/simple_failover.py,sha256=IsEeEytcCrNtev5r9NFPvyhouktiZWr5QDN8eL5Ga6E,7665
14
14
  voice_mode/statistics.py,sha256=ckssYzOJMMgCfmmGNlCRhX4o9y0LWN9Gt42WlEUI3DE,15785
15
+ voice_mode/statistics_tracking.py,sha256=4F5dW0zSOFvWrw86Zl0hHdOCW9mVLlyGh01Mf8Ex_Fk,1568
15
16
  voice_mode/streaming.py,sha256=AP0dPt8jAGnM_i3qhtPe4334EBQryWxOJ6NPt48tHvE,21744
16
17
  voice_mode/version.py,sha256=rgv7tThj3fBO006bhff3iz_TlfE5uQS4Gws-9xf8YIc,2452
17
18
  voice_mode/cli_commands/__init__.py,sha256=qaIkE-dtA0_s400BfX7h6IIoFQlNrXwGLbuHRhGUjWA,32
18
- voice_mode/cli_commands/claude.py,sha256=Y2RekhRmo2EPbOFlo-Nt1iS-TZkISQWVGy6ekPnp1IE,7897
19
+ voice_mode/cli_commands/claude.py,sha256=IjyvTg3639f74926gLAgIxqBBHq0aWcKex_l-zApdxE,287
19
20
  voice_mode/cli_commands/exchanges.py,sha256=R8k_MtiZmDG7ST974MoDTkUKgvGgLNESzTjg2dvZRoY,16828
20
- voice_mode/cli_commands/hook.py,sha256=_VMeMtWCF-gOISw1guqiCSsVJtlSVDH8V2HMDEvw-10,7490
21
+ voice_mode/cli_commands/hook.py,sha256=72azdD0_kHlqfDRgo8udqsHYZzAftsvXgFf4LFEMBc0,7374
21
22
  voice_mode/cli_commands/pronounce_commands.py,sha256=uznL2OYGc-asQGSLciHo--o-nyuQV-ZS8ZMoBjmD6o0,7941
22
- voice_mode/cli_commands/transcribe.py,sha256=z5R8_66hRhNR-9vBWTj5gkPgbf6xV7dCxE0fpASUSJ8,4200
23
+ voice_mode/cli_commands/transcribe.py,sha256=ekcWRKVkFWAfg5IQocYJv6aZb-ard3Vd_tr1mEyYQu4,4301
23
24
  voice_mode/data/default_pronunciation.yaml,sha256=LD3TRi2R4A9h8CG5sg9tqF-fLgpMdy7je4A2irLWXY0,6048
24
25
  voice_mode/data/versions.json,sha256=84CR9_GOFEIlBouznSSIoZX7kKY_qZt5aupUgsYnvKs,1166
25
26
  voice_mode/exchanges/__init__.py,sha256=2rNsolj3FzY-3Xes6q_J6a-Eo6oTRWsl8Mu1VmJKeAE,734
@@ -32,64 +33,64 @@ voice_mode/exchanges/stats.py,sha256=UVnJnVuqmd64T_iqBLVLPjTIDoyZwRg-MZUFJMHHWxg
32
33
  voice_mode/frontend/README.md,sha256=uosvWgNiWL_sP9liv-wnDNdPmJ3oFiLstXygxyzcN7A,2131
33
34
  voice_mode/frontend/next-env.d.ts,sha256=ndnWQs24fU1bMXMhfgxFQps-R6b1z1-w6tbGROxf7QE,228
34
35
  voice_mode/frontend/next.config.mjs,sha256=5kqiwwjpFblS_IHlnDJh7ELk_3rldB6pcSXIbrkytpQ,767
35
- voice_mode/frontend/package-lock.json,sha256=Fi_sQCUvxVUHdckSUWsMgXg-a67tCAM5dD_CHKhbXDE,143483
36
+ voice_mode/frontend/package-lock.json,sha256=QX_tcffxft5W2uW0gOkasXWlGMi-dyeWJP0YkvVIekA,143960
36
37
  voice_mode/frontend/package.json,sha256=BUOh3UiaHq1D0Bww-jy2EjhOi-47rjOipeUqXONJndo,1150
37
38
  voice_mode/frontend/pnpm-lock.yaml,sha256=DSl1H3fb4tNVrHjsc5HbflJJIr95erkADNeUoFY21x4,127796
38
39
  voice_mode/frontend/postcss.config.mjs,sha256=76ZcZeF9UdWFcO3OnXArBgT99qm422Wvrtjwda-IZ8c,157
39
40
  voice_mode/frontend/tailwind.config.ts,sha256=w0mWCjy3kwryNcqgub24YLbmd2V9EvOmWSYHmsFdpkY,264
40
41
  voice_mode/frontend/tsconfig.json,sha256=VCAvHW01ulHD2uoyv2fo2iRWjsDLDDQfoLXtLOsXTy0,574
41
- voice_mode/frontend/.next/BUILD_ID,sha256=8aAOlGuT_g6glJBo4EO1IOBGDYyuyDz_YiXVZ1RR__E,21
42
- voice_mode/frontend/.next/app-build-manifest.json,sha256=6gcszv91fuCCv3mcIk-5T7hhA0eLbkTpcmEgBBUY5pg,1010
42
+ voice_mode/frontend/.next/BUILD_ID,sha256=uwWH9CrsI8oarjfct-EWT3TtObI5QA-1NNxidL_aCoo,21
43
+ voice_mode/frontend/.next/app-build-manifest.json,sha256=M91xpeVt-zqc4guaemk7sVVHNTK634Lyv0CXnqLCUfc,1010
43
44
  voice_mode/frontend/.next/app-path-routes-manifest.json,sha256=-WXlpEHFoCBUDPfxzUJleLsfZiEUU-rU0hRMZ8AVIJI,140
44
- voice_mode/frontend/.next/build-manifest.json,sha256=iP8GXzS6lyJAr2pJTbhz5lh1jfLMUiIblV4uxh582Ts,968
45
+ voice_mode/frontend/.next/build-manifest.json,sha256=Uk9BgKJTZWE44i2lWbzhvcESZhRGAoxY6V9z2tI0t3w,968
45
46
  voice_mode/frontend/.next/export-marker.json,sha256=ALjrM5QMj5hmGX14xIc2wIFDfLaFKlK3n1wQpwjMagI,94
46
47
  voice_mode/frontend/.next/images-manifest.json,sha256=Z1eB8ppSn86wfAon69Z5DSKbg7IoIvyGB8uCu88xGjs,511
47
- voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=DswWjHya8SbRE5wGSjEb65cBSckI5v5fa023sLd_66w,7314
48
- voice_mode/frontend/.next/next-server.js.nft.json,sha256=BpaAQqhgKmf_1SAPSlW4b9cX3lEJPFHreAh8qNAdDmA,109011
48
+ voice_mode/frontend/.next/next-minimal-server.js.nft.json,sha256=JhhkRQYQxl9O-SfPkGZriwCPdJgfI-erL3jsiNeC5BU,7314
49
+ voice_mode/frontend/.next/next-server.js.nft.json,sha256=ckxINEqsPrEEPZoeEbY245pF_WwSdCooNWJNGZSofhw,109011
49
50
  voice_mode/frontend/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
50
- voice_mode/frontend/.next/prerender-manifest.json,sha256=86ua4fzoYAuGgq-ygZunK2Ba4JdEvlCpjTdInqINHdI,959
51
+ voice_mode/frontend/.next/prerender-manifest.json,sha256=mKA_f_V4Y_mUwG8OEwSddQWI1Ig8kz_xicJSN67msfc,959
51
52
  voice_mode/frontend/.next/react-loadable-manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
52
- voice_mode/frontend/.next/required-server-files.json,sha256=Vi7wmtGLQ8ItMII90iUWV4kQunsxr02G6OEqRoz61xs,4748
53
+ voice_mode/frontend/.next/required-server-files.json,sha256=YqPAm-Us52t74AGKZcSPPyF-MVeTjoPuINYpG_LnNCE,4748
53
54
  voice_mode/frontend/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
54
- voice_mode/frontend/.next/trace,sha256=6LJuIuwESEtK3pOm5w27G4-6GEh5IjXW9FhRtC1kV5E,894279
55
+ voice_mode/frontend/.next/trace,sha256=fJT_hc9ZxzYT2_z4K3f22_OQefY36rrMczyw5IWo8IU,894205
55
56
  voice_mode/frontend/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
56
57
  voice_mode/frontend/.next/server/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
57
58
  voice_mode/frontend/.next/server/functions-config-manifest.json,sha256=CUXUfXux-dC5WRXm4vr6xa3f-RKEsEV1aG-hO3KK0CE,56
58
59
  voice_mode/frontend/.next/server/interception-route-rewrite-manifest.js,sha256=_FEz5ArPCeZRewc93XtcDCGNCZOISJAiEPLME_COHIE,48
59
- voice_mode/frontend/.next/server/middleware-build-manifest.js,sha256=_l0GBS4bJXL0zCeAXOdxKohnm9kvKmjPJ8MnNaduirA,888
60
+ voice_mode/frontend/.next/server/middleware-build-manifest.js,sha256=H89GegX_iWbL8-XFC5wfs1r3W4OLu_J5m7ncSSwanGE,888
60
61
  voice_mode/frontend/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
61
62
  voice_mode/frontend/.next/server/middleware-react-loadable-manifest.js,sha256=rS557JHipUQIQNo9i9IiwnmztMR-ialoMnpm9ssS64I,36
62
- voice_mode/frontend/.next/server/next-font-manifest.js,sha256=zOVSUi8cuDWbnj0J12kRmtqIZNm6XTrjpmGobubU2TI,228
63
- voice_mode/frontend/.next/server/next-font-manifest.json,sha256=4lPbb1-pG3J87z-qcuted82drP_O8owC89Zl73q0GxU,199
63
+ voice_mode/frontend/.next/server/next-font-manifest.js,sha256=KJDOlB5gXw3iPTV-Gj_syofbGDn6P8nmk5z_FjzO0pc,228
64
+ voice_mode/frontend/.next/server/next-font-manifest.json,sha256=Etww1LyAvJnsVDN1vDY9GtiO9w5uMz4Kt0WZcJsTB78,199
64
65
  voice_mode/frontend/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
65
66
  voice_mode/frontend/.next/server/server-reference-manifest.js,sha256=zgEAbADh9jvL_kGz9-3SYNlptB0KMjtwXETh753xPYw,123
66
- voice_mode/frontend/.next/server/server-reference-manifest.json,sha256=dKVx-BQwClTMEx_9PTeb69bIiAt4l8H65LSGMOw9BTc,84
67
+ voice_mode/frontend/.next/server/server-reference-manifest.json,sha256=Vb7a6mzwwSiiRBM3bV_8pEvRv-NeR9RccWvmRfX5rgY,84
67
68
  voice_mode/frontend/.next/server/webpack-runtime.js,sha256=mmuyol21D9il2KNetWeEUG5OBu3z05WsphIyIbwvads,1469
68
- voice_mode/frontend/.next/server/app/_not-found.html,sha256=JC1gBG4rGAlaB2hAutUut63_qA_agu1q0qsS6KIFhck,6752
69
+ voice_mode/frontend/.next/server/app/_not-found.html,sha256=o2fOJXUDax57tA3PMcBf_hJ7IgvEJkO0jVzmF7MAn20,6752
69
70
  voice_mode/frontend/.next/server/app/_not-found.meta,sha256=8-vSzkZIhJgJ7_uOmMyzHNf5QN3Exhbk-5ObKal4lrc,142
70
- voice_mode/frontend/.next/server/app/_not-found.rsc,sha256=g0bxwLKNKE6t2r2csPNtNYdgOwYJeHiZFMrQ9RkM7aQ,3621
71
+ voice_mode/frontend/.next/server/app/_not-found.rsc,sha256=SKMfyAO08c4YoP6I4EnzKfd3yLQza7soL4Cqie-AJEk,3621
71
72
  voice_mode/frontend/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
72
73
  voice_mode/frontend/.next/server/app/favicon.ico.meta,sha256=iac7LJDMkBlPpPPzKMbIDSh2bqoxNKhYx_5nQjo5Tds,211
73
- voice_mode/frontend/.next/server/app/index.html,sha256=9_vv2N8htsxg33721qN8sZTaf7P5KcQC8aEvBouA3mc,5396
74
+ voice_mode/frontend/.next/server/app/index.html,sha256=nDwxVrhqdT-u5Zp3R6xMl5RbqgLxKMlgQC5UrwfifJI,5396
74
75
  voice_mode/frontend/.next/server/app/index.meta,sha256=BDswoSxeaM0dEV3Vl3-2HNVKE5mS5NQhBYZcQQt5mnQ,80
75
- voice_mode/frontend/.next/server/app/index.rsc,sha256=vAuO3EcIK5hhG9OA8PTjHPz9yay2n2y3i0E9FvcoS-o,2438
76
- voice_mode/frontend/.next/server/app/page.js,sha256=p-Jk5HzSixBtlRrXrJOPB_p-MnGaxBT5i21kgps5AXQ,611918
76
+ voice_mode/frontend/.next/server/app/index.rsc,sha256=9U4oHjDLB6shYsBmlIcKnGr2rwHtn8LMI6Q3ZNnEXEU,2438
77
+ voice_mode/frontend/.next/server/app/page.js,sha256=0WZDWzOYLkV2VSqHuweUdebS9dP5lyW_NstRYFMHWsk,611918
77
78
  voice_mode/frontend/.next/server/app/page.js.nft.json,sha256=6plKkaMV7NDsYDUQsMAnayayODq1vS_l6nRXRrm9Trg,1168
78
- voice_mode/frontend/.next/server/app/page_client-reference-manifest.js,sha256=qLIZH2DpJ_ZcZQdiaNjYHHm8IAkr81QZEV-CGnkL554,4174
79
- voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=3MnPjFBkiq8RQ4NQShGYU79lgpW5gmzdjX3RwXTCc_k,3386
79
+ voice_mode/frontend/.next/server/app/page_client-reference-manifest.js,sha256=ks378kKNdfMZGmoH30tGYTyT_Bwl2CxJA3eGjZKBhSo,4174
80
+ voice_mode/frontend/.next/server/app/_not-found/page.js,sha256=YNiqeK6PwREkGW_rxXT8vrsmjBCBwiny-bWVbO6V_XY,3386
80
81
  voice_mode/frontend/.next/server/app/_not-found/page.js.nft.json,sha256=7Z_Wav7koMsnepi3GignvrVRYuDbzwvKqqg84LuoSis,1195
81
- voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=T9pGbY9xlpdHi4i4fuBirAmfcOftD9vJ_g8cR3wc6is,4277
82
- voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=Y2--lV0QAx3n8ov6xa34ZYj80bG8nBCtEC5_N88XlIY,121019
82
+ voice_mode/frontend/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=5yW_VYN1UTrD-YMXodvcS4TMa1EyaDRJwVJrEUYDg7k,4277
83
+ voice_mode/frontend/.next/server/app/api/connection-details/route.js,sha256=q_nmDfRHqDZjbGSXZS8624CyltRD80EzIdPINNIg5gs,121019
83
84
  voice_mode/frontend/.next/server/app/api/connection-details/route.js.nft.json,sha256=qjdiqEpb5s6iSOQsC1MI3A0_sVjbF9Eh1t1mR_VcS9o,1327
84
- voice_mode/frontend/.next/server/app/favicon.ico/route.js,sha256=JzzxzNYiKkoV-4ACmhlIFSE55zos05pZccR1QB9B4Os,66227
85
+ voice_mode/frontend/.next/server/app/favicon.ico/route.js,sha256=A3xPZnpozeM9zvcSK15Rm_GuVQJCFHq_PMEkLdNMJOo,66227
85
86
  voice_mode/frontend/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
86
87
  voice_mode/frontend/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
87
88
  voice_mode/frontend/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
88
89
  voice_mode/frontend/.next/server/chunks/948.js,sha256=2QNDLi5TnS9qLpgKRmsx_sJzO2vtdQJIRn124o6fjeI,57650
89
- voice_mode/frontend/.next/server/chunks/994.js,sha256=Xt4544xc7mag8qemm6ANIpIBVIBU1qpLEhLx4dp31hA,95353
90
+ voice_mode/frontend/.next/server/chunks/994.js,sha256=GZ_bT2EbqmIl9Df4AmZUsEgEvZVZmUh3_4-WHXYXBcQ,95353
90
91
  voice_mode/frontend/.next/server/chunks/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
91
- voice_mode/frontend/.next/server/pages/404.html,sha256=JC1gBG4rGAlaB2hAutUut63_qA_agu1q0qsS6KIFhck,6752
92
- voice_mode/frontend/.next/server/pages/500.html,sha256=8WQ-_4yb1XJuH3gbQAxC-bcPxA0WUifezGfAwf8DV9k,1995
92
+ voice_mode/frontend/.next/server/pages/404.html,sha256=o2fOJXUDax57tA3PMcBf_hJ7IgvEJkO0jVzmF7MAn20,6752
93
+ voice_mode/frontend/.next/server/pages/500.html,sha256=3pca5QdeyFIPZfALN9DObaQGVgZA5U-CM2bSKBOdmqo,1995
93
94
  voice_mode/frontend/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
94
95
  voice_mode/frontend/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
95
96
  voice_mode/frontend/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
@@ -97,70 +98,70 @@ voice_mode/frontend/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRyt
97
98
  voice_mode/frontend/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
98
99
  voice_mode/frontend/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
99
100
  voice_mode/frontend/.next/standalone/package.json,sha256=BUOh3UiaHq1D0Bww-jy2EjhOi-47rjOipeUqXONJndo,1150
100
- voice_mode/frontend/.next/standalone/server.js,sha256=6h2eS5Ip2Q2xKxSwYszTI_2vqTpsXILLifxSipd8qFI,4741
101
- voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=8aAOlGuT_g6glJBo4EO1IOBGDYyuyDz_YiXVZ1RR__E,21
102
- voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=6gcszv91fuCCv3mcIk-5T7hhA0eLbkTpcmEgBBUY5pg,1010
101
+ voice_mode/frontend/.next/standalone/server.js,sha256=qIRqhEvFh9d9RfRKssE1Z6W4oLK_JYeTJWYI0YRJhtY,4741
102
+ voice_mode/frontend/.next/standalone/.next/BUILD_ID,sha256=uwWH9CrsI8oarjfct-EWT3TtObI5QA-1NNxidL_aCoo,21
103
+ voice_mode/frontend/.next/standalone/.next/app-build-manifest.json,sha256=M91xpeVt-zqc4guaemk7sVVHNTK634Lyv0CXnqLCUfc,1010
103
104
  voice_mode/frontend/.next/standalone/.next/app-path-routes-manifest.json,sha256=-WXlpEHFoCBUDPfxzUJleLsfZiEUU-rU0hRMZ8AVIJI,140
104
- voice_mode/frontend/.next/standalone/.next/build-manifest.json,sha256=iP8GXzS6lyJAr2pJTbhz5lh1jfLMUiIblV4uxh582Ts,968
105
+ voice_mode/frontend/.next/standalone/.next/build-manifest.json,sha256=Uk9BgKJTZWE44i2lWbzhvcESZhRGAoxY6V9z2tI0t3w,968
105
106
  voice_mode/frontend/.next/standalone/.next/package.json,sha256=CRoE-mfHkHuY4Qb8_4uWThMSl1T85y0k8wJbl8SIf6M,20
106
- voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=86ua4fzoYAuGgq-ygZunK2Ba4JdEvlCpjTdInqINHdI,959
107
+ voice_mode/frontend/.next/standalone/.next/prerender-manifest.json,sha256=mKA_f_V4Y_mUwG8OEwSddQWI1Ig8kz_xicJSN67msfc,959
107
108
  voice_mode/frontend/.next/standalone/.next/react-loadable-manifest.json,sha256=RBNvo1WzZ4oRRq0W9-hknpT7T8If536DEMBg9hyq_4o,2
108
- voice_mode/frontend/.next/standalone/.next/required-server-files.json,sha256=Vi7wmtGLQ8ItMII90iUWV4kQunsxr02G6OEqRoz61xs,4748
109
+ voice_mode/frontend/.next/standalone/.next/required-server-files.json,sha256=YqPAm-Us52t74AGKZcSPPyF-MVeTjoPuINYpG_LnNCE,4748
109
110
  voice_mode/frontend/.next/standalone/.next/routes-manifest.json,sha256=DqV6K_WLiS6wKvdr8TpF7-uBhH7xbrg7xeznwWaeO70,831
110
111
  voice_mode/frontend/.next/standalone/.next/server/app-paths-manifest.json,sha256=Xyxtr52aubW5XDHj7Ms66qiSJfwCkBVeL3ekU8uh2os,202
111
112
  voice_mode/frontend/.next/standalone/.next/server/font-manifest.json,sha256=T1PNoYwrqgwDVLtfmj7L5e0Sq02OEbqHPC8RFhICuUU,2
112
- voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js,sha256=_l0GBS4bJXL0zCeAXOdxKohnm9kvKmjPJ8MnNaduirA,888
113
+ voice_mode/frontend/.next/standalone/.next/server/middleware-build-manifest.js,sha256=H89GegX_iWbL8-XFC5wfs1r3W4OLu_J5m7ncSSwanGE,888
113
114
  voice_mode/frontend/.next/standalone/.next/server/middleware-manifest.json,sha256=CoUgvH4Hb3rnF8LWJxOZDIPoo9dGJvMno4RLwFBOIQw,83
114
115
  voice_mode/frontend/.next/standalone/.next/server/middleware-react-loadable-manifest.js,sha256=rS557JHipUQIQNo9i9IiwnmztMR-ialoMnpm9ssS64I,36
115
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js,sha256=zOVSUi8cuDWbnj0J12kRmtqIZNm6XTrjpmGobubU2TI,228
116
- voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=4lPbb1-pG3J87z-qcuted82drP_O8owC89Zl73q0GxU,199
116
+ voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.js,sha256=KJDOlB5gXw3iPTV-Gj_syofbGDn6P8nmk5z_FjzO0pc,228
117
+ voice_mode/frontend/.next/standalone/.next/server/next-font-manifest.json,sha256=Etww1LyAvJnsVDN1vDY9GtiO9w5uMz4Kt0WZcJsTB78,199
117
118
  voice_mode/frontend/.next/standalone/.next/server/pages-manifest.json,sha256=CtIVJgXR_t73dArygJmC6GsgbxLMM1N2fAUgg0-bUc8,111
118
119
  voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.js,sha256=zgEAbADh9jvL_kGz9-3SYNlptB0KMjtwXETh753xPYw,123
119
- voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json,sha256=dKVx-BQwClTMEx_9PTeb69bIiAt4l8H65LSGMOw9BTc,84
120
+ voice_mode/frontend/.next/standalone/.next/server/server-reference-manifest.json,sha256=Vb7a6mzwwSiiRBM3bV_8pEvRv-NeR9RccWvmRfX5rgY,84
120
121
  voice_mode/frontend/.next/standalone/.next/server/webpack-runtime.js,sha256=mmuyol21D9il2KNetWeEUG5OBu3z05WsphIyIbwvads,1469
121
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html,sha256=JC1gBG4rGAlaB2hAutUut63_qA_agu1q0qsS6KIFhck,6752
122
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found.html,sha256=o2fOJXUDax57tA3PMcBf_hJ7IgvEJkO0jVzmF7MAn20,6752
122
123
  voice_mode/frontend/.next/standalone/.next/server/app/_not-found.meta,sha256=8-vSzkZIhJgJ7_uOmMyzHNf5QN3Exhbk-5ObKal4lrc,142
123
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc,sha256=g0bxwLKNKE6t2r2csPNtNYdgOwYJeHiZFMrQ9RkM7aQ,3621
124
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found.rsc,sha256=SKMfyAO08c4YoP6I4EnzKfd3yLQza7soL4Cqie-AJEk,3621
124
125
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico.body,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
125
126
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico.meta,sha256=iac7LJDMkBlPpPPzKMbIDSh2bqoxNKhYx_5nQjo5Tds,211
126
- voice_mode/frontend/.next/standalone/.next/server/app/index.html,sha256=9_vv2N8htsxg33721qN8sZTaf7P5KcQC8aEvBouA3mc,5396
127
+ voice_mode/frontend/.next/standalone/.next/server/app/index.html,sha256=nDwxVrhqdT-u5Zp3R6xMl5RbqgLxKMlgQC5UrwfifJI,5396
127
128
  voice_mode/frontend/.next/standalone/.next/server/app/index.meta,sha256=BDswoSxeaM0dEV3Vl3-2HNVKE5mS5NQhBYZcQQt5mnQ,80
128
- voice_mode/frontend/.next/standalone/.next/server/app/index.rsc,sha256=vAuO3EcIK5hhG9OA8PTjHPz9yay2n2y3i0E9FvcoS-o,2438
129
- voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=p-Jk5HzSixBtlRrXrJOPB_p-MnGaxBT5i21kgps5AXQ,611918
129
+ voice_mode/frontend/.next/standalone/.next/server/app/index.rsc,sha256=9U4oHjDLB6shYsBmlIcKnGr2rwHtn8LMI6Q3ZNnEXEU,2438
130
+ voice_mode/frontend/.next/standalone/.next/server/app/page.js,sha256=0WZDWzOYLkV2VSqHuweUdebS9dP5lyW_NstRYFMHWsk,611918
130
131
  voice_mode/frontend/.next/standalone/.next/server/app/page.js.nft.json,sha256=6plKkaMV7NDsYDUQsMAnayayODq1vS_l6nRXRrm9Trg,1168
131
- voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js,sha256=qLIZH2DpJ_ZcZQdiaNjYHHm8IAkr81QZEV-CGnkL554,4174
132
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=3MnPjFBkiq8RQ4NQShGYU79lgpW5gmzdjX3RwXTCc_k,3386
132
+ voice_mode/frontend/.next/standalone/.next/server/app/page_client-reference-manifest.js,sha256=ks378kKNdfMZGmoH30tGYTyT_Bwl2CxJA3eGjZKBhSo,4174
133
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js,sha256=YNiqeK6PwREkGW_rxXT8vrsmjBCBwiny-bWVbO6V_XY,3386
133
134
  voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page.js.nft.json,sha256=7Z_Wav7koMsnepi3GignvrVRYuDbzwvKqqg84LuoSis,1195
134
- voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=T9pGbY9xlpdHi4i4fuBirAmfcOftD9vJ_g8cR3wc6is,4277
135
- voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=Y2--lV0QAx3n8ov6xa34ZYj80bG8nBCtEC5_N88XlIY,121019
135
+ voice_mode/frontend/.next/standalone/.next/server/app/_not-found/page_client-reference-manifest.js,sha256=5yW_VYN1UTrD-YMXodvcS4TMa1EyaDRJwVJrEUYDg7k,4277
136
+ voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js,sha256=q_nmDfRHqDZjbGSXZS8624CyltRD80EzIdPINNIg5gs,121019
136
137
  voice_mode/frontend/.next/standalone/.next/server/app/api/connection-details/route.js.nft.json,sha256=qjdiqEpb5s6iSOQsC1MI3A0_sVjbF9Eh1t1mR_VcS9o,1327
137
- voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js,sha256=JzzxzNYiKkoV-4ACmhlIFSE55zos05pZccR1QB9B4Os,66227
138
+ voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js,sha256=A3xPZnpozeM9zvcSK15Rm_GuVQJCFHq_PMEkLdNMJOo,66227
138
139
  voice_mode/frontend/.next/standalone/.next/server/app/favicon.ico/route.js.nft.json,sha256=xn4G0NuxuIbLuaN_3PVtjN4lYs5MWduPcvqhdZwRNkQ,1248
139
140
  voice_mode/frontend/.next/standalone/.next/server/chunks/463.js,sha256=9Fg9G6vSgz6lLnnirTbzQKyy5MQAf59a16SvYM0xDFc,6201
140
141
  voice_mode/frontend/.next/standalone/.next/server/chunks/682.js,sha256=dxTmuBsZ77qjHYtQvwM0HeoE4FnESxOOpTnhW3ABg18,33636
141
142
  voice_mode/frontend/.next/standalone/.next/server/chunks/948.js,sha256=2QNDLi5TnS9qLpgKRmsx_sJzO2vtdQJIRn124o6fjeI,57650
142
- voice_mode/frontend/.next/standalone/.next/server/chunks/994.js,sha256=Xt4544xc7mag8qemm6ANIpIBVIBU1qpLEhLx4dp31hA,95353
143
- voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=JC1gBG4rGAlaB2hAutUut63_qA_agu1q0qsS6KIFhck,6752
144
- voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=8WQ-_4yb1XJuH3gbQAxC-bcPxA0WUifezGfAwf8DV9k,1995
143
+ voice_mode/frontend/.next/standalone/.next/server/chunks/994.js,sha256=GZ_bT2EbqmIl9Df4AmZUsEgEvZVZmUh3_4-WHXYXBcQ,95353
144
+ voice_mode/frontend/.next/standalone/.next/server/pages/404.html,sha256=o2fOJXUDax57tA3PMcBf_hJ7IgvEJkO0jVzmF7MAn20,6752
145
+ voice_mode/frontend/.next/standalone/.next/server/pages/500.html,sha256=3pca5QdeyFIPZfALN9DObaQGVgZA5U-CM2bSKBOdmqo,1995
145
146
  voice_mode/frontend/.next/standalone/.next/server/pages/_app.js,sha256=xv0yBH2BTySxH6d7_oFG8KbedK3Jhvvg9SQ7pSaSPrE,3291
146
147
  voice_mode/frontend/.next/standalone/.next/server/pages/_app.js.nft.json,sha256=4DM09IfF6_ws-h14UVrroVq0Ri8tNeDEwwZ2c244nKM,517
147
148
  voice_mode/frontend/.next/standalone/.next/server/pages/_document.js,sha256=q-VJKG6tPCpEYWhP0UobYWG_naYdKPuqkRpb4HGMV_Y,378
148
149
  voice_mode/frontend/.next/standalone/.next/server/pages/_document.js.nft.json,sha256=7WnWXoJIsRytU5c-NAEx-tGGNI1TP2CMldwr8xtDQYk,1932
149
150
  voice_mode/frontend/.next/standalone/.next/server/pages/_error.js,sha256=1se20NEwePcXdV17_wUw4YhoMwVAenxiXI74aXSRqzU,8619
150
151
  voice_mode/frontend/.next/standalone/.next/server/pages/_error.js.nft.json,sha256=uK8O79iTeItVu_-Dz90fkTMA1GYxQEpTWU8TndjkfVQ,1855
151
- voice_mode/frontend/.next/static/-9MkXl-xGB2BLmGEAZVmg/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
152
- voice_mode/frontend/.next/static/-9MkXl-xGB2BLmGEAZVmg/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
152
+ voice_mode/frontend/.next/static/Ni4GIqyDdn0QehvmlLBZg/_buildManifest.js,sha256=UGi5XJhF4u-NRxMqU360JM2afxCS1essSVUEqY6sl5c,224
153
+ voice_mode/frontend/.next/static/Ni4GIqyDdn0QehvmlLBZg/_ssgManifest.js,sha256=Z49s4suAsf5y_GfnQSvm4qtq2ggxEbZPfEDTXjy6XgA,80
153
154
  voice_mode/frontend/.next/static/chunks/117-40bc79a2b97edb21.js,sha256=sKMdOWIlJELukIK1QNRwH8hweTr_NgWzvc-bHWrZ9zM,123528
154
155
  voice_mode/frontend/.next/static/chunks/144d3bae-2d5f122b82426d88.js,sha256=tGa8lG7iuv-oxVEA7BdFJPmskDLIVXYnDOBb6j4_zp8,383332
155
156
  voice_mode/frontend/.next/static/chunks/471-bd4b96a33883dfa2.js,sha256=qT-fK-XMK3eAlXh2APHuRcKfG9EriUu-tXTEcNYWUp0,194375
156
157
  voice_mode/frontend/.next/static/chunks/fd9d1056-af324d327b243cf1.js,sha256=uL3flIHYWdZI4eBQ-DIus97-PdP5vRP0xE3W8uz1q4A,172834
157
158
  voice_mode/frontend/.next/static/chunks/framework-f66176bb897dc684.js,sha256=QlDVPwvHVuzi3daQoAit0df9yIdSjGcfTf6NkW13h7c,139978
158
159
  voice_mode/frontend/.next/static/chunks/main-3163eca598b76a9f.js,sha256=IwuNOgi-ik3KFA_tnaPvAfRY5q6hTp4DRK1lkjkWdwQ,116431
159
- voice_mode/frontend/.next/static/chunks/main-app-991c8c54319817e0.js,sha256=2SeC7_cYvyE3__VgYPexp8W-R1UfmQgUaaaY4PAbVgc,461
160
+ voice_mode/frontend/.next/static/chunks/main-app-78da5e437b6a2a9f.js,sha256=Fc9dpAVJITfVqhlZHrOFsK4QMOAnvemztRs125QztO4,461
160
161
  voice_mode/frontend/.next/static/chunks/polyfills-42372ed130431b0a.js,sha256=CXPB1kyIrcjjyVBBDLWLKI9yEY1ZZbeASUON648vloM,112594
161
162
  voice_mode/frontend/.next/static/chunks/webpack-0ea9b80f19935b70.js,sha256=1Us0m_ZxEgMEb2DAN4ePlpq9Fv7QqUxcuV2CqICEB5w,3605
162
- voice_mode/frontend/.next/static/chunks/app/layout-d89915a94cb8f604.js,sha256=5J9sorkHbUm5F6-7ARyDp7z2JdJfx8J0mHp6qSXnB-U,507
163
- voice_mode/frontend/.next/static/chunks/app/page-728ce55710c9bd80.js,sha256=RXG92Dod4I3pK_QlzjLeDwsNa2r_S7sjclgiWr9-Q90,7666
163
+ voice_mode/frontend/.next/static/chunks/app/layout-d3ec7f6f14ea7396.js,sha256=PZmYlyqPYRTArR_jFOgop-H9sA_cEJIJe5GackFd4S4,505
164
+ voice_mode/frontend/.next/static/chunks/app/page-471796963fb1a4bd.js,sha256=rrj7lYD4DJ-B5ZgtI39U703cBKh5uzSyCQKAHKbb3Mo,7666
164
165
  voice_mode/frontend/.next/static/chunks/app/_not-found/page-5011050e402ab9c8.js,sha256=u5LYOU4LZ2HFeEcz6xZqSflSnU4WDt-TnQNu3CdcEWk,1745
165
166
  voice_mode/frontend/.next/static/chunks/pages/_app-72b849fbd24ac258.js,sha256=QN-PY1h1HDIO4K4ZYwFl6rtEeaxWCynYauVLK_oWmzE,280
166
167
  voice_mode/frontend/.next/static/chunks/pages/_error-7ba65e1336b92748.js,sha256=oxr2dz6MkKWnm3jN3fWb2RPhCHB4-JgrzVMS_wTNr_E,247
@@ -169,9 +170,9 @@ voice_mode/frontend/.next/static/media/01099be941da1820-s.woff2,sha256=ZaNN8qxUZ
169
170
  voice_mode/frontend/.next/static/media/39883d31a7792467-s.p.woff2,sha256=i_qVPOm6vZ-H4B0Mk_d5yUQR_YKsz4XRc-8J2R_QWKs,14620
170
171
  voice_mode/frontend/.next/static/media/6368404d2e8d66fe-s.woff2,sha256=2GFQ1JjbLJOSmwrIsgCHPVMSJpcx2QX2i13kJbg8IFE,4464
171
172
  voice_mode/frontend/.next/types/package.json,sha256=49WkothVGqUsWgHSoO-y4GotlxG09cXx0g3m4hgH4s0,18
172
- voice_mode/frontend/.next/types/app/layout.ts,sha256=SZZ5WmmuUaiOWcg4rB15BE8mOtVeQSTPgauc91qOxA8,3510
173
- voice_mode/frontend/.next/types/app/page.ts,sha256=CO7Y93obHbQarBsdIrQygjsQOH84fWzY0dXwEjE_wVw,3498
174
- voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=pMYfeWv_Uw6FHH5cAciYXOGl96X2INGLu2UOggzClNw,8530
173
+ voice_mode/frontend/.next/types/app/layout.ts,sha256=pkpEdeIwMTU122iWWkR5iOLDv5pmhOWO_HgGat4k_5k,3510
174
+ voice_mode/frontend/.next/types/app/page.ts,sha256=2mHb-74tKKjHxzVKjE8pNuZtzA0WavzIUtH3gyNbtWI,3498
175
+ voice_mode/frontend/.next/types/app/api/connection-details/route.ts,sha256=U1GEQYbDO60uaCTBISWx1_g_oTQdLARjnhXf5pZzeQg,8530
175
176
  voice_mode/frontend/app/favicon.ico,sha256=Cc2QdQ-OI3iME7dIf86sbqXHW3D8LPUprF_KB2KZogI,15406
176
177
  voice_mode/frontend/app/globals.css,sha256=yMCx8ta7sGyt40nzBTlRR644nlAGGYt73zj7e9YLgl4,362
177
178
  voice_mode/frontend/app/layout.tsx,sha256=Q0LYcf_Z8GT8zDhlWgk7XEZArp2ZS2HpB1tmv3epp68,537
@@ -207,18 +208,17 @@ voice_mode/templates/systemd/voicemode-frontend.service,sha256=sWIu_9e24Zo3OKP3X
207
208
  voice_mode/templates/systemd/voicemode-kokoro.service,sha256=5JGv_Xf9u2MvmbGLBQtNy07i3T0-KsJHPF06FkN40ms,927
208
209
  voice_mode/templates/systemd/voicemode-livekit.service,sha256=hVjT4Vd0SOABXGYbp9iF9R6SWtXXLfRXt7i1xbud6Lg,692
209
210
  voice_mode/templates/systemd/voicemode-whisper.service,sha256=aa5gIHI9xKF0M_DY6SO95QHRFhkV2JOzmFVo2U8RhN4,844
210
- voice_mode/tools/__init__.py,sha256=Hd8-dNoB58apt6PqMCfGHYDAeQWbarFrMRfxseJi8Jo,1069
211
- voice_mode/tools/claude_thinking.py,sha256=MKKhk1gxCKmAEKyCmO0iccB491VHJI_LueyUpLAD5Rw,11028
211
+ voice_mode/tools/__init__.py,sha256=6xmQqxJfRTv_CN9IMiXFuGxjxk3FgojAeh6F6f3JyYE,5353
212
212
  voice_mode/tools/configuration_management.py,sha256=jR6WYsrkeWRohI8_9kk48YQ6GNwdiMAuTXx3vln_m4w,12748
213
- voice_mode/tools/converse.py,sha256=7wKF0rcU_gO6b4YcyvlfQFPx6ALqVIV5OREhclpRLDE,104926
213
+ voice_mode/tools/converse.py,sha256=5bz9EL9v6IEJ3LCQ4_V4L49xaHPuzGdlxmevRorPPPE,97613
214
214
  voice_mode/tools/dependencies.py,sha256=V72gS_bD0pCmW_be2Hxs_cEnIoNPFKlK7rE9cLMTDGE,6670
215
215
  voice_mode/tools/devices.py,sha256=v0KV-Rix2lKZMFfVcobHiJB_6NnPAJsuZI5LXYHlgl0,10446
216
- voice_mode/tools/diagnostics.py,sha256=pWl9wwaBMJubBKhWOVbNIGeYet84ECVshtPok-v2pl8,2059
216
+ voice_mode/tools/diagnostics.py,sha256=SuxRHQCDoSLQhcu_AJpQvd8TZx2WDysK_TpRmZu0-Vw,2127
217
217
  voice_mode/tools/pronounce.py,sha256=neyJXqQxclI8wUAnLOGBCfMXHzvS31NBuaEnt6GLovA,8915
218
218
  voice_mode/tools/providers.py,sha256=KuO5lFmSHjYUoK3hjIqx3l7XeNOLPMAeXQnTtH00Iow,7768
219
219
  voice_mode/tools/service.py,sha256=ll7BsUdSaXSGjtElZf7vSmOspe92ZIyIB-UaYbLrdf4,46454
220
- voice_mode/tools/statistics.py,sha256=XMljbNCBqatPgyh6rq1LZ3ICNEmji2c82P7pyCZfr8Q,9326
221
- voice_mode/tools/voice_registry.py,sha256=iw3O4C8lsdon9fr1ZMchc0Uq7MmSmTOYReY9NfQlEhU,2354
220
+ voice_mode/tools/statistics.py,sha256=5vIbC6-BMxwSjP8BclKjJv-LGm50ncB8Ex9XXmZgRfo,8003
221
+ voice_mode/tools/voice_registry.py,sha256=Sfd1EHlSegOtUK4kHhW9SfP03XFZXJZA4eHo60lY5qM,2224
222
222
  voice_mode/tools/services/list_versions.py,sha256=r_FzHG_2dVxEzDXfxVfPInchGq1h9_4yvJ9ySkinsJk,2573
223
223
  voice_mode/tools/services/version_info.py,sha256=K5CzUlaIpHJKDnudfCeIydOwIhaDTOM59e8FQ1Yyj4A,11344
224
224
  voice_mode/tools/services/kokoro/install.py,sha256=qir72x98o93zCDT-VEXvp0Hj63WYUj1BUHo1_2rJJ44,25188
@@ -260,7 +260,7 @@ voice_mode/utils/services/kokoro_helpers.py,sha256=57NsS1i4ptk5Gg3zm5g68QhtV3aU3
260
260
  voice_mode/utils/services/livekit_helpers.py,sha256=OFw0GxVIJAZE2m9dGCDZVegWD-LnMO6iSjcOUDgAA9U,3627
261
261
  voice_mode/utils/services/whisper_helpers.py,sha256=1Oy9TR5g5-l6j07KaWlAoijkCUDGaTWIz__BXvV0TWw,19632
262
262
  voice_mode/utils/services/whisper_version.py,sha256=68e0Oa-tG73IJlla-e3P0sh_qzBF4ToYBe4KKZ2FvEY,4861
263
- voice_mode-4.3.2.dist-info/METADATA,sha256=WnjXpvONNycoXLVywqF80ZWd-pmUZIYjjTIzQa3zuLE,25488
264
- voice_mode-4.3.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
265
- voice_mode-4.3.2.dist-info/entry_points.txt,sha256=hS5faHc0R5Fde3Z_uvz8u6YkRIYtvh17X8tVN90Rbro,95
266
- voice_mode-4.3.2.dist-info/RECORD,,
263
+ voice_mode-4.5.0.dist-info/METADATA,sha256=97fHyPbIN95NU7qgxEOWWXbnjjFISbcMF7G9bybv2pY,24390
264
+ voice_mode-4.5.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
265
+ voice_mode-4.5.0.dist-info/entry_points.txt,sha256=hS5faHc0R5Fde3Z_uvz8u6YkRIYtvh17X8tVN90Rbro,95
266
+ voice_mode-4.5.0.dist-info/RECORD,,
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{3030: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=3030)}),_N_E=n.O()}]);