verbalcoding 0.2.6 → 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 -22
  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 +239 -0
  6. package/docs/i18n/CONFIGURATION.fr.md +239 -0
  7. package/docs/i18n/CONFIGURATION.ja.md +239 -0
  8. package/docs/i18n/CONFIGURATION.ko.md +66 -74
  9. package/docs/i18n/CONFIGURATION.ru.md +239 -0
  10. package/docs/i18n/CONFIGURATION.zh.md +239 -0
  11. package/docs/i18n/FRESH_INSTALL.es.md +207 -0
  12. package/docs/i18n/FRESH_INSTALL.fr.md +207 -0
  13. package/docs/i18n/FRESH_INSTALL.ja.md +207 -0
  14. package/docs/i18n/FRESH_INSTALL.ko.md +60 -54
  15. package/docs/i18n/FRESH_INSTALL.ru.md +207 -0
  16. package/docs/i18n/FRESH_INSTALL.zh.md +207 -0
  17. package/docs/i18n/MULTI_INSTANCE.es.md +180 -0
  18. package/docs/i18n/MULTI_INSTANCE.fr.md +180 -0
  19. package/docs/i18n/MULTI_INSTANCE.ja.md +179 -0
  20. package/docs/i18n/MULTI_INSTANCE.ko.md +46 -46
  21. package/docs/i18n/MULTI_INSTANCE.ru.md +179 -0
  22. package/docs/i18n/MULTI_INSTANCE.zh.md +179 -0
  23. package/docs/i18n/README.es.md +83 -55
  24. package/docs/i18n/README.fr.md +85 -57
  25. package/docs/i18n/README.ja.md +83 -55
  26. package/docs/i18n/README.ko.md +47 -56
  27. package/docs/i18n/README.ru.md +86 -58
  28. package/docs/i18n/README.zh.md +83 -56
  29. package/docs/i18n/RELEASE.es.md +74 -0
  30. package/docs/i18n/RELEASE.fr.md +74 -0
  31. package/docs/i18n/RELEASE.ja.md +74 -0
  32. package/docs/i18n/RELEASE.ko.md +38 -36
  33. package/docs/i18n/RELEASE.ru.md +74 -0
  34. package/docs/i18n/RELEASE.zh.md +74 -0
  35. package/docs/i18n/USAGE.es.md +161 -0
  36. package/docs/i18n/USAGE.fr.md +161 -0
  37. package/docs/i18n/USAGE.ja.md +161 -0
  38. package/docs/i18n/USAGE.ko.md +61 -72
  39. package/docs/i18n/USAGE.ru.md +161 -0
  40. package/docs/i18n/USAGE.zh.md +161 -0
  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,48 +1,40 @@
1
- # VerbalCoding 설정 가이드
1
+ # VerbalCoding 설정
2
2
 
3
3
  ## 설정 마법사
4
4
 
5
- Discord 봇/애플리케이션 생성 절차는 여기에서 처음부터 반복 설명하지 않습니다. Discord 쪽 설정은 아래 상위 문서를 보고 진행한 뒤 VerbalCoding 설정으로 돌아오세요.
5
+ Discord 봇/애플리케이션 설정은 여기서 처음부터 다시 설명하지 않습니다. Discord 쪽 단계는 다음 업스트림 가이드를 사용한 뒤 VerbalCoding 설정으로 돌아오세요:
6
6
 
7
7
  - Hermes Agent Discord 메시징 가이드: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
8
8
  - Discord 공식 봇 개요: <https://docs.discord.com/developers/bots/overview>
9
- - Discord 공식 시작 가이드: <https://docs.discord.com/developers/quick-start/getting-started>
10
-
11
- npm으로 설치한 경우:
12
-
13
- ```bash
14
- vc setup --yes
15
- ```
16
-
17
- GitHub 클론에서 직접 실행하는 경우:
9
+ - Discord 공식 빠른 시작: <https://docs.discord.com/developers/quick-start/getting-started>
18
10
 
19
11
  ```bash
20
- ./scripts/install.sh --yes
12
+ ./scripts/install.sh
21
13
  ```
22
14
 
