verbalcoding 0.2.7 → 0.2.8

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 (44) hide show
  1. package/README.md +12 -27
  2. package/app-node/cli_install.test.mjs +15 -0
  3. package/docs/FRESH_INSTALL.md +8 -2
  4. package/docs/assets/figures/verbalcoding-flow.svg +45 -30
  5. package/docs/i18n/CONFIGURATION.es.md +138 -49
  6. package/docs/i18n/CONFIGURATION.fr.md +138 -49
  7. package/docs/i18n/CONFIGURATION.ja.md +137 -48
  8. package/docs/i18n/CONFIGURATION.ko.md +137 -48
  9. package/docs/i18n/CONFIGURATION.ru.md +138 -49
  10. package/docs/i18n/CONFIGURATION.zh.md +137 -48
  11. package/docs/i18n/FRESH_INSTALL.es.md +115 -32
  12. package/docs/i18n/FRESH_INSTALL.fr.md +115 -32
  13. package/docs/i18n/FRESH_INSTALL.ja.md +119 -36
  14. package/docs/i18n/FRESH_INSTALL.ko.md +120 -37
  15. package/docs/i18n/FRESH_INSTALL.ru.md +115 -32
  16. package/docs/i18n/FRESH_INSTALL.zh.md +119 -36
  17. package/docs/i18n/MULTI_INSTANCE.es.md +85 -26
  18. package/docs/i18n/MULTI_INSTANCE.fr.md +85 -26
  19. package/docs/i18n/MULTI_INSTANCE.ja.md +87 -29
  20. package/docs/i18n/MULTI_INSTANCE.ko.md +87 -29
  21. package/docs/i18n/MULTI_INSTANCE.ru.md +84 -26
  22. package/docs/i18n/MULTI_INSTANCE.zh.md +87 -29
  23. package/docs/i18n/README.es.md +109 -45
  24. package/docs/i18n/README.fr.md +109 -45
  25. package/docs/i18n/README.ja.md +109 -45
  26. package/docs/i18n/README.ko.md +108 -45
  27. package/docs/i18n/README.ru.md +109 -45
  28. package/docs/i18n/README.zh.md +108 -45
  29. package/docs/i18n/RELEASE.es.md +53 -37
  30. package/docs/i18n/RELEASE.fr.md +53 -37
  31. package/docs/i18n/RELEASE.ja.md +52 -36
  32. package/docs/i18n/RELEASE.ko.md +52 -36
  33. package/docs/i18n/RELEASE.ru.md +53 -37
  34. package/docs/i18n/RELEASE.zh.md +53 -37
  35. package/docs/i18n/USAGE.es.md +91 -64
  36. package/docs/i18n/USAGE.fr.md +91 -64
  37. package/docs/i18n/USAGE.ja.md +90 -63
  38. package/docs/i18n/USAGE.ko.md +90 -63
  39. package/docs/i18n/USAGE.ru.md +91 -64
  40. package/docs/i18n/USAGE.zh.md +90 -63
  41. package/package.json +1 -1
  42. package/scripts/bootstrap_prereqs.sh +15 -3
  43. package/scripts/cli.mjs +1 -1
  44. package/scripts/doctor.mjs +114 -8
@@ -1,36 +1,40 @@
1
1
  # VerbalCoding 설정
2
2
 
3
- ## Setup Wizard
3
+ ## 설정 마법사
4
4
 
5
- Use upstream Discord-side guides first, then return to VerbalCoding:
5
+ Discord 봇/애플리케이션 설정은 여기서 처음부터 다시 설명하지 않습니다. Discord 단계는 다음 업스트림 가이드를 사용한 뒤 VerbalCoding 설정으로 돌아오세요:
6
6
 
7
- - Hermes Agent Discord messaging guide: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
8
- - Discord official bot overview: <https://docs.discord.com/developers/bots/overview>
9
- - Discord official quick start: <https://docs.discord.com/developers/quick-start/getting-started>
7
+ - Hermes Agent Discord 메시징 가이드: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
8
+ - Discord 공식 개요: <https://docs.discord.com/developers/bots/overview>
9
+ - Discord 공식 빠른 시작: <https://docs.discord.com/developers/quick-start/getting-started>
10
10
 
11
11
  ```bash
12
- vc setup --yes
13
- # or from a clone
14
12
  ./scripts/install.sh
15
13
  ```
16
14
 
17
- The installer asks for the Discord token, allowed users, auto-join voice channel names, transcript channel/thread, CLI harness backend, default voice language, TTS settings, and wake-word behavior. It writes `.env` with mode `0600`.
15
+ 설치 프로그램은 Discord 토큰, 허용 사용자, 자동 참가 음성 채널 이름, 전사 채널/스레드, CLI 하네스 백엔드, 기본 음성 언어, TTS 설정, 웨이크워드 동작을 묻습니다. mode `0600`으로 `.env`를 작성하며, `.env`는 git에서 무시됩니다. 또한 짧은 셸 명령 `vc`도 연결합니다.
18
16
 
19
- ## Supported Agent Backends
17
+ 수동 설치 셸 명령만 필요하다면:
20
18
 
