voice-mode 4.3.2__tar.gz → 4.5.0__tar.gz
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-4.3.2 → voice_mode-4.5.0}/CHANGELOG.md +87 -1
- {voice_mode-4.3.2 → voice_mode-4.5.0}/PKG-INFO +36 -41
- {voice_mode-4.3.2 → voice_mode-4.5.0}/README.md +35 -40
- {voice_mode-4.3.2 → voice_mode-4.5.0}/pyproject.toml +8 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/__version__.py +1 -1
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/cli.py +82 -5
- voice_mode-4.5.0/voice_mode/cli_commands/claude.py +15 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/cli_commands/hook.py +13 -16
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/cli_commands/transcribe.py +7 -6
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/config.py +1 -1
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/conversation_logger.py +6 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/core.py +9 -2
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/provider_discovery.py +55 -79
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/providers.py +61 -45
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/simple_failover.py +41 -12
- voice_mode-4.5.0/voice_mode/statistics_tracking.py +42 -0
- voice_mode-4.5.0/voice_mode/tools/__init__.py +158 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/converse.py +149 -338
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/diagnostics.py +2 -1
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/statistics.py +0 -33
- voice_mode-4.5.0/voice_mode/tools/voice_registry.py +62 -0
- voice_mode-4.3.2/voice_mode/cli_commands/claude.py +0 -208
- voice_mode-4.3.2/voice_mode/tools/__init__.py +0 -24
- voice_mode-4.3.2/voice_mode/tools/claude_thinking.py +0 -285
- voice_mode-4.3.2/voice_mode/tools/voice_registry.py +0 -66
- {voice_mode-4.3.2 → voice_mode-4.5.0}/.gitignore +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/build_hooks.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/__main__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/cli_commands/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/cli_commands/exchanges.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/cli_commands/pronounce_commands.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/data/default_pronunciation.yaml +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/data/versions.json +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/exchanges/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/exchanges/conversations.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/exchanges/filters.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/exchanges/formatters.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/exchanges/models.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/exchanges/reader.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/exchanges/stats.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/README.md +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/app/api/connection-details/route.ts +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/app/favicon.ico +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/app/globals.css +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/app/layout.tsx +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/app/page.tsx +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/components/CloseIcon.tsx +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/components/NoAgentNotification.tsx +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/components/TranscriptionView.tsx +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/hooks/useCombinedTranscriptions.ts +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/hooks/useLocalMicTrack.ts +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/next-env.d.ts +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/next.config.mjs +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/package-lock.json +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/package.json +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/pnpm-lock.yaml +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/postcss.config.mjs +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/tailwind.config.ts +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/frontend/tsconfig.json +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/prompts/README.md +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/prompts/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/prompts/converse.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/prompts/release_notes.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/prompts/services.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/pronounce.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/resources/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/resources/audio_files.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/resources/changelog.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/resources/configuration.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/resources/statistics.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/resources/version.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/resources/whisper_models.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/server.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/shared.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/statistics.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/streaming.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/launchd/com.voicemode.frontend.plist +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/launchd/com.voicemode.kokoro.plist +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/launchd/com.voicemode.livekit.plist +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/launchd/com.voicemode.whisper.plist +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/launchd/start-kokoro-with-health-check.sh +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/launchd/start-whisper-with-health-check.sh +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/scripts/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/scripts/start-whisper-server.sh +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/systemd/voicemode-frontend.service +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/systemd/voicemode-kokoro.service +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/systemd/voicemode-livekit.service +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/templates/systemd/voicemode-whisper.service +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/configuration_management.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/dependencies.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/devices.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/pronounce.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/providers.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/service.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/kokoro/install.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/kokoro/uninstall.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/list_versions.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/livekit/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/livekit/frontend.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/livekit/install.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/livekit/production_server.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/livekit/uninstall.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/version_info.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/install.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/list_models.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/model_active.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/model_benchmark.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/model_install.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/model_remove.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/models.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/services/whisper/uninstall.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/sound_fonts/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/sound_fonts/audio_player.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/sound_fonts/hook_handler.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/sound_fonts/player.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/transcription/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/transcription/backends.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/transcription/core.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/transcription/formats.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/tools/transcription/types.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/__init__.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/audio_diagnostics.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/event_logger.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/ffmpeg_check.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/format_migration.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/gpu_detection.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/migration_helpers.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/services/common.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/services/coreml_setup.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/services/kokoro_helpers.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/services/livekit_helpers.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/services/whisper_helpers.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/services/whisper_version.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/utils/version_helpers.py +0 -0
- {voice_mode-4.3.2 → voice_mode-4.5.0}/voice_mode/version.py +0 -0
@@ -7,12 +7,98 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
|
+
## [4.5.0] - 2025-09-18
|
11
|
+
|
12
|
+
### Added
|
13
|
+
- **Enhanced STT Logging**
|
14
|
+
- Add comprehensive logging for speech-to-text operations
|
15
|
+
- Log provider selection and fallback attempts
|
16
|
+
- Include transcription details and provider info in logs
|
17
|
+
|
18
|
+
- **Configuration Management**
|
19
|
+
- Add `voicemode config edit` command for easy configuration file editing
|
20
|
+
- Support custom editor selection via --editor flag
|
21
|
+
- Automatically open configuration file in default editor
|
22
|
+
|
23
|
+
- **Tool Environment Variables**
|
24
|
+
- Replace VOICEMODE_TOOLS with VOICEMODE_TOOLS_ENABLED and VOICEMODE_TOOLS_DISABLED
|
25
|
+
- Allow fine-grained control over tool availability
|
26
|
+
- Support comma-separated lists for enabling/disabling specific tools
|
27
|
+
|
28
|
+
### Changed
|
29
|
+
- **Provider Selection Architecture**
|
30
|
+
- Consolidate dual provider selection systems into single simple failover approach
|
31
|
+
- Remove SIMPLE_FAILOVER configuration - simple failover is now the only mode
|
32
|
+
- Simplify get_tts_config and get_stt_config to use direct configuration
|
33
|
+
- Eliminate ~400 lines of unused provider registry selection logic
|
34
|
+
- Provider registry now only stores endpoint info without complex selection
|
35
|
+
|
36
|
+
### Fixed
|
37
|
+
- Disable OpenAI client retries for local endpoints to avoid delays
|
38
|
+
- Fix logger name consistency (voicemode vs voice-mode) for STT logging
|
39
|
+
- Prevent test_installers from killing running voice services during tests
|
40
|
+
- Update tests to work with refactored provider system
|
41
|
+
- Resolve test failures related to new environment variables
|
42
|
+
|
43
|
+
## [4.4.0] - 2025-09-10
|
44
|
+
|
45
|
+
### Added
|
46
|
+
- **MCP Registry Support**
|
47
|
+
- Add server.json configuration for MCP registry publication
|
48
|
+
- Add mcp-name field to README for PyPI package validation
|
49
|
+
- Integrate MCP registry publishing into CI/CD workflow
|
50
|
+
- Support DNS-based namespace authentication (com.failmode/voicemode)
|
51
|
+
- Update Makefile to sync server.json version during releases
|
52
|
+
|
53
|
+
- **Cloudflare Worker for voicemode.sh**
|
54
|
+
- Serve install script via custom domain
|
55
|
+
- Smart user-agent detection for CLI vs browser
|
56
|
+
- Cached script delivery with fallback
|
57
|
+
|
58
|
+
- **Selective Tool Loading**
|
59
|
+
- Reduce token usage by loading tools on demand
|
60
|
+
- Implement smart tool filtering based on context
|
61
|
+
- Add tool loading configuration options
|
62
|
+
|
63
|
+
- **Documentation Improvements**
|
64
|
+
- Complete documentation reorganization
|
65
|
+
- Add tutorials, guides, and reference sections
|
66
|
+
- Improve getting-started guide with clear paths
|
67
|
+
- Add universal installer as primary quick start
|
68
|
+
- Archive outdated documentation
|
69
|
+
|
70
|
+
- **Three Bears Agent Support**
|
71
|
+
- Add baby-bear, mama-bear, and papa-bear agent configurations
|
72
|
+
- Integrate with sound fonts for agent-specific audio feedback
|
73
|
+
|
74
|
+
### Changed
|
75
|
+
- Consolidate PyPI and MCP Registry publishing workflows
|
76
|
+
- Update branch references from 'main' to 'master'
|
77
|
+
- Improve Cloudflare Worker error handling and caching
|
78
|
+
- Rename hook to hooks, stdin-receiver to receiver
|
79
|
+
|
80
|
+
### Fixed
|
81
|
+
- Fix broken documentation links after refactor
|
82
|
+
- Restore minimal claude command group for hook support
|
83
|
+
- Fix Claude settings.json path configuration
|
84
|
+
|
10
85
|
## [4.3.2] - 2025-09-03
|
11
86
|
|
87
|
+
### Fixed
|
88
|
+
- Add missing pyyaml dependency to pyproject.toml
|
89
|
+
- Remove macOS-only restriction from package
|
90
|
+
- Add Claude hooks configuration to repository settings
|
91
|
+
|
12
92
|
## [4.3.1] - 2025-09-03
|
13
93
|
|
94
|
+
### Fixed
|
95
|
+
- Minor bug fixes and improvements
|
96
|
+
|
14
97
|
## [4.3.0] - 2025-09-03
|
15
98
|
|
99
|
+
### Added
|
100
|
+
- Sound fonts with MP3 support and Three Bears sounds integration
|
101
|
+
|
16
102
|
## [4.2.0] - 2025-09-03
|
17
103
|
|
18
104
|
### Added
|
@@ -26,7 +112,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
26
112
|
- **🔊 Sound Fonts Integration - Audio Feedback for Every Action**
|
27
113
|
- Play custom sounds for tool operations, errors, and completions
|
28
114
|
- Filesystem-based sound font system with automatic discovery
|
29
|
-
- Claude Code integration via
|
115
|
+
- Claude Code integration via receiver for hook-based audio
|
30
116
|
- CLI command `play-sound` with theme, action, and sound selection
|
31
117
|
- Enhances user experience with auditory feedback during operations
|
32
118
|
- MP3 support added for 90% file size reduction over WAV
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: voice-mode
|
3
|
-
Version: 4.
|
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
|
[](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 [
|
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 [
|
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
|
-
- 🤖 **
|
184
|
-
- 🖥️ **
|
185
|
-
- 🌟 **
|
186
|
-
- ⚡ **
|
187
|
-
- 💻 **
|
188
|
-
- 🦘 **
|
189
|
-
- 🔧 **
|
190
|
-
- ⚡ **
|
191
|
-
- 🏄 **
|
192
|
-
- 🔄 **
|
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.
|
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 [
|
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.
|
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
|
-
- 📖 **[
|
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.
|
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**:
|
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
|
-
- **[
|
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
|
-
- **[
|
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.
|
717
|
-
- **[Kokoro Setup](docs/kokoro.md)** - Local text-to-speech configuration
|
718
|
-
- **[
|
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
|
-
- 🚀 [
|
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,5 +1,7 @@
|
|
1
1
|
# Voice Mode
|
2
2
|
|
3
|
+
mcp-name: com.failmode/voicemode
|
4
|
+
|
3
5
|
> **Install via:** `uvx voice-mode` | `pip install voice-mode` | [getvoicemode.com](https://getvoicemode.com)
|
4
6
|
|
5
7
|
[](https://pepy.tech/project/voice-mode)
|
@@ -35,7 +37,7 @@ Natural voice conversations for AI assistants. Voice Mode brings human-like voic
|
|
35
37
|
|
36
38
|
## Quick Start
|
37
39
|
|
38
|
-
> 📖 **Using a different tool?** See our [
|
40
|
+
> 📖 **Using a different tool?** See our [Getting Started Guide](docs/tutorials/getting-started.md) for setup instructions!
|
39
41
|
|
40
42
|
### Automatic Installation (Recommended)
|
41
43
|
|
@@ -62,7 +64,7 @@ This installer will:
|
|
62
64
|
|
63
65
|
### Manual Installation
|
64
66
|
|
65
|
-
For manual setup steps, see the [
|
67
|
+
For manual setup steps, see the [Getting Started Guide](docs/tutorials/getting-started.md).
|
66
68
|
|
67
69
|
## 🎬 Demo
|
68
70
|
|
@@ -102,16 +104,16 @@ The `converse` function makes voice interactions natural - it automatically wait
|
|
102
104
|
|
103
105
|
Voice Mode works with your favorite AI coding assistants:
|
104
106
|
|
105
|
-
- 🤖 **
|
106
|
-
- 🖥️ **
|
107
|
-
- 🌟 **
|
108
|
-
- ⚡ **
|
109
|
-
- 💻 **
|
110
|
-
- 🦘 **
|
111
|
-
- 🔧 **
|
112
|
-
- ⚡ **
|
113
|
-
- 🏄 **
|
114
|
-
- 🔄 **
|
107
|
+
- 🤖 **Claude Code** - Anthropic's official CLI
|
108
|
+
- 🖥️ **Claude Desktop** - Desktop application
|
109
|
+
- 🌟 **Gemini CLI** - Google's CLI tool
|
110
|
+
- ⚡ **Cursor** - AI-first code editor
|
111
|
+
- 💻 **VS Code** - With MCP preview support
|
112
|
+
- 🦘 **Roo Code** - AI dev team in VS Code
|
113
|
+
- 🔧 **Cline** - Autonomous coding agent
|
114
|
+
- ⚡ **Zed** - High-performance editor
|
115
|
+
- 🏄 **Windsurf** - Agentic IDE by Codeium
|
116
|
+
- 🔄 **Continue** - Open-source AI assistant
|
115
117
|
|
116
118
|
## Installation
|
117
119
|
|
@@ -130,7 +132,7 @@ sudo apt update
|
|
130
132
|
sudo apt install -y python3-dev libasound2-dev libasound2-plugins libportaudio2 portaudio19-dev ffmpeg pulseaudio pulseaudio-utils
|
131
133
|
```
|
132
134
|
|
133
|
-
**Note for WSL2 users**: WSL2 requires additional audio packages (pulseaudio, libasound2-plugins) for microphone access.
|
135
|
+
**Note for WSL2 users**: WSL2 requires additional audio packages (pulseaudio, libasound2-plugins) for microphone access.
|
134
136
|
</details>
|
135
137
|
|
136
138
|
<details>
|
@@ -181,9 +183,12 @@ claude mcp add --scope user voice-mode uvx voice-mode
|
|
181
183
|
# Using Claude Code with Nix (NixOS)
|
182
184
|
claude mcp add voice-mode nix run github:mbailey/voicemode
|
183
185
|
|
184
|
-
# Using UV
|
186
|
+
# Using UV (recommended)
|
185
187
|
uvx voice-mode
|
186
188
|
|
189
|
+
# For cleanest experience with UV (no deprecation warnings):
|
190
|
+
UV_PYTHON=python3.13 uvx voice-mode
|
191
|
+
|
187
192
|
# Using pip
|
188
193
|
pip install voice-mode
|
189
194
|
|
@@ -193,7 +198,7 @@ nix run github:mbailey/voicemode
|
|
193
198
|
|
194
199
|
### Configuration for AI Coding Assistants
|
195
200
|
|
196
|
-
> 📖 **Looking for detailed setup instructions?** Check our comprehensive [
|
201
|
+
> 📖 **Looking for detailed setup instructions?** Check our comprehensive [Getting Started Guide](docs/tutorials/getting-started.md) for step-by-step instructions!
|
197
202
|
|
198
203
|
Below are quick configuration snippets. For full installation and setup instructions, see the integration guides above.
|
199
204
|
|
@@ -471,12 +476,12 @@ nix run github:mbailey/voicemode
|
|
471
476
|
|
472
477
|
**Note:** The `converse` tool is the primary interface for voice interactions, combining speaking and listening in a natural flow.
|
473
478
|
|
474
|
-
**New:** The `install_whisper_cpp` and `install_kokoro_fastapi` tools help you set up free, private, open-source voice services locally.
|
479
|
+
**New:** The `install_whisper_cpp` and `install_kokoro_fastapi` tools help you set up free, private, open-source voice services locally.
|
475
480
|
|
476
481
|
## Configuration
|
477
482
|
|
478
|
-
- 📖 **[
|
479
|
-
- 🔧 **[Configuration Reference](docs/configuration.md)** - All environment variables
|
483
|
+
- 📖 **[Getting Started](docs/tutorials/getting-started.md)** - Step-by-step setup guide
|
484
|
+
- 🔧 **[Configuration Reference](docs/guides/configuration.md)** - All environment variables
|
480
485
|
- 📁 **[Config Examples](config-examples/)** - Ready-to-use configuration files
|
481
486
|
|
482
487
|
### Quick Setup
|
@@ -538,8 +543,8 @@ The audio format is automatically validated against provider capabilities and wi
|
|
538
543
|
|
539
544
|
For privacy-focused or offline usage, Voice Mode supports local speech services:
|
540
545
|
|
541
|
-
- **[Whisper.cpp](docs/whisper.
|
542
|
-
- **[Kokoro](docs/kokoro.md)** - Local text-to-speech with multiple voice options
|
546
|
+
- **[Whisper.cpp](docs/guides/whisper-setup.md)** - Local speech-to-text with OpenAI-compatible API
|
547
|
+
- **[Kokoro](docs/guides/kokoro-setup.md)** - Local text-to-speech with multiple voice options
|
543
548
|
|
544
549
|
These services provide the same API interface as OpenAI, allowing seamless switching between cloud and local processing.
|
545
550
|
|
@@ -585,7 +590,7 @@ The OpenAI SDK handles this automatically - no Voice Mode configuration needed!
|
|
585
590
|
### Common Issues
|
586
591
|
|
587
592
|
- **No microphone access**: Check system permissions for terminal/application
|
588
|
-
- **WSL2 Users**:
|
593
|
+
- **WSL2 Users**: Additional audio packages (pulseaudio, libasound2-plugins) required for microphone access
|
589
594
|
- **UV not found**: Install with `curl -LsSf https://astral.sh/uv/install.sh | sh`
|
590
595
|
- **OpenAI API error**: Verify your `OPENAI_API_KEY` is set correctly
|
591
596
|
- **No audio output**: Check system audio settings and available devices
|
@@ -625,24 +630,17 @@ Audio files are saved to: `~/.voicemode/audio/YYYY/MM/` with timestamps in the f
|
|
625
630
|
📚 **[Read the full documentation at voice-mode.readthedocs.io](https://voice-mode.readthedocs.io)**
|
626
631
|
|
627
632
|
### Getting Started
|
628
|
-
- **[
|
629
|
-
- **[Configuration Guide](docs/configuration.md)** - Complete environment variable reference
|
633
|
+
- **[Getting Started](docs/tutorials/getting-started.md)** - Step-by-step setup for all supported tools
|
634
|
+
- **[Configuration Guide](docs/guides/configuration.md)** - Complete environment variable reference
|
630
635
|
|
631
636
|
### Development
|
632
|
-
- **[
|
633
|
-
- **[Local Development](docs/local-development-uvx.md)** - Development setup guide
|
634
|
-
- **[Audio Formats](docs/audio-format-migration.md)** - Audio format configuration and migration
|
635
|
-
- **[Statistics Dashboard](docs/statistics-dashboard.md)** - Performance monitoring and metrics
|
637
|
+
- **[Development Setup](docs/tutorials/development-setup.md)** - Local development guide
|
636
638
|
|
637
639
|
### Service Guides
|
638
|
-
- **[Whisper.cpp Setup](docs/whisper.
|
639
|
-
- **[Kokoro Setup](docs/kokoro.md)** - Local text-to-speech configuration
|
640
|
-
- **[
|
641
|
-
- **[LiveKit Integration](docs/livekit/README.md)** - Real-time voice communication
|
640
|
+
- **[Whisper.cpp Setup](docs/guides/whisper-setup.md)** - Local speech-to-text configuration
|
641
|
+
- **[Kokoro Setup](docs/guides/kokoro-setup.md)** - Local text-to-speech configuration
|
642
|
+
- **[LiveKit Integration](docs/guides/livekit-setup.md)** - Real-time voice communication
|
642
643
|
|
643
|
-
### Troubleshooting
|
644
|
-
- **[WSL2 Microphone Access](docs/troubleshooting/wsl2-microphone-access.md)** - WSL2 audio setup
|
645
|
-
- **[Migration Guide](docs/migration-guide.md)** - Upgrading from older versions
|
646
644
|
|
647
645
|
## Links
|
648
646
|
|
@@ -660,15 +658,12 @@ Audio files are saved to: `~/.voicemode/audio/YYYY/MM/` with timestamps in the f
|
|
660
658
|
|
661
659
|
## See Also
|
662
660
|
|
663
|
-
- 🚀 [
|
664
|
-
- 🔧 [Configuration Reference](docs/configuration.md) - Environment variables and options
|
665
|
-
- 🎤 [Local Services Setup](docs/kokoro.md) - Run TTS/STT locally for privacy
|
666
|
-
- 🐛 [Troubleshooting](docs/troubleshooting/README.md) - Common issues and solutions
|
661
|
+
- 🚀 [Getting Started](docs/tutorials/getting-started.md) - Setup instructions for all supported tools
|
662
|
+
- 🔧 [Configuration Reference](docs/guides/configuration.md) - Environment variables and options
|
663
|
+
- 🎤 [Local Services Setup](docs/guides/kokoro-setup.md) - Run TTS/STT locally for privacy
|
667
664
|
|
668
665
|
## License
|
669
666
|
|
670
667
|
MIT - A [Failmode](https://failmode.com) Project
|
671
668
|
|
672
669
|
---
|
673
|
-
|
674
|
-
<sub>[Project Statistics](docs/project-stats/README.md)</sub>
|
@@ -5,6 +5,8 @@ import asyncio
|
|
5
5
|
import sys
|
6
6
|
import os
|
7
7
|
import warnings
|
8
|
+
import subprocess
|
9
|
+
import shutil
|
8
10
|
import click
|
9
11
|
|
10
12
|
|
@@ -30,10 +32,12 @@ if not os.environ.get('VOICEMODE_DEBUG', '').lower() in ('true', '1', 'yes'):
|
|
30
32
|
@click.version_option()
|
31
33
|
@click.help_option('-h', '--help', help='Show this message and exit')
|
32
34
|
@click.option('--debug', is_flag=True, help='Enable debug mode and show all warnings')
|
35
|
+
@click.option('--tools-enabled', help='Comma-separated list of tools to enable (whitelist)')
|
36
|
+
@click.option('--tools-disabled', help='Comma-separated list of tools to disable (blacklist)')
|
33
37
|
@click.pass_context
|
34
|
-
def voice_mode_main_cli(ctx, debug):
|
38
|
+
def voice_mode_main_cli(ctx, debug, tools_enabled, tools_disabled):
|
35
39
|
"""Voice Mode - MCP server and service management.
|
36
|
-
|
40
|
+
|
37
41
|
Without arguments, starts the MCP server.
|
38
42
|
With subcommands, executes service management operations.
|
39
43
|
"""
|
@@ -44,7 +48,13 @@ def voice_mode_main_cli(ctx, debug):
|
|
44
48
|
# Re-enable INFO logging
|
45
49
|
import logging
|
46
50
|
logging.getLogger("voice-mode").setLevel(logging.INFO)
|
47
|
-
|
51
|
+
|
52
|
+
# Set environment variables from CLI args
|
53
|
+
if tools_enabled:
|
54
|
+
os.environ['VOICEMODE_TOOLS_ENABLED'] = tools_enabled
|
55
|
+
if tools_disabled:
|
56
|
+
os.environ['VOICEMODE_TOOLS_DISABLED'] = tools_disabled
|
57
|
+
|
48
58
|
if ctx.invoked_subcommand is None:
|
49
59
|
# No subcommand - run MCP server
|
50
60
|
# Note: warnings are already suppressed at module level unless debug is enabled
|
@@ -1277,6 +1287,72 @@ def config_set(key, value):
|
|
1277
1287
|
click.echo(result)
|
1278
1288
|
|
1279
1289
|
|
1290
|
+
@config.command("edit")
|
1291
|
+
@click.help_option('-h', '--help')
|
1292
|
+
@click.option('--editor', help='Editor to use (overrides $EDITOR)')
|
1293
|
+
def config_edit(editor):
|
1294
|
+
"""Open the configuration file in your default editor.
|
1295
|
+
|
1296
|
+
Opens ~/.voicemode/voicemode.env in your configured editor.
|
1297
|
+
Uses $EDITOR environment variable by default, or you can specify with --editor.
|
1298
|
+
|
1299
|
+
Examples:
|
1300
|
+
voicemode config edit # Use $EDITOR
|
1301
|
+
voicemode config edit --editor vim
|
1302
|
+
voicemode config edit --editor "code --wait"
|
1303
|
+
"""
|
1304
|
+
from pathlib import Path
|
1305
|
+
|
1306
|
+
# Find the config file
|
1307
|
+
config_path = Path.home() / ".voicemode" / "voicemode.env"
|
1308
|
+
|
1309
|
+
# Create default config if it doesn't exist
|
1310
|
+
if not config_path.exists():
|
1311
|
+
config_path.parent.mkdir(parents=True, exist_ok=True)
|
1312
|
+
from voice_mode.config import load_voicemode_env
|
1313
|
+
# This will create the default config
|
1314
|
+
load_voicemode_env()
|
1315
|
+
|
1316
|
+
# Determine which editor to use
|
1317
|
+
if editor:
|
1318
|
+
editor_cmd = editor
|
1319
|
+
else:
|
1320
|
+
# Try environment variables in order of preference
|
1321
|
+
editor_cmd = (
|
1322
|
+
os.environ.get('EDITOR') or
|
1323
|
+
os.environ.get('VISUAL') or
|
1324
|
+
shutil.which('nano') or
|
1325
|
+
shutil.which('vim') or
|
1326
|
+
shutil.which('vi')
|
1327
|
+
)
|
1328
|
+
|
1329
|
+
if not editor_cmd:
|
1330
|
+
click.echo("❌ No editor found. Please set $EDITOR or use --editor")
|
1331
|
+
click.echo(" Example: export EDITOR=vim")
|
1332
|
+
click.echo(" Or use: voicemode config edit --editor vim")
|
1333
|
+
return
|
1334
|
+
|
1335
|
+
# Handle complex editor commands (e.g., "code --wait")
|
1336
|
+
if ' ' in editor_cmd:
|
1337
|
+
import shlex
|
1338
|
+
cmd_parts = shlex.split(editor_cmd)
|
1339
|
+
cmd = cmd_parts + [str(config_path)]
|
1340
|
+
else:
|
1341
|
+
cmd = [editor_cmd, str(config_path)]
|
1342
|
+
|
1343
|
+
# Open the editor
|
1344
|
+
try:
|
1345
|
+
click.echo(f"Opening {config_path} in {editor_cmd}...")
|
1346
|
+
subprocess.run(cmd, check=True)
|
1347
|
+
click.echo("✅ Configuration file edited successfully")
|
1348
|
+
click.echo("\nChanges will take effect when voicemode is restarted.")
|
1349
|
+
except subprocess.CalledProcessError:
|
1350
|
+
click.echo(f"❌ Editor exited with an error")
|
1351
|
+
except FileNotFoundError:
|
1352
|
+
click.echo(f"❌ Editor not found: {editor_cmd}")
|
1353
|
+
click.echo(" Please check that the editor is installed and in your PATH")
|
1354
|
+
|
1355
|
+
|
1280
1356
|
# Diagnostics group
|
1281
1357
|
@voice_mode_main_cli.group()
|
1282
1358
|
@click.help_option('-h', '--help', help='Show this message and exit')
|
@@ -1394,8 +1470,9 @@ transcribe_audio_cmd = transcribe_cmd.transcribe.commands['audio']
|
|
1394
1470
|
transcribe_audio_cmd.name = 'transcribe'
|
1395
1471
|
audio.add_command(transcribe_audio_cmd)
|
1396
1472
|
|
1397
|
-
# Add
|
1398
|
-
|
1473
|
+
# Add hooks command under claude group
|
1474
|
+
from voice_mode.cli_commands.hook import hooks
|
1475
|
+
claude.claude_group.add_command(hooks)
|
1399
1476
|
|
1400
1477
|
# Add pronounce under config group
|
1401
1478
|
config.add_command(pronounce_commands.pronounce_group)
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"""CLI commands for Claude-related functionality."""
|
2
|
+
|
3
|
+
import click
|
4
|
+
|
5
|
+
|
6
|
+
@click.group(name='claude')
|
7
|
+
def claude_group():
|
8
|
+
"""Claude-related commands."""
|
9
|
+
pass
|
10
|
+
|
11
|
+
|
12
|
+
@click.group(name='hooks')
|
13
|
+
def hooks_group():
|
14
|
+
"""Manage Voice Mode hooks and event handlers for Claude Code."""
|
15
|
+
pass
|