23
- 설치기는 Discord 토큰, 허용 사용자, 자동 입장 음성 채널 이름, transcript 채널/스레드, CLI 하네스 백엔드, 기본 음성 언어, TTS 설정, wake word 동작을 묻습니다. 결과는 권한 `0600`의 `.env`에 저장되며, `.env`는 git에서 무시됩니다. 클론 설치에서는 짧은 셸 명령 `vc`도 연결합니다.
15
+ 설치 프로그램은 Discord 토큰, 허용 사용자, 자동 참가 음성 채널 이름, 전사 채널/스레드, CLI 하네스 백엔드, 기본 음성 언어, TTS 설정, 웨이크워드 동작을 묻습니다. mode `0600`으로 `.env`를 작성하며, `.env`는 git에서 무시됩니다. 또한 짧은 셸 명령 `vc`도 연결합니다.
24
16
 
25
- 수동 설치 후 셸 명령만 연결하려면:
17
+ 수동 설치 후 셸 명령만 필요하다면:
26
18
 
27
19
  ```bash
28
20
  npm link
29
21
  ```
30
22
 
31
- ## 지원 에이전트 백엔드
23
+ ## 지원되는 에이전트 백엔드
32
24
 
33
- `.env`에서 `AGENT_BACKEND`를 설정합니다.
25
+ `.env`에서 `AGENT_BACKEND`를 설정하세요.
34
26
 
35
- | 백엔드 | 기본 명령 | 메모 |
27
+ | 백엔드 | 기본 명령 | 참고 |
36
28
  |---|---|---|
37
- | `hermes` | `hermes chat -Q -q` | 기본값. `.verbalcoding-session` resume 동작을 유지합니다. |
38
- | `claude-code` / `claude` | `claude -p` | `CLAUDE_COMMAND` 또는 `AGENT_COMMAND`로 재정의 가능 |
39
- | `codex` | `codex exec` | `CODEX_COMMAND` 또는 `AGENT_COMMAND`로 재정의 가능 |
40
- | `gemini` | `gemini -p` | `GEMINI_COMMAND` 또는 `AGENT_COMMAND`로 재정의 가능 |
41
- | `opencode` | `opencode run` | `OPENCODE_COMMAND` 또는 `AGENT_COMMAND`로 재정의 가능 |
42
- | `openclaw` | `openclaw run` | `OPENCLAW_COMMAND` 또는 `AGENT_COMMAND`로 재정의 가능 |
43
- | `custom` | `AGENT_COMMAND` 필수 | 사용자 prompt가 마지막 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 인자로 추가됩니다. |
44
36
 
45
- 공통 override 예시:
37
+ 일반 재정의:
46
38
 
47
39
  ```bash
48
40
  AGENT_BACKEND=custom
@@ -57,16 +49,16 @@ LATENCY_LOG_PATH=./.logs/latency.jsonl
57
49
 
58
50
  ## 에이전트 어댑터 계약
59
51
 
60
- 음성 브릿지는 모든 백엔드와 하나의 어댑터 계약으로 통신합니다.
52
+ 음성 브리지는 하나의 어댑터 계약을 통해 모든 백엔드와 통신합니다:
61
53
 
62
- - `run({ text }, signal, plan)`은 상태, 최종 답변 텍스트, 백엔드 라벨, elapsed time, 선택적 세션 metadata를 반환합니다.
63
- - `ask(text, signal, plan)`은 호환용 단축 함수이며 최종 답변 텍스트만 반환합니다.
64
- - `capabilities`는 해당 백엔드가 session resume, streaming progress, cancellation을 지원하는지 선언합니다.
65
- - Hermes는 기준 어댑터입니다. resume, verbose progress streaming, cancellation, Hermes 세션 파일에서 최종 답변 복구를 지원합니다.
54
+ - `run({ text }, signal, plan)`은 상태, 최종 답변 텍스트, 백엔드 라벨, 경과 시간, 선택적 세션 메타데이터를 반환합니다.
55
+ - `ask(text, signal, plan)`은 최종 답변 텍스트만 반환하는 호환성 단축 함수입니다.
56
+ - `capabilities`는 백엔드가 세션 이어받기, 스트리밍 진행, 취소를 지원하는지 선언합니다.
57
+ - Hermes는 참조 어댑터입니다: 이어받기, 자세한 진행 스트리밍, 취소, Hermes 세션 파일에서 최종 답변 복구.
66
58
 
67
- 새 백엔드는 같은 계약을 구현하고, voice/STT/TTS 동작은 어댑터 밖에 유지하는 것이 좋습니다.
59
+ 새 백엔드는 동일한 계약을 구현하고 음성/STT/TTS 동작은 어댑터 밖에 유지해야 합니다.
68
60
 
69
- ## 예시 `.env`
61
+ ## `.env` 예시
70
62
 
71
63
  ```bash