21
- Set `AGENT_BACKEND` in `.env`.
19
+ ```bash
20
+ npm link
21
+ ```
22
+
23
+ ## 지원되는 에이전트 백엔드
22
24
 
23
- | Backend | Default command | Notes |
25
+ `.env`에서 `AGENT_BACKEND`를 설정하세요.
26
+
27
+ | 백엔드 | 기본 명령 | 참고 |
24
28
  |---|---|---|
25
- | `hermes` | `hermes chat -Q -q` | Default; supports resume and verbose progress |
26
- | `claude-code` / `claude` | `claude -p` | Override with `CLAUDE_COMMAND` or `AGENT_COMMAND` |
27
- | `codex` | `codex exec` | Override with `CODEX_COMMAND` or `AGENT_COMMAND` |
28
- | `gemini` | `gemini -p` | Override with `GEMINI_COMMAND` or `AGENT_COMMAND` |
29
- | `opencode` | `opencode run` | Override with `OPENCODE_COMMAND` or `AGENT_COMMAND` |
30
- | `openclaw` | `openclaw run` | Override with `OPENCLAW_COMMAND` or `AGENT_COMMAND` |
31
- | `custom` | `AGENT_COMMAND` required | Prompt is appended as final argv |
29
+ | `hermes` | `hermes chat -Q -q` | 기본값. `.verbalcoding-session` 이어받기 동작을 보존합니다. |
30
+ | `claude-code` / `claude` | `claude -p` | `CLAUDE_COMMAND` 또는 `AGENT_COMMAND`로 재정의. |
31
+ | `codex` | `codex exec` | `CODEX_COMMAND` 또는 `AGENT_COMMAND`로 재정의. |
32
+ | `gemini` | `gemini -p` | `GEMINI_COMMAND` 또는 `AGENT_COMMAND`로 재정의. |
33
+ | `opencode` | `opencode run` | `OPENCODE_COMMAND` 또는 `AGENT_COMMAND`로 재정의. |
34
+ | `openclaw` | `openclaw run` | `OPENCLAW_COMMAND` 또는 `AGENT_COMMAND`로 재정의. |
35
+ | `custom` | 필수 `AGENT_COMMAND` | 프롬프트가 마지막 argv 인자로 추가됩니다. |
32
36
 
33
- Generic overrides:
37
+ 일반 재정의:
34
38
 
35
39
  ```bash
36
40
  AGENT_BACKEND=custom
@@ -43,23 +47,37 @@ UTTERANCE_IDLE_MS=4500
43
47
  LATENCY_LOG_PATH=./.logs/latency.jsonl
44
48
  ```
45
49
 
46
- ## Example `.env`
50
+ ## 에이전트 어댑터 계약
51
+
52
+ 음성 브리지는 하나의 어댑터 계약을 통해 모든 백엔드와 통신합니다:
53
+
54
+ - `run({ text }, signal, plan)`은 상태, 최종 답변 텍스트, 백엔드 라벨, 경과 시간, 선택적 세션 메타데이터를 반환합니다.
55
+ - `ask(text, signal, plan)`은 최종 답변 텍스트만 반환하는 호환성 단축 함수입니다.
56
+ - `capabilities`는 백엔드가 세션 이어받기, 스트리밍 진행, 취소를 지원하는지 선언합니다.
57
+ - Hermes는 참조 어댑터입니다: 이어받기, 자세한 진행 스트리밍, 취소, Hermes 세션 파일에서 최종 답변 복구.
58
+
59
+ 새 백엔드는 동일한 계약을 구현하고 음성/STT/TTS 동작은 어댑터 밖에 유지해야 합니다.
60
+
61
+ ## `.env` 예시
47
62
 
48
63
  ```bash
49
64
  DISCORD_BOT_TOKEN="***"
50
65
  DISCORD_ALLOWED_USERS="123456789012345678"
51
66
  AUTO_JOIN_VOICE_CHANNELS="일반,General,general"
52
67
  TRANSCRIPT_CHANNEL_ID="123456789012345678"
68
+
53
69
  AGENT_BACKEND="hermes"
54
70
  STT_ENGINE="whisper_cpp"
55
71
  WHISPER_CPP_BIN="whisper-cli"
56
72
  WHISPER_CPP_MODEL="./models/ggml-small-q5_1.bin"
73
+
57
74
  TTS_BACKEND="edge"
58
75
  TTS_VOICE_TYPE="korean_female"
59
76
  TTS_VOICE="ko-KR-SunHiNeural"
60
77
  TTS_RATE="+10%"
61
78
  TTS_MAX_CHARS="495"
62
79
  TTS_VOLUME="1.0"
80
+
63
81
  REQUIRE_WAKE_WORD="0"
64
82
  MIN_UTTERANCE_SECONDS="1.0"
65
83
  UTTERANCE_IDLE_MS="4500"
@@ -69,39 +87,60 @@ AGENT_VERBOSE_PROGRESS="0"
69
87
  LATENCY_LOG_PATH="./.logs/latency.jsonl"
70
88
  ```
