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.
- package/README.md +12 -22
- 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 +239 -0
- package/docs/i18n/CONFIGURATION.fr.md +239 -0
- package/docs/i18n/CONFIGURATION.ja.md +239 -0
- package/docs/i18n/CONFIGURATION.ko.md +66 -74
- package/docs/i18n/CONFIGURATION.ru.md +239 -0
- package/docs/i18n/CONFIGURATION.zh.md +239 -0
- package/docs/i18n/FRESH_INSTALL.es.md +207 -0
- package/docs/i18n/FRESH_INSTALL.fr.md +207 -0
- package/docs/i18n/FRESH_INSTALL.ja.md +207 -0
- package/docs/i18n/FRESH_INSTALL.ko.md +60 -54
- package/docs/i18n/FRESH_INSTALL.ru.md +207 -0
- package/docs/i18n/FRESH_INSTALL.zh.md +207 -0
- package/docs/i18n/MULTI_INSTANCE.es.md +180 -0
- package/docs/i18n/MULTI_INSTANCE.fr.md +180 -0
- package/docs/i18n/MULTI_INSTANCE.ja.md +179 -0
- package/docs/i18n/MULTI_INSTANCE.ko.md +46 -46
- package/docs/i18n/MULTI_INSTANCE.ru.md +179 -0
- package/docs/i18n/MULTI_INSTANCE.zh.md +179 -0
- package/docs/i18n/README.es.md +83 -55
- package/docs/i18n/README.fr.md +85 -57
- package/docs/i18n/README.ja.md +83 -55
- package/docs/i18n/README.ko.md +47 -56
- package/docs/i18n/README.ru.md +86 -58
- package/docs/i18n/README.zh.md +83 -56
- package/docs/i18n/RELEASE.es.md +74 -0
- package/docs/i18n/RELEASE.fr.md +74 -0
- package/docs/i18n/RELEASE.ja.md +74 -0
- package/docs/i18n/RELEASE.ko.md +38 -36
- package/docs/i18n/RELEASE.ru.md +74 -0
- package/docs/i18n/RELEASE.zh.md +74 -0
- package/docs/i18n/USAGE.es.md +161 -0
- package/docs/i18n/USAGE.fr.md +161 -0
- package/docs/i18n/USAGE.ja.md +161 -0
- package/docs/i18n/USAGE.ko.md +61 -72
- package/docs/i18n/USAGE.ru.md +161 -0
- package/docs/i18n/USAGE.zh.md +161 -0
- 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,48 +1,40 @@
|
|
|
1
|
-
# VerbalCoding 설정
|
|
1
|
+
# VerbalCoding 설정
|
|
2
2
|
|
|
3
3
|
## 설정 마법사
|
|
4
4
|
|
|
5
|
-
Discord 봇/애플리케이션
|
|
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 공식
|
|
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
|
|
12
|
+
./scripts/install.sh
|
|
21
13
|
```
|
|
22
14
|
|
|
23
|
-
|
|
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`
|
|
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`
|
|
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
|
-
|
|
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)`은 상태, 최종 답변 텍스트, 백엔드 라벨,
|
|
63
|
-
- `ask(text, signal, plan)`은
|
|
64
|
-
- `capabilities`는
|
|
65
|
-
- Hermes는
|
|
54
|
+
- `run({ text }, signal, plan)`은 상태, 최종 답변 텍스트, 백엔드 라벨, 경과 시간, 선택적 세션 메타데이터를 반환합니다.
|
|
55
|
+
- `ask(text, signal, plan)`은 최종 답변 텍스트만 반환하는 호환성 단축 함수입니다.
|
|
56
|
+
- `capabilities`는 백엔드가 세션 이어받기, 스트리밍 진행, 취소를 지원하는지 선언합니다.
|
|
57
|
+
- Hermes는 참조 어댑터입니다: 이어받기, 자세한 진행 스트리밍, 취소, Hermes 세션 파일에서 최종 답변 복구.
|
|
66
58
|
|
|
67
|
-
새 백엔드는
|
|
59
|
+
새 백엔드는 동일한 계약을 구현하고 음성/STT/TTS 동작은 어댑터 밖에 유지해야 합니다.
|
|
68
60
|
|
|
69
|
-
##
|
|
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
|
-
|
|
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
|
-
수동 영구
|
|
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
|
|
119
|
+
OpenVoice, SpeechSwift 또는 Supertonic의 경우 아래 섹션의 백엔드별 음성/참조 설정을 유지하세요. 동일한 음성 카탈로그 파일은 여전히 활성 음성 유형을 추적할 수 있습니다.
|
|
128
120
|
|
|
129
|
-
백엔드별
|
|
121
|
+
백엔드별 음성 옵션:
|
|
130
122
|
|
|
131
|
-
| 백엔드 | 설정 |
|
|
123
|
+
| 백엔드 | 설정 | 음성 선택지 |
|
|
132
124
|
|---|---|---|
|
|
133
|
-
| Edge | `TTS_VOICE_TYPE`, `TTS_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` | 사용자가 제공한
|
|
136
|
-
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_MODEL_ID` | CosyVoice
|
|
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`는 음성
|
|
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 서버를
|
|
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` |
|
|
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
|
-
##
|
|
164
|
+
## 선택 사항: OpenVoice TTS
|
|
173
165
|
|
|
174
|
-
Edge TTS
|
|
166
|
+
Edge TTS는 기본값이자 폴백으로 유지됩니다. OpenVoice V2로 로컬 음성 복제를 시도하려면:
|
|
175
167
|
|
|
176
168
|
```bash
|
|
177
169
|
./scripts/setup_openvoice.sh
|
|
178
|
-
# OpenVoice 문서에서 checkpoints_v2_0417.zip을
|
|
170
|
+
# OpenVoice 문서에서 checkpoints_v2_0417.zip을 다운로드하고 vendor/OpenVoice/checkpoints_v2/ 아래에 압축을 풉니다.
|
|
179
171
|
mkdir -p voice-samples
|
|
180
|
-
#
|
|
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
|
-
|
|
185
|
+
본인이 소유했거나 사용할 권한이 있는 음성만 복제하세요. OpenVoice가 실패하거나 시간이 초과되면 VerbalCoding은 Edge TTS로 폴백합니다.
|
|
194
186
|
|
|
195
|
-
##
|
|
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이 없거나 실패하거나
|
|
206
|
+
Supertonic이 없거나 실패하거나 시간이 초과되면 VerbalCoding은 Edge TTS로 폴백합니다.
|
|
215
207
|
|
|
216
|
-
##
|
|
208
|
+
## 선택 사항: SpeechSwift / CosyVoice TTS
|
|
217
209
|
|
|
218
|
-
Apple Silicon
|
|
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
|
-
빠른
|
|
231
|
+
빠른 진행/백채널 프롬프트에는 Edge를 유지하세요.
|
|
240
232
|
|
|
241
|
-
## 운영
|
|
233
|
+
## 운영 참고 사항
|
|
242
234
|
|
|
243
|
-
- 텍스트 명령을
|
|
244
|
-
-
|
|
245
|
-
- Hermes Agent
|
|
246
|
-
- Claude Code, Codex, Gemini, OpenCode, OpenClaw
|
|
247
|
-
- CLI가
|
|
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 не читает это вслух и вместо этого отправляет подробный текст.
|