72
64
  DISCORD_BOT_TOKEN="***"
@@ -95,15 +87,15 @@ AGENT_VERBOSE_PROGRESS="0"
95
87
  LATENCY_LOG_PATH="./.logs/latency.jsonl"
96
88
  ```
97
89
 
98
- ## TTS 목소리 선택
90
+ ## TTS 음성 선택
99
91
 
100
- 언어 프리셋과 목소리 선택은 분리되어 있습니다.
92
+ 언어 프리셋과 음성 선택은 별개입니다:
101
93
 
102
- - `vc language ko|en|auto`는 STT 언어, 진행 언어, 해당 언어의 기본 목소리를 함께 바꿉니다.
103
- - “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female`, `switch speaker to English` 같은 실시간 음성 명령은 말하는 사람/목소리 타입만 바꿉니다.
104
- - `!voice-test <text>`는 현재 선택된 백엔드와 목소리로 짧은 샘플을 재생합니다.
94
+ - `vc language ko|en|auto`는 STT 언어, 진행 언어, 해당 언어의 기본 음성을 변경합니다.
95
+ - “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female`, `switch speaker to English` 같은 라이브 음성 명령은 화자/음성 유형만 변경합니다.
96
+ - `!voice-test <text>`는 현재 선택된 백엔드와 음성으로 빠른 샘플을 재생합니다.
105
97
 
106
- 목소리 선택은 기본적으로 `config/tts-voices.json`에 저장됩니다. 경로는 `TTS_VOICE_CONFIG`로 바꿀 있습니다. 실행 중인 브릿지는 합성 직전에 목소리 선택을 다시 적용하므로, 음성 명령으로 바꾼 목소리는 전체 재시작 없이 바로 반영됩니다.
98
+ 음성 선택은 기본적으로 `config/tts-voices.json`에 저장됩니다. `TTS_VOICE_CONFIG`로 경로를 재정의하세요. 실행 중인 브리지는 합성 전에 음성 선택을 다시 읽고 적용하므로, 전체 재시작 없이도 음성 명령이 적용됩니다.
107
99
 
108
100
  기본 Edge 카탈로그:
109
101
 
@@ -115,7 +107,7 @@ LATENCY_LOG_PATH="./.logs/latency.jsonl"
115
107
  | `english_male` | `en-US-GuyNeural` | 영어 |
116
108
  | `english_female` | `en-US-AriaNeural` | 영어 |
117
109
 
118
- 수동 영구 override 예시:
110
+ 수동 영구 재정의:
119
111
 
120
112
  ```bash
121
113
  TTS_BACKEND="edge"
@@ -124,29 +116,29 @@ TTS_VOICE="ko-KR-InJoonNeural"
124
116
  TTS_VOICE_CONFIG="config/tts-voices.json"