71
89
 
72
- ## TTS Voice Selection
90
+ ## TTS 음성 선택
91
+
92
+ 언어 프리셋과 음성 선택은 별개입니다:
73
93
 
74
- `vc language ko|en|auto` changes STT language, progress language, and default TTS voice. Live commands such as “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female`, and `switch speaker to English` change only the speaker/voice type.
94
+ - `vc language ko|en|auto`는 STT 언어, 진행 언어, 해당 언어의 기본 음성을 변경합니다.
95
+ - “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female`, `switch speaker to English` 같은 라이브 음성 명령은 화자/음성 유형만 변경합니다.
96
+ - `!voice-test <text>`는 현재 선택된 백엔드와 음성으로 빠른 샘플을 재생합니다.
75
97
 
76
- Default Edge catalog:
98
+ 음성 선택은 기본적으로 `config/tts-voices.json`에 저장됩니다. `TTS_VOICE_CONFIG`로 경로를 재정의하세요. 실행 중인 브리지는 합성 전에 음성 선택을 다시 읽고 적용하므로, 전체 재시작 없이도 음성 명령이 적용됩니다.
77
99
 
78
- | `TTS_VOICE_TYPE` | `TTS_VOICE` | Language |
100
+ 기본 Edge 카탈로그:
101
+
102
+ | `TTS_VOICE_TYPE` | `TTS_VOICE` | 언어 |
79
103
  |---|---|---|
80
- | `korean_male` | `ko-KR-InJoonNeural` | Korean |
81
- | `korean_female` | `ko-KR-SunHiNeural` | Korean |
82
- | `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` | Korean |
83
- | `english_male` | `en-US-GuyNeural` | English |
84
- | `english_female` | `en-US-AriaNeural` | English |
104
+ | `korean_male` | `ko-KR-InJoonNeural` | 한국어 |
105
+ | `korean_female` | `ko-KR-SunHiNeural` | 한국어 |
106
+ | `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` | 한국어 |
107
+ | `english_male` | `en-US-GuyNeural` | 영어 |
108
+ | `english_female` | `en-US-AriaNeural` | 영어 |
109
+
110
+ 수동 영구 재정의:
111
+
112
+ ```bash
113
+ TTS_BACKEND="edge"
114
+ TTS_VOICE_TYPE="korean_male"
115
+ TTS_VOICE="ko-KR-InJoonNeural"
116
+ TTS_VOICE_CONFIG="config/tts-voices.json"
117
+ ```
85
118
 
86
- Backend-specific voice options:
119
+ OpenVoice, SpeechSwift 또는 Supertonic의 경우 아래 섹션의 백엔드별 음성/참조 설정을 유지하세요. 동일한 음성 카탈로그 파일은 여전히 활성 음성 유형을 추적할 수 있습니다.
87
120
 
88
- | Backend | Settings | Voice choices |
121
+ 백엔드별 음성 옵션:
122
+
123
+ | 백엔드 | 설정 | 음성 선택지 |
89
124
  |---|---|---|
90
- | Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | Built-in types plus any `edge-tts --list-voices` voice |
91
- | Supertonic | `SUPERTONIC_VOICE`, `SUPERTONIC_LANGUAGE` | `M1`–`M5`, `F1`–`F5`; `ko`, `en`, `es`, `pt`, `fr` |
92
- | OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE`, `OPENVOICE_LANGUAGE` | User-provided permitted reference WAV |
93
- | SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_MODEL_ID` | Reference-sample voice or backend speaker/model ID |
125
+ | Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | 내장 유형 `edge-tts --list-voices`가 반환하는 모든 음성 |
126
+ | Supertonic | `SUPERTONIC_VOICE`, `SUPERTONIC_LANGUAGE` | `M1`–`M5`, `F1`–`F5`; 언어 `ko`, `en`, `es`, `pt`, `fr` |
127
+ | OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE`, `OPENVOICE_LANGUAGE` | 사용자가 제공한 허용된 참조 WAV; 스타일 기본값은 `default` |
128
+ | SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_MODEL_ID` | CosyVoice용 참조 샘플 음성 또는 백엔드가 지원하는 화자/모델 ID |
94
129
 
95
- ## Utterance Segmentation
130
+ ## 발화 분할
96
131
 
97
- `UTTERANCE_IDLE_MS` controls how long the bridge waits after speech before starting STT. Default is `4500` ms.
132
+ `UTTERANCE_IDLE_MS`는 음성 구간 이후 사용자가 말을 끝냈다고 판단하고 STT를 시작하기 전까지 브리지가 기다리는 시간을 제어합니다. 기본값은 자연스러운 멈춤이 있는 긴 음성 지시를 보존하기 위해 `4500` ms입니다. 낮은 값은 짧은 명령에서 더 빠르게 느껴지지만 긴 받아쓰기를 나눌 수 있고, 높은 값은 생각하며 말할 때 더 안전합니다.
98
133
 
