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.
- package/README.md +12 -27
- package/app-node/cli_install.test.mjs +15 -0
- package/docs/FRESH_INSTALL.md +8 -2
- package/docs/assets/figures/verbalcoding-flow.svg +45 -30
- package/docs/i18n/CONFIGURATION.es.md +138 -49
- package/docs/i18n/CONFIGURATION.fr.md +138 -49
- package/docs/i18n/CONFIGURATION.ja.md +137 -48
- package/docs/i18n/CONFIGURATION.ko.md +137 -48
- package/docs/i18n/CONFIGURATION.ru.md +138 -49
- package/docs/i18n/CONFIGURATION.zh.md +137 -48
- package/docs/i18n/FRESH_INSTALL.es.md +115 -32
- package/docs/i18n/FRESH_INSTALL.fr.md +115 -32
- package/docs/i18n/FRESH_INSTALL.ja.md +119 -36
- package/docs/i18n/FRESH_INSTALL.ko.md +120 -37
- package/docs/i18n/FRESH_INSTALL.ru.md +115 -32
- package/docs/i18n/FRESH_INSTALL.zh.md +119 -36
- package/docs/i18n/MULTI_INSTANCE.es.md +85 -26
- package/docs/i18n/MULTI_INSTANCE.fr.md +85 -26
- package/docs/i18n/MULTI_INSTANCE.ja.md +87 -29
- package/docs/i18n/MULTI_INSTANCE.ko.md +87 -29
- package/docs/i18n/MULTI_INSTANCE.ru.md +84 -26
- package/docs/i18n/MULTI_INSTANCE.zh.md +87 -29
- package/docs/i18n/README.es.md +109 -45
- package/docs/i18n/README.fr.md +109 -45
- package/docs/i18n/README.ja.md +109 -45
- package/docs/i18n/README.ko.md +108 -45
- package/docs/i18n/README.ru.md +109 -45
- package/docs/i18n/README.zh.md +108 -45
- package/docs/i18n/RELEASE.es.md +53 -37
- package/docs/i18n/RELEASE.fr.md +53 -37
- package/docs/i18n/RELEASE.ja.md +52 -36
- package/docs/i18n/RELEASE.ko.md +52 -36
- package/docs/i18n/RELEASE.ru.md +53 -37
- package/docs/i18n/RELEASE.zh.md +53 -37
- package/docs/i18n/USAGE.es.md +91 -64
- package/docs/i18n/USAGE.fr.md +91 -64
- package/docs/i18n/USAGE.ja.md +90 -63
- package/docs/i18n/USAGE.ko.md +90 -63
- package/docs/i18n/USAGE.ru.md +91 -64
- package/docs/i18n/USAGE.zh.md +90 -63
- package/package.json +1 -1
- package/scripts/bootstrap_prereqs.sh +15 -3
- package/scripts/cli.mjs +1 -1
- package/scripts/doctor.mjs +114 -8
|
@@ -1,36 +1,40 @@
|
|
|
1
1
|
# VerbalCoding 설정
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## 설정 마법사
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Discord 봇/애플리케이션 설정은 여기서 처음부터 다시 설명하지 않습니다. Discord 쪽 단계는 다음 업스트림 가이드를 사용한 뒤 VerbalCoding 설정으로 돌아오세요:
|
|
6
6
|
|
|
7
|
-
- Hermes Agent Discord
|
|
8
|
-
- Discord
|
|
9
|
-
- Discord
|
|
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
|
-
|
|
15
|
+
설치 프로그램은 Discord 토큰, 허용 사용자, 자동 참가 음성 채널 이름, 전사 채널/스레드, CLI 하네스 백엔드, 기본 음성 언어, TTS 설정, 웨이크워드 동작을 묻습니다. mode `0600`으로 `.env`를 작성하며, `.env`는 git에서 무시됩니다. 또한 짧은 셸 명령 `vc`도 연결합니다.
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
수동 설치 후 셸 명령만 필요하다면:
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
```bash
|
|
20
|
+
npm link
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 지원되는 에이전트 백엔드
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
`.env`에서 `AGENT_BACKEND`를 설정하세요.
|
|
26
|
+
|
|
27
|
+
| 백엔드 | 기본 명령 | 참고 |
|
|
24
28
|
|---|---|---|
|
|
25
|
-
| `hermes` | `hermes chat -Q -q` |
|
|
26
|
-
| `claude-code` / `claude` | `claude -p` |
|
|
27
|
-
| `codex` | `codex exec` |
|
|
28
|
-
| `gemini` | `gemini -p` |
|
|
29
|
-
| `opencode` | `opencode run` |
|
|
30
|
-
| `openclaw` | `openclaw run` |
|
|
31
|
-
| `custom` | `AGENT_COMMAND`
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
|
90
|
+
## TTS 음성 선택
|
|
91
|
+
|
|
92
|
+
언어 프리셋과 음성 선택은 별개입니다:
|
|
73
93
|
|
|
74
|
-
`vc language ko|en|auto
|
|
94
|
+
- `vc language ko|en|auto`는 STT 언어, 진행 언어, 해당 언어의 기본 음성을 변경합니다.
|
|
95
|
+
- “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female`, `switch speaker to English` 같은 라이브 음성 명령은 화자/음성 유형만 변경합니다.
|
|
96
|
+
- `!voice-test <text>`는 현재 선택된 백엔드와 음성으로 빠른 샘플을 재생합니다.
|
|
75
97
|
|
|
76
|
-
|
|
98
|
+
음성 선택은 기본적으로 `config/tts-voices.json`에 저장됩니다. `TTS_VOICE_CONFIG`로 경로를 재정의하세요. 실행 중인 브리지는 합성 전에 음성 선택을 다시 읽고 적용하므로, 전체 재시작 없이도 음성 명령이 적용됩니다.
|
|
77
99
|
|
|
78
|
-
|
|
100
|
+
기본 Edge 카탈로그:
|
|
101
|
+
|
|
102
|
+
| `TTS_VOICE_TYPE` | `TTS_VOICE` | 언어 |
|
|
79
103
|
|---|---|---|
|
|
80
|
-
| `korean_male` | `ko-KR-InJoonNeural` |
|
|
81
|
-
| `korean_female` | `ko-KR-SunHiNeural` |
|
|
82
|
-
| `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` |
|
|
83
|
-
| `english_male` | `en-US-GuyNeural` |
|
|
84
|
-
| `english_female` | `en-US-AriaNeural` |
|
|
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
|
-
|
|
119
|
+
OpenVoice, SpeechSwift 또는 Supertonic의 경우 아래 섹션의 백엔드별 음성/참조 설정을 유지하세요. 동일한 음성 카탈로그 파일은 여전히 활성 음성 유형을 추적할 수 있습니다.
|
|
87
120
|
|
|
88
|
-
|
|
121
|
+
백엔드별 음성 옵션:
|
|
122
|
+
|
|
123
|
+
| 백엔드 | 설정 | 음성 선택지 |
|
|
89
124
|
|---|---|---|
|
|
90
|
-
| Edge | `TTS_VOICE_TYPE`, `TTS_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` |
|
|
93
|
-
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_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
|
-
##
|
|
130
|
+
## 발화 분할
|
|
96
131
|
|
|
97
|
-
`UTTERANCE_IDLE_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
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
185
|
+
본인이 소유했거나 사용할 권한이 있는 음성만 복제하세요. OpenVoice가 실패하거나 시간이 초과되면 VerbalCoding은 Edge TTS로 폴백합니다.
|
|
131
186
|
|
|
132
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
233
|
+
## 운영 참고 사항
|
|
149
234
|
|
|
150
|
-
|
|
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
|
-
##
|
|
3
|
+
## Мастер настройки
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Настройка Discord-бота/приложения намеренно не объясняется здесь с нуля. Используйте эти исходные руководства для шагов на стороне Discord, затем вернитесь к настройке VerbalCoding:
|
|
6
6
|
|
|
7
|
-
- Hermes Agent
|
|
8
|
-
-
|
|
9
|
-
-
|
|
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
|
-
|
|
15
|
+
Установщик спрашивает токен Discord, разрешённых пользователей, имена голосовых каналов для автоподключения, канал/тред расшифровок, бэкенд CLI-харнеса, язык голоса по умолчанию, настройки TTS и поведение wake-word. Он записывает `.env` с режимом `0600`; `.env` игнорируется git. Он также связывает короткую shell-команду `vc`.
|
|
18
16
|
|
|
19
|
-
|
|
17
|
+
Если после ручной установки вам нужна только shell-команда:
|
|
20
18
|
|
|
21
|
-
|
|
19
|
+
```bash
|
|
20
|
+
npm link
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Поддерживаемые бэкенды агентов
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
Задайте `AGENT_BACKEND` в `.env`.
|
|
26
|
+
|
|
27
|
+
| Бэкенд | Команда по умолчанию | Примечания |
|
|
24
28
|
|---|---|---|
|
|
25
|
-
| `hermes` | `hermes chat -Q -q` |
|
|
26
|
-
| `claude-code` / `claude` | `claude -p` |
|
|
27
|
-
| `codex` | `codex exec` |
|
|
28
|
-
| `gemini` | `gemini -p` |
|
|
29
|
-
| `opencode` | `opencode run` |
|
|
30
|
-
| `openclaw` | `openclaw run` |
|
|
31
|
-
| `custom` | `AGENT_COMMAND`
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
##
|
|
90
|
+
## Выбор голоса TTS
|
|
91
|
+
|
|
92
|
+
Языковые пресеты и выбор голоса разделены:
|
|
73
93
|
|
|
74
|
-
`vc language ko|en|auto`
|
|
94
|
+
- `vc language ko|en|auto` меняет язык STT, язык прогресса и голос по умолчанию для этого языка.
|
|
95
|
+
- Живые голосовые команды вроде “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female` и `switch speaker to English` меняют только диктора/тип голоса.
|
|
96
|
+
- `!voice-test <text>` воспроизводит быстрый образец с текущим выбранным бэкендом и голосом.
|
|
75
97
|
|
|
76
|
-
|
|
98
|
+
Выбор голоса по умолчанию хранится в `config/tts-voices.json`. Переопределите путь через `TTS_VOICE_CONFIG`. Работающий bridge перечитывает/применяет выбор голоса перед синтезом, поэтому голосовые команды вступают в силу без полного перезапуска.
|
|
77
99
|
|
|
78
|
-
|
|
100
|
+
Стандартный каталог Edge:
|
|
101
|
+
|
|
102
|
+
| `TTS_VOICE_TYPE` | `TTS_VOICE` | Язык |
|
|
79
103
|
|---|---|---|
|
|
80
|
-
| `korean_male` | `ko-KR-InJoonNeural` |
|
|
81
|
-
| `korean_female` | `ko-KR-SunHiNeural` |
|
|
82
|
-
| `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` |
|
|
83
|
-
| `english_male` | `en-US-GuyNeural` |
|
|
84
|
-
| `english_female` | `en-US-AriaNeural` |
|
|
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
|
-
|
|
119
|
+
Для OpenVoice, SpeechSwift или Supertonic храните специфичные для бэкенда настройки голоса/референса в разделах ниже; тот же файл каталога голосов всё равно может отслеживать активный тип голоса.
|
|
87
120
|
|
|
88
|
-
|
|
121
|
+
Голосовые параметры для конкретных бэкендов:
|
|
122
|
+
|
|
123
|
+
| Бэкенд | Настройки | Варианты голосов |
|
|
89
124
|
|---|---|---|
|
|
90
|
-
| Edge | `TTS_VOICE_TYPE`, `TTS_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` |
|
|
93
|
-
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_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
|
-
##
|
|
130
|
+
## Сегментация реплик
|
|
96
131
|
|
|
97
|
-
`UTTERANCE_IDLE_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
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
185
|
+
Клонируйте только голоса, которыми вы владеете или на использование которых у вас есть разрешение. Если OpenVoice завершается ошибкой или по таймауту, VerbalCoding возвращается к Edge TTS.
|
|
131
186
|
|
|
132
|
-
##
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
233
|
+
## Эксплуатационные заметки
|
|
149
234
|
|
|
150
|
-
|
|
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 не читает это вслух и вместо этого отправляет подробный текст.
|