125
117
  ```
126
118
 
127
- OpenVoice, SpeechSwift, Supertonic 때는 아래 백엔드별 reference/voice 설정을 유지하세요. 같은 voice catalog 파일에서 현재 voice type을 추적할 수 있습니다.
119
+ OpenVoice, SpeechSwift 또는 Supertonic 경우 아래 섹션의 백엔드별 음성/참조 설정을 유지하세요. 동일한 음성 카탈로그 파일은 여전히 활성 음성 유형을 추적할 수 있습니다.
128
120
 
129
- 백엔드별 목소리 옵션:
121
+ 백엔드별 음성 옵션:
130
122
 
131
- | 백엔드 | 설정 | 목소리 선택지 |
123
+ | 백엔드 | 설정 | 음성 선택지 |
132
124
  |---|---|---|
133
- | Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | 위 기본 타입, 또는 `edge-tts --list-voices`가 반환하는 모든 voice |
125
+ | Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | 위 내장 유형 `edge-tts --list-voices`가 반환하는 모든 음성 |
134
126
  | Supertonic | `SUPERTONIC_VOICE`, `SUPERTONIC_LANGUAGE` | `M1`–`M5`, `F1`–`F5`; 언어 `ko`, `en`, `es`, `pt`, `fr` |
135
- | OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE`, `OPENVOICE_LANGUAGE` | 사용자가 제공한 허가된 reference WAV; style 기본값은 `default` |
136
- | SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_MODEL_ID` | CosyVoice reference sample voice 또는 백엔드가 지원하는 speaker/model ID |
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 |
137
129
 
138
- ## 발화 분리 설정
130
+ ## 발화 분할
139
131
 
140
- `UTTERANCE_IDLE_MS`는 음성 segment가 끝난 사용자의 말이 끝났다고 판단하고 STT를 시작하기 전까지 기다리는 시간입니다. 기본값은 `4500` ms입니다.지시 자연스러운 멈춤을 보존하기 위한 값입니다. 낮추면 짧은 명령 반응은 빨라지지만발화가 잘릴 수 있고, 높이면 생각하면서 말하는 dictation에 더 안전합니다.
132
+ `UTTERANCE_IDLE_MS`는 음성 구간 이후 사용자가 말을 끝냈다고 판단하고 STT를 시작하기 전까지 브리지가 기다리는 시간을 제어합니다. 기본값은 자연스러운 멈춤이 있는 음성 지시를 보존하기 위해 `4500` ms입니다. 낮은 값은 짧은 명령에서 빠르게 느껴지지만 받아쓰기를 나눌 수 있고, 높은 값은 생각하며 말할 더 안전합니다.
141
133
 
142
134
  ```bash
143
135
  UTTERANCE_IDLE_MS="4500" # 균형 잡힌 기본값
144
- UTTERANCE_IDLE_MS="6000" # 중간 멈춤이 있는 긴 발화에 더 안전
136
+ UTTERANCE_IDLE_MS="6000" # 멈춤이 있는 긴 받아쓰기에 더 안전
145
137
  ```
146
138
 
147
139
  ## MCP 서버
148
140
 
149
- VerbalCoding은 stdio MCP 서버를 포함합니다. Hermes Agent 또는 MCP client는 자유 형식 shell 명령 대신 도구로 브릿지를 제어할 수 있습니다.
141
+ VerbalCoding은 stdio MCP 서버를 포함하므로 Hermes Agent 또는 모든 MCP 클라이언트가 skill이나 자유 형식 명령에 의존하지 않고 도구를 통해 브리지를 제어할 수 있습니다.
150
142
 
151
143
  Hermes 설정 예시:
152
144
 
@@ -161,28 +153,28 @@ mcp_servers:
161
153
 
162
154
  노출되는 MCP 도구:
163
155
 
164
- | 도구 | 용도 |
156
+ | 도구 | 목적 |
165
157
  |---|---|
166
- | `status` | 비밀값 없이 브릿지/설정 상태 보고 |
167
- | `doctor` | 비밀값을 숨긴 doctor 점검 실행 |
168
- | `set_auto_restart` | 커밋 음성 봇 자동 재시작 켜기/끄기 |
169
- | `set_language` | STT/진행/TTS 언어를 함께 변경 |
170
- | `start`, `stop`, `restart` | Discord 음성 브릿지 제어 |
158
+ | `status` | 비밀 정보 없이 브리지/설정 상태 보고 |
159
+ | `doctor` | 민감 정보가 제거된 doctor 점검 실행 |
160
+ | `set_auto_restart` | 커밋 시점 음성 봇 자동 재시작 활성화/비활성화 |
161
+ | `set_language` | STT/진행/TTS 언어를 함께 업데이트 |
162
+ | `start`, `stop`, `restart` | Discord 음성 브리지 제어 |
171
163
 
172
- ## 선택: OpenVoice TTS
164
+ ## 선택 사항: OpenVoice TTS
173
165
 
174
- Edge TTS 기본값이자 fallback입니다. OpenVoice V2로 로컬 음성 복제를 시험하려면:
166
+ Edge TTS 기본값이자 폴백으로 유지됩니다. OpenVoice V2로 로컬 음성 복제를 시도하려면:
175
167
 
176
168
  ```bash
177
169
  ./scripts/setup_openvoice.sh