99
134
  ```bash
100
- UTTERANCE_IDLE_MS="4500"
101
- UTTERANCE_IDLE_MS="6000"
135
+ UTTERANCE_IDLE_MS="4500" # 균형 잡힌 기본값
136
+ UTTERANCE_IDLE_MS="6000" # 멈춤이 있는 긴 받아쓰기에 더 안전
102
137
  ```
103
138
 
104
- ## MCP Server
139
+ ## MCP 서버
140
+
141
+ VerbalCoding은 stdio MCP 서버를 포함하므로 Hermes Agent 또는 모든 MCP 클라이언트가 skill이나 자유 형식 셸 명령에 의존하지 않고 도구를 통해 브리지를 제어할 수 있습니다.
142
+
143
+ Hermes 설정 예시:
105
144
 
106
145
  ```yaml
107
146
  mcp_servers:
@@ -112,39 +151,89 @@ mcp_servers:
112
151
  connect_timeout: 30
113
152
  ```
114
153
 
115
- Tools: `status`, `doctor`, `set_auto_restart`, `set_language`, `start`, `stop`, and `restart`.
154
+ 노출되는 MCP 도구:
155
+
156
+ | 도구 | 목적 |
157
+ |---|---|
158
+ | `status` | 비밀 정보 없이 브리지/설정 상태 보고 |
159
+ | `doctor` | 민감 정보가 제거된 doctor 점검 실행 |
160
+ | `set_auto_restart` | 커밋 시점 음성 봇 자동 재시작 활성화/비활성화 |
161
+ | `set_language` | STT/진행/TTS 언어를 함께 업데이트 |
162
+ | `start`, `stop`, `restart` | Discord 음성 브리지 제어 |
116
163
 
117
- ## Optional OpenVoice TTS
164
+ ## 선택 사항: OpenVoice TTS
165
+
166
+ Edge TTS는 기본값이자 폴백으로 유지됩니다. OpenVoice V2로 로컬 음성 복제를 시도하려면:
118
167
 
119
168
  ```bash
120
169
  ./scripts/setup_openvoice.sh
170
+ # OpenVoice 문서에서 checkpoints_v2_0417.zip을 다운로드하고 vendor/OpenVoice/checkpoints_v2/ 아래에 압축을 풉니다.
171
+ mkdir -p voice-samples
172
+ # 허용된 참조 샘플을 voice-samples/user-reference.wav에 넣거나,
173
+ # Discord에서 !voice-clone capture로 하나를 캡처합니다.
121
174
  python3 integrations/openvoice/synth.py --openvoice-dir vendor/OpenVoice --ref-audio voice-samples/user-reference.wav --text '안녕하세요. 버벌코딩 목소리 복제 테스트입니다.' --output /tmp/verbalcoding-openvoice-smoke.wav
122
175
  ```
123
176
 
177
+ 그런 다음 다음을 설정하세요:
178
+
124
179
  ```bash
125
180
  TTS_BACKEND="openvoice"
126
181
  OPENVOICE_REF_AUDIO="./voice-samples/user-reference.wav"
127
182
  OPENVOICE_PROGRESS="0"
128
183
  ```
129
184
 
130
- Only clone voices you own or have permission to use. OpenVoice falls back to Edge on failure.
185
+ 본인이 소유했거나 사용할 권한이 있는 음성만 복제하세요. OpenVoice가 실패하거나 시간이 초과되면 VerbalCoding은 Edge TTS로 폴백합니다.
131
186
 
132
- ## Optional Supertonic TTS
187
+ ## 선택 사항: Supertonic TTS
133
188
 
134
189
  ```bash
135
190
  ./scripts/setup_supertonic.sh
136
191
  supertonic tts '안녕하세요. 수퍼토닉 테스트입니다.' --lang ko --voice M1 --steps 2 --speed 1.0 -o /tmp/verbalcoding-supertonic.wav
137
192
  ```
138
193
 
139
- ## Optional SpeechSwift / CosyVoice TTS
194
+ 그런 다음 다음을 설정하세요:
195
+
196
+ ```bash
197
+ TTS_BACKEND="supertonic"
198
+ SUPERTONIC_COMMAND="./.venv-supertonic/bin/supertonic"
199
+ SUPERTONIC_VOICE="M1"
200
+ SUPERTONIC_LANGUAGE="ko"
201
+ SUPERTONIC_STEPS="2"
202
+ SUPERTONIC_SPEED="1.0"
203
+ SUPERTONIC_PROGRESS="0"
204
+ ```
205
+
206
+ Supertonic이 없거나 실패하거나 시간이 초과되면 VerbalCoding은 Edge TTS로 폴백합니다.
207
+
208
+ ## 선택 사항: SpeechSwift / CosyVoice TTS
209
+
210
+ Apple Silicon에서 `speech-swift`는 MLX 네이티브 CosyVoice/Qwen3-TTS를 사용하는 한국어 음성 복제용 로컬 백엔드입니다.
140
211
 
141
212
  ```bash
142
213
  brew tap soniqo/speech https://github.com/soniqo/speech-swift
143
214
  brew install speech
144
215
  ```
145
216
 
146
- Recommended env includes `TTS_BACKEND="speechswift"`, `SPEECHSWIFT_MODE="server"`, `SPEECHSWIFT_ENGINE="cosyvoice"`, `SPEECHSWIFT_REF_AUDIO`, and `SPEECHSWIFT_SERVER_URL`. Keep Edge for quick progress prompts.
217
+ 권장 env:
218
+
219
+ ```bash
220
+ TTS_BACKEND="speechswift"
221
+ SPEECHSWIFT_MODE="server"
222
+ SPEECHSWIFT_ENGINE="cosyvoice"
223
+ SPEECHSWIFT_LANGUAGE="korean"
224
+ SPEECHSWIFT_REF_AUDIO="./voice-samples/user-reference.wav"
225
+ SPEECHSWIFT_SERVER_HOST="127.0.0.1"
226
+ SPEECHSWIFT_SERVER_PORT="18080"
227
+ SPEECHSWIFT_SERVER_URL="http://127.0.0.1:18080"
228
+ SPEECHSWIFT_PROGRESS="0"
229
+ ```
230
+
231
+ 빠른 진행/백채널 프롬프트에는 Edge를 유지하세요.
147
232
 
148
- ## Operational Notes
233
+ ## 운영 참고 사항
149
234
 
150
- Enable Discord Message Content intent, grant voice connect/speak permissions, authenticate the selected CLI harness separately, and avoid reading diffs/log dumps aloud.
235
+ - 봇은 텍스트 명령을 위해 Discord privileged Message Content intent가 활성화되어 있어야 합니다.
236
+ - 봇은 음성 채널 connect/speak 권한이 필요합니다.
237
+ - Hermes Agent의 경우 기본 프로필에서 Hermes를 일반적인 방식으로 설정/인증하세요(`hermes setup`, `hermes login` 등).
238
+ - Claude Code, Codex, Gemini, OpenCode, OpenClaw의 경우 해당 CLI를 별도로 설치하고 인증하세요.
239
+ - CLI가 시간 초과 또는 signal 실패 시 diff/code 출력을 내보내면, 브리지는 이를 소리 내어 읽지 않고 자세한 텍스트를 대신 보냅니다.
@@ -1,36 +1,40 @@
1
- # VerbalCoding Конфигурация
1
+ # Конфигурация VerbalCoding
2
2
 
3
- ## Setup Wizard
3
+ ## Мастер настройки
4
4
 
5
- Use upstream Discord-side guides first, then return to VerbalCoding:
5
+ Настройка Discord-бота/приложения намеренно не объясняется здесь с нуля. Используйте эти исходные руководства для шагов на стороне Discord, затем вернитесь к настройке VerbalCoding:
6
6
 
7
- - Hermes Agent Discord messaging guide: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
8
- - Discord official bot overview: <https://docs.discord.com/developers/bots/overview>
9
- - Discord official quick start: <https://docs.discord.com/developers/quick-start/getting-started>
7
+ - Руководство Hermes Agent по сообщениям Discord: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
8
+ - Официальный обзор ботов Discord: <https://docs.discord.com/developers/bots/overview>
9
+ - Официальный quick start Discord: <https://docs.discord.com/developers/quick-start/getting-started>
10
10
 
11
11
  ```bash
12
- vc setup --yes
13
- # or from a clone
14
12
  ./scripts/install.sh
15
13
  ```
16
14
 
17
- The installer asks for the Discord token, allowed users, auto-join voice channel names, transcript channel/thread, CLI harness backend, default voice language, TTS settings, and wake-word behavior. It writes `.env` with mode `0600`.
15
+ Установщик спрашивает токен Discord, разрешённых пользователей, имена голосовых каналов для автоподключения, канал/тред расшифровок, бэкенд CLI-харнеса, язык голоса по умолчанию, настройки TTS и поведение wake-word. Он записывает `.env` с режимом `0600`; `.env` игнорируется git. Он также связывает короткую shell-команду `vc`.
18
16
 
19
- ## Supported Agent Backends
17
+ Если после ручной установки вам нужна только shell-команда:
20
18
 
21
- Set `AGENT_BACKEND` in `.env`.
19
+ ```bash
20
+ npm link
21
+ ```
22
+
23
+ ## Поддерживаемые бэкенды агентов
22
24
 
23
- | Backend | Default command | Notes |
25
+ Задайте `AGENT_BACKEND` в `.env`.
26
+
27
+ | Бэкенд | Команда по умолчанию | Примечания |
24
28
  |---|---|---|