178
- # OpenVoice 문서에서 checkpoints_v2_0417.zip을 받아 vendor/OpenVoice/checkpoints_v2/ 아래에 풉니다.
170
+ # OpenVoice 문서에서 checkpoints_v2_0417.zip을 다운로드하고 vendor/OpenVoice/checkpoints_v2/ 아래에 압축을 풉니다.
179
171
  mkdir -p voice-samples
180
- # 허가된 기준 샘플을 voice-samples/user-reference.wav에 넣거나,
181
- # Discord에서 !voice-clone capture로 샘플을 캡처합니다.
172
+ # 허용된 참조 샘플을 voice-samples/user-reference.wav에 넣거나,
173
+ # Discord에서 !voice-clone capture로 하나를 캡처합니다.
182
174
  python3 integrations/openvoice/synth.py --openvoice-dir vendor/OpenVoice --ref-audio voice-samples/user-reference.wav --text '안녕하세요. 버벌코딩 목소리 복제 테스트입니다.' --output /tmp/verbalcoding-openvoice-smoke.wav
183
175
  ```
184
176
 
185
- 설정:
177
+ 그런 다음 다음을 설정하세요:
186
178
 
187
179
  ```bash
188
180
  TTS_BACKEND="openvoice"
@@ -190,16 +182,16 @@ OPENVOICE_REF_AUDIO="./voice-samples/user-reference.wav"
190
182
  OPENVOICE_PROGRESS="0"
191
183
  ```
192
184
 
193
- 본인 소유이거나 사용 허가를 받은 목소리만 복제하세요. OpenVoice가 실패하거나 timeout되면 VerbalCoding은 Edge TTS로 fallback합니다.
185
+ 본인이 소유했거나 사용할 권한이 있는 음성만 복제하세요. OpenVoice가 실패하거나 시간이 초과되면 VerbalCoding은 Edge TTS로 폴백합니다.
194
186
 
195
- ## 선택: Supertonic TTS
187
+ ## 선택 사항: Supertonic TTS
196
188
 
197
189
  ```bash
198
190
  ./scripts/setup_supertonic.sh
199
191
  supertonic tts '안녕하세요. 수퍼토닉 테스트입니다.' --lang ko --voice M1 --steps 2 --speed 1.0 -o /tmp/verbalcoding-supertonic.wav
200
192
  ```
201
193
 
202
- 설정:
194
+ 그런 다음 다음을 설정하세요:
203
195
 
204
196
  ```bash
205
197
  TTS_BACKEND="supertonic"
@@ -211,11 +203,11 @@ SUPERTONIC_SPEED="1.0"
211
203
  SUPERTONIC_PROGRESS="0"
212
204
  ```
213
205
 
214
- Supertonic이 없거나 실패하거나 timeout되면 VerbalCoding은 Edge TTS로 fallback합니다.
206
+ Supertonic이 없거나 실패하거나 시간이 초과되면 VerbalCoding은 Edge TTS로 폴백합니다.
215
207
 
216
- ## 선택: SpeechSwift / CosyVoice TTS
208
+ ## 선택 사항: SpeechSwift / CosyVoice TTS
217
209
 
218
- Apple Silicon에서는 `speech-swift`가 MLX-native CosyVoice/Qwen3-TTS 기반 한국어 음성 복제용 로컬 백엔드로 동작할 수 있습니다.
210
+ Apple Silicon에서 `speech-swift`는 MLX 네이티브 CosyVoice/Qwen3-TTS 사용하는 한국어 음성 복제용 로컬 백엔드입니다.
219
211
 
220
212
  ```bash
221
213
  brew tap soniqo/speech https://github.com/soniqo/speech-swift
@@ -236,12 +228,12 @@ SPEECHSWIFT_SERVER_URL="http://127.0.0.1:18080"
236
228
  SPEECHSWIFT_PROGRESS="0"