25
- | `hermes` | `hermes chat -Q -q` | Default; supports resume and verbose progress |
26
- | `claude-code` / `claude` | `claude -p` | Override with `CLAUDE_COMMAND` or `AGENT_COMMAND` |
27
- | `codex` | `codex exec` | Override with `CODEX_COMMAND` or `AGENT_COMMAND` |
28
- | `gemini` | `gemini -p` | Override with `GEMINI_COMMAND` or `AGENT_COMMAND` |
29
- | `opencode` | `opencode run` | Override with `OPENCODE_COMMAND` or `AGENT_COMMAND` |
30
- | `openclaw` | `openclaw run` | Override with `OPENCLAW_COMMAND` or `AGENT_COMMAND` |
31
- | `custom` | `AGENT_COMMAND` required | Prompt is appended as final argv |
29
+ | `hermes` | `hermes chat -Q -q` | По умолчанию. Сохраняет поведение возобновления `.verbalcoding-session`. |
30
+ | `claude-code` / `claude` | `claude -p` | Переопределяется через `CLAUDE_COMMAND` или `AGENT_COMMAND`. |
31
+ | `codex` | `codex exec` | Переопределяется через `CODEX_COMMAND` или `AGENT_COMMAND`. |
32
+ | `gemini` | `gemini -p` | Переопределяется через `GEMINI_COMMAND` или `AGENT_COMMAND`. |
33
+ | `opencode` | `opencode run` | Переопределяется через `OPENCODE_COMMAND` или `AGENT_COMMAND`. |
34
+ | `openclaw` | `openclaw run` | Переопределяется через `OPENCLAW_COMMAND` или `AGENT_COMMAND`. |
35
+ | `custom` | требуется `AGENT_COMMAND` | Prompt добавляется как финальный аргумент argv. |
32
36
 
33
- Generic overrides:
37
+ Общие переопределения:
34
38
 
35
39
  ```bash
36
40
  AGENT_BACKEND=custom
@@ -43,23 +47,37 @@ UTTERANCE_IDLE_MS=4500
43
47
  LATENCY_LOG_PATH=./.logs/latency.jsonl
44
48
  ```
45
49
 
46
- ## Example `.env`
50
+ ## Контракт адаптера агента
51
+
52
+ Голосовой bridge взаимодействует с каждым бэкендом через единый контракт адаптера:
53
+
54
+ - `run({ text }, signal, plan)` возвращает статус, текст финального ответа, метку бэкенда, прошедшее время и необязательные метаданные сессии.
55
+ - `ask(text, signal, plan)` — совместимый короткий путь, который возвращает только текст финального ответа.
56
+ - `capabilities` объявляет, поддерживает ли бэкенд возобновление сессии, потоковый прогресс и отмену.
57
+ - Hermes — эталонный адаптер: возобновление, потоковый подробный прогресс, отмена и восстановление финального ответа из файлов сессий Hermes.
58
+
59
+ Новые бэкенды должны реализовывать тот же контракт и держать поведение voice/STT/TTS вне адаптера.
60
+
61
+ ## Пример `.env`
47
62
 
48
63
  ```bash
49
64
  DISCORD_BOT_TOKEN="***"
50
65
  DISCORD_ALLOWED_USERS="123456789012345678"
51
66
  AUTO_JOIN_VOICE_CHANNELS="일반,General,general"
52
67
  TRANSCRIPT_CHANNEL_ID="123456789012345678"
68
+
53
69
  AGENT_BACKEND="hermes"
54
70
  STT_ENGINE="whisper_cpp"
55
71
  WHISPER_CPP_BIN="whisper-cli"
56
72
  WHISPER_CPP_MODEL="./models/ggml-small-q5_1.bin"
73
+
57
74
  TTS_BACKEND="edge"
58
75
  TTS_VOICE_TYPE="korean_female"
59
76
  TTS_VOICE="ko-KR-SunHiNeural"
60
77
  TTS_RATE="+10%"
61
78
  TTS_MAX_CHARS="495"
62
79
  TTS_VOLUME="1.0"
80
+
63
81
  REQUIRE_WAKE_WORD="0"
64
82
  MIN_UTTERANCE_SECONDS="1.0"
65
83
  UTTERANCE_IDLE_MS="4500"
@@ -69,39 +87,60 @@ AGENT_VERBOSE_PROGRESS="0"
69
87
  LATENCY_LOG_PATH="./.logs/latency.jsonl"
70
88
  ```
71
89
 
72
- ## TTS Voice Selection
90
+ ## Выбор голоса TTS
91
+
92
+ Языковые пресеты и выбор голоса разделены:
73
93
 
74
- `vc language ko|en|auto` changes STT language, progress language, and default TTS voice. Live commands such as “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female`, and `switch speaker to English` change only the speaker/voice type.
94
+ - `vc language ko|en|auto` меняет язык STT, язык прогресса и голос по умолчанию для этого языка.
95
+ - Живые голосовые команды вроде “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female` и `switch speaker to English` меняют только диктора/тип голоса.
96
+ - `!voice-test <text>` воспроизводит быстрый образец с текущим выбранным бэкендом и голосом.
75
97
 
76
- Default Edge catalog:
98
+ Выбор голоса по умолчанию хранится в `config/tts-voices.json`. Переопределите путь через `TTS_VOICE_CONFIG`. Работающий bridge перечитывает/применяет выбор голоса перед синтезом, поэтому голосовые команды вступают в силу без полного перезапуска.
77
99
 
78
- | `TTS_VOICE_TYPE` | `TTS_VOICE` | Language |
100
+ Стандартный каталог Edge:
101
+
102
+ | `TTS_VOICE_TYPE` | `TTS_VOICE` | Язык |
79
103
  |---|---|---|