237
229
  ```
238
230
 
239
- 빠른 진행/짧은 backchannel prompt는 Edge를 유지하는 편이 안전합니다.
231
+ 빠른 진행/백채널 프롬프트에는 Edge를 유지하세요.
240
232
 
241
- ## 운영 메모
233
+ ## 운영 참고 사항
242
234
 
243
- - 텍스트 명령을 쓰려면 Discord bot의 privileged Message Content intent가 켜져 있어야 합니다.
244
- - 봇에는 음성 채널 connect/speak 권한이 필요합니다.
245
- - Hermes Agent 쓴다면 기본 프로필에서 Hermes를 정상 설정/인증하세요. 예: `hermes setup`, `hermes login` 등.
246
- - Claude Code, Codex, Gemini, OpenCode, OpenClaw 쓰려면 해당 CLI를 별도로 설치하고 인증하세요.
247
- - CLI가 timeout 또는 signal 실패 diff/code 출력하면 브릿지는 내용을 음성으로 읽지 않고 자세한 텍스트로만 보냅니다.
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 출력을 내보내면, 브리지는 이를 소리 내어 읽지 않고 자세한 텍스트를 대신 보냅니다.
@@ -0,0 +1,239 @@
1
+ # Конфигурация VerbalCoding
2
+
3
+ ## Мастер настройки
4
+
5
+ Настройка Discord-бота/приложения намеренно не объясняется здесь с нуля. Используйте эти исходные руководства для шагов на стороне Discord, затем вернитесь к настройке VerbalCoding:
6
+
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
+
11
+ ```bash
12
+ ./scripts/install.sh
13
+ ```
14
+
15
+ Установщик спрашивает токен Discord, разрешённых пользователей, имена голосовых каналов для автоподключения, канал/тред расшифровок, бэкенд CLI-харнеса, язык голоса по умолчанию, настройки TTS и поведение wake-word. Он записывает `.env` с режимом `0600`; `.env` игнорируется git. Он также связывает короткую shell-команду `vc`.
16
+
17
+ Если после ручной установки вам нужна только shell-команда:
18
+
19
+ ```bash
20
+ npm link
21
+ ```
22
+
23
+ ## Поддерживаемые бэкенды агентов
24
+
25
+ Задайте `AGENT_BACKEND` в `.env`.
26
+
27
+ | Бэкенд | Команда по умолчанию | Примечания |
28
+ |---|---|---|
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. |
36
+
37
+ Общие переопределения:
38
+
39
+ ```bash
40
+ AGENT_BACKEND=custom
41
+ AGENT_LABEL="My Harness"
42
+ AGENT_COMMAND="my-harness run --non-interactive"
43
+ AGENT_TASK_TIMEOUT_MS=0
44
+ AGENT_CHAT_TIMEOUT_MS=45000
45
+ AGENT_VERBOSE_PROGRESS=0
46
+ UTTERANCE_IDLE_MS=4500
47
+ LATENCY_LOG_PATH=./.logs/latency.jsonl
48
+ ```
49
+
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`
62
+
63
+ ```bash
64
+ DISCORD_BOT_TOKEN="***"
65
+ DISCORD_ALLOWED_USERS="123456789012345678"
66
+ AUTO_JOIN_VOICE_CHANNELS="일반,General,general"
67
+ TRANSCRIPT_CHANNEL_ID="123456789012345678"
68
+
69
+ AGENT_BACKEND="hermes"
70
+ STT_ENGINE="whisper_cpp"
71
+ WHISPER_CPP_BIN="whisper-cli"
72
+ WHISPER_CPP_MODEL="./models/ggml-small-q5_1.bin"
73
+
74
+ TTS_BACKEND="edge"
75
+ TTS_VOICE_TYPE="korean_female"
76
+ TTS_VOICE="ko-KR-SunHiNeural"
77
+ TTS_RATE="+10%"
78
+ TTS_MAX_CHARS="495"
79
+ TTS_VOLUME="1.0"
80
+
81
+ REQUIRE_WAKE_WORD="0"
82
+ MIN_UTTERANCE_SECONDS="1.0"
83
+ UTTERANCE_IDLE_MS="4500"
84
+ HERMES_TASK_TIMEOUT_MS="0"
85
+ HERMES_CHAT_TIMEOUT_MS="45000"
86
+ AGENT_VERBOSE_PROGRESS="0"
87
+ LATENCY_LOG_PATH="./.logs/latency.jsonl"
88
+ ```
89
+
90
+ ## Выбор голоса TTS
91
+
92
+ Языковые пресеты и выбор голоса разделены:
93
+
94
+ - `vc language ko|en|auto` меняет язык STT, язык прогресса и голос по умолчанию для этого языка.
95
+ - Живые голосовые команды вроде “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female` и `switch speaker to English` меняют только диктора/тип голоса.
96
+ - `!voice-test <text>` воспроизводит быстрый образец с текущим выбранным бэкендом и голосом.
97
+
98
+ Выбор голоса по умолчанию хранится в `config/tts-voices.json`. Переопределите путь через `TTS_VOICE_CONFIG`. Работающий bridge перечитывает/применяет выбор голоса перед синтезом, поэтому голосовые команды вступают в силу без полного перезапуска.
99
+
100
+ Стандартный каталог Edge:
101
+
102
+ | `TTS_VOICE_TYPE` | `TTS_VOICE` | Язык |
103
+ |---|---|---|
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
+ ```
118
+
119
+ Для OpenVoice, SpeechSwift или Supertonic храните специфичные для бэкенда настройки голоса/референса в разделах ниже; тот же файл каталога голосов всё равно может отслеживать активный тип голоса.
120
+
121
+ Голосовые параметры для конкретных бэкендов:
122
+
123
+ | Бэкенд | Настройки | Варианты голосов |
124
+ |---|---|---|
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 диктора/модели |
129
+
130
+ ## Сегментация реплик
131
+
132
+ `UTTERANCE_IDLE_MS` управляет тем, как долго bridge ждёт после речевого сегмента, прежде чем решить, что пользователь закончил, и запустить STT. Значение по умолчанию — `4500` мс, чтобы сохранять длинные произнесённые инструкции с естественными паузами. Более низкие значения ощущаются быстрее для коротких команд, но могут разделять длинную диктовку; более высокие безопаснее для вдумчивой речи.
133
+
134
+ ```bash
135
+ UTTERANCE_IDLE_MS="4500" # balanced default
136
+ UTTERANCE_IDLE_MS="6000" # safer for long dictation with pauses
137
+ ```
138
+
139
+ ## MCP-сервер
140
+
141
+ VerbalCoding поставляется со stdio MCP-сервером, чтобы Hermes Agent или любой MCP-клиент мог управлять bridge через инструменты, а не полагаться на skills или свободные shell-команды.
142
+
143
+ Пример конфигурации Hermes:
144
+
145
+ ```yaml
146
+ mcp_servers:
147
+ verbalcoding:
148
+ command: "node"
149
+ args: ["/path/to/VerbalCoding/scripts/mcp-server.mjs"]
150
+ timeout: 120
151
+ connect_timeout: 30
152
+ ```
153
+
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 |
163
+
164
+ ## Необязательный TTS OpenVoice
165
+
166
+ Edge TTS остаётся стандартным и резервным вариантом. Чтобы попробовать локальное клонирование голоса с OpenVoice V2:
167
+
168
+ ```bash
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.
174
+ python3 integrations/openvoice/synth.py --openvoice-dir vendor/OpenVoice --ref-audio voice-samples/user-reference.wav --text '안녕하세요. 버벌코딩 목소리 복제 테스트입니다.' --output /tmp/verbalcoding-openvoice-smoke.wav
175
+ ```
176
+
177
+ Затем задайте:
178
+
179
+ ```bash
180
+ TTS_BACKEND="openvoice"
181
+ OPENVOICE_REF_AUDIO="./voice-samples/user-reference.wav"
182
+ OPENVOICE_PROGRESS="0"
183
+ ```
184
+
185
+ Клонируйте только голоса, которыми вы владеете или на использование которых у вас есть разрешение. Если OpenVoice завершается ошибкой или по таймауту, VerbalCoding возвращается к Edge TTS.
186
+
187
+ ## Необязательный TTS Supertonic
188
+
189
+ ```bash
190
+ ./scripts/setup_supertonic.sh
191
+ supertonic tts '안녕하세요. 수퍼토닉 테스트입니다.' --lang ko --voice M1 --steps 2 --speed 1.0 -o /tmp/verbalcoding-supertonic.wav
192
+ ```
193
+
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.
211
+
212
+ ```bash
213
+ brew tap soniqo/speech https://github.com/soniqo/speech-swift
214
+ brew install speech
215
+ ```
216
+
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.
232
+
233
+ ## Эксплуатационные заметки
234
+
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 не читает это вслух и вместо этого отправляет подробный текст.