80
- | `korean_male` | `ko-KR-InJoonNeural` | Korean |
81
- | `korean_female` | `ko-KR-SunHiNeural` | Korean |
82
- | `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` | Korean |
83
- | `english_male` | `en-US-GuyNeural` | English |
84
- | `english_female` | `en-US-AriaNeural` | English |
104
+ | `korean_male` | `ko-KR-InJoonNeural` | Корейский |
105
+ | `korean_female` | `ko-KR-SunHiNeural` | Корейский |
106
+ | `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` | Корейский |
107
+ | `english_male` | `en-US-GuyNeural` | Английский |
108
+ | `english_female` | `en-US-AriaNeural` | Английский |
109
+
110
+ Постоянное ручное переопределение:
111
+
112
+ ```bash
113
+ TTS_BACKEND="edge"
114
+ TTS_VOICE_TYPE="korean_male"
115
+ TTS_VOICE="ko-KR-InJoonNeural"
116
+ TTS_VOICE_CONFIG="config/tts-voices.json"
117
+ ```
85
118
 
86
- Backend-specific voice options:
119
+ Для OpenVoice, SpeechSwift или Supertonic храните специфичные для бэкенда настройки голоса/референса в разделах ниже; тот же файл каталога голосов всё равно может отслеживать активный тип голоса.
87
120
 
88
- | Backend | Settings | Voice choices |
121
+ Голосовые параметры для конкретных бэкендов:
122
+
123
+ | Бэкенд | Настройки | Варианты голосов |
89
124
  |---|---|---|
90
- | Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | Built-in types plus any `edge-tts --list-voices` voice |
91
- | Supertonic | `SUPERTONIC_VOICE`, `SUPERTONIC_LANGUAGE` | `M1`–`M5`, `F1`–`F5`; `ko`, `en`, `es`, `pt`, `fr` |
92
- | OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE`, `OPENVOICE_LANGUAGE` | User-provided permitted reference WAV |
93
- | SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_MODEL_ID` | Reference-sample voice or backend speaker/model ID |
125
+ | Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | Встроенные типы выше, плюс любой голос, возвращаемый `edge-tts --list-voices` |
126
+ | Supertonic | `SUPERTONIC_VOICE`, `SUPERTONIC_LANGUAGE` | `M1`–`M5`, `F1`–`F5`; язык `ko`, `en`, `es`, `pt`, `fr` |
127
+ | OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE`, `OPENVOICE_LANGUAGE` | Предоставленный пользователем разрешённый референсный WAV; стиль по умолчанию `default` |
128
+ | SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_MODEL_ID` | Голоса на базе референсных образцов для CosyVoice или поддерживаемые бэкендом ID диктора/модели |
94
129
 
95
- ## Utterance Segmentation
130
+ ## Сегментация реплик
96
131
 
97
- `UTTERANCE_IDLE_MS` controls how long the bridge waits after speech before starting STT. Default is `4500` ms.
132
+ `UTTERANCE_IDLE_MS` управляет тем, как долго bridge ждёт после речевого сегмента, прежде чем решить, что пользователь закончил, и запустить STT. Значение по умолчанию — `4500` мс, чтобы сохранять длинные произнесённые инструкции с естественными паузами. Более низкие значения ощущаются быстрее для коротких команд, но могут разделять длинную диктовку; более высокие безопаснее для вдумчивой речи.
98
133
 
99
134
  ```bash
100
- UTTERANCE_IDLE_MS="4500"
101
- UTTERANCE_IDLE_MS="6000"
135
+ UTTERANCE_IDLE_MS="4500" # balanced default
136
+ UTTERANCE_IDLE_MS="6000" # safer for long dictation with pauses
102
137
  ```
103
138
 
104
- ## MCP Server
139
+ ## MCP-сервер
140
+
141
+ VerbalCoding поставляется со stdio MCP-сервером, чтобы Hermes Agent или любой MCP-клиент мог управлять bridge через инструменты, а не полагаться на skills или свободные shell-команды.
142
+
143
+ Пример конфигурации Hermes:
105
144
 
106
145
  ```yaml
107
146
  mcp_servers:
@@ -112,39 +151,89 @@ mcp_servers:
112
151
  connect_timeout: 30
113
152
  ```
114
153
 
115
- Tools: `status`, `doctor`, `set_auto_restart`, `set_language`, `start`, `stop`, and `restart`.
154
+ Доступные MCP-инструменты:
155
+
156
+ | Инструмент | Назначение |
157
+ |---|---|
158
+ | `status` | Сообщить статус bridge/конфигурации без секретов |
159
+ | `doctor` | Запустить doctor-проверку с редактированием секретов |
160
+ | `set_auto_restart` | Включить/выключить автоперезапуск голосового бота при коммите |
161
+ | `set_language` | Обновить STT/прогресс/TTS язык вместе |
162
+ | `start`, `stop`, `restart` | Управлять голосовым bridge Discord |
116
163
 
117
- ## Optional OpenVoice TTS
164
+ ## Необязательный TTS OpenVoice
165
+
166
+ Edge TTS остаётся стандартным и резервным вариантом. Чтобы попробовать локальное клонирование голоса с OpenVoice V2:
118
167
 
119
168
  ```bash
120
169
  ./scripts/setup_openvoice.sh
170
+ # Download checkpoints_v2_0417.zip from OpenVoice docs and extract under vendor/OpenVoice/checkpoints_v2/
171
+ mkdir -p voice-samples
172
+ # Put a permitted reference sample at voice-samples/user-reference.wav,
173
+ # or capture one from Discord with !voice-clone capture.
121
174
  python3 integrations/openvoice/synth.py --openvoice-dir vendor/OpenVoice --ref-audio voice-samples/user-reference.wav --text '안녕하세요. 버벌코딩 목소리 복제 테스트입니다.' --output /tmp/verbalcoding-openvoice-smoke.wav
122
175
  ```
123
176
 
177
+ Затем задайте:
178
+
124
179
  ```bash
125
180
  TTS_BACKEND="openvoice"
126
181
  OPENVOICE_REF_AUDIO="./voice-samples/user-reference.wav"
127
182
  OPENVOICE_PROGRESS="0"
128
183
  ```
129
184
 
130
- Only clone voices you own or have permission to use. OpenVoice falls back to Edge on failure.
185
+ Клонируйте только голоса, которыми вы владеете или на использование которых у вас есть разрешение. Если OpenVoice завершается ошибкой или по таймауту, VerbalCoding возвращается к Edge TTS.
131
186
 
132
- ## Optional Supertonic TTS
187
+ ## Необязательный TTS Supertonic
133
188
 
134
189
  ```bash
135
190
  ./scripts/setup_supertonic.sh
136
191
  supertonic tts '안녕하세요. 수퍼토닉 테스트입니다.' --lang ko --voice M1 --steps 2 --speed 1.0 -o /tmp/verbalcoding-supertonic.wav
137
192
  ```
138
193
 
139
- ## Optional SpeechSwift / CosyVoice TTS
194
+ Затем задайте:
195
+
196
+ ```bash
197
+ TTS_BACKEND="supertonic"
198
+ SUPERTONIC_COMMAND="./.venv-supertonic/bin/supertonic"
199
+ SUPERTONIC_VOICE="M1"
200
+ SUPERTONIC_LANGUAGE="ko"
201
+ SUPERTONIC_STEPS="2"
202
+ SUPERTONIC_SPEED="1.0"
203
+ SUPERTONIC_PROGRESS="0"
204
+ ```
205
+
206
+ Если Supertonic отсутствует, завершается ошибкой или по таймауту, VerbalCoding возвращается к Edge TTS.
207
+
208
+ ## Необязательный TTS SpeechSwift / CosyVoice
209
+
210
+ На Apple Silicon `speech-swift` — локальный бэкенд для корейского клонирования голоса с MLX-native CosyVoice/Qwen3-TTS.
140
211
 
141
212
  ```bash
142
213
  brew tap soniqo/speech https://github.com/soniqo/speech-swift
143
214
  brew install speech
144
215
  ```
145
216
 
146
- Recommended env includes `TTS_BACKEND="speechswift"`, `SPEECHSWIFT_MODE="server"`, `SPEECHSWIFT_ENGINE="cosyvoice"`, `SPEECHSWIFT_REF_AUDIO`, and `SPEECHSWIFT_SERVER_URL`. Keep Edge for quick progress prompts.
217
+ Рекомендуемое окружение:
218
+
219
+ ```bash
220
+ TTS_BACKEND="speechswift"
221
+ SPEECHSWIFT_MODE="server"
222
+ SPEECHSWIFT_ENGINE="cosyvoice"
223
+ SPEECHSWIFT_LANGUAGE="korean"
224
+ SPEECHSWIFT_REF_AUDIO="./voice-samples/user-reference.wav"
225
+ SPEECHSWIFT_SERVER_HOST="127.0.0.1"
226
+ SPEECHSWIFT_SERVER_PORT="18080"
227
+ SPEECHSWIFT_SERVER_URL="http://127.0.0.1:18080"
228
+ SPEECHSWIFT_PROGRESS="0"
229
+ ```
230
+
231
+ Оставьте Edge для быстрых подсказок прогресса/backchannel.
147
232
 
148
- ## Operational Notes
233
+ ## Эксплуатационные заметки
149
234
 
150
- Enable Discord Message Content intent, grant voice connect/speak permissions, authenticate the selected CLI harness separately, and avoid reading diffs/log dumps aloud.
235
+ - Боту нужен включённый привилегированный Discord intent Message Content для текстовых команд.
236
+ - Боту нужны разрешения connect/speak в голосовом канале.
237
+ - Для Hermes Agent настройте/аутентифицируйте Hermes обычным образом (`hermes setup`, `hermes login` и т. п.) в профиле по умолчанию.
238
+ - Для Claude Code, Codex, Gemini, OpenCode, OpenClaw установите и аутентифицируйте эти CLI отдельно.
239
+ - Если CLI выводит diff/code при таймауте или сбое сигнала, bridge не читает это вслух и вместо этого отправляет подробный текст.