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
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
# Configuration de VerbalCoding
|
|
2
|
+
|
|
3
|
+
## Assistant de configuration
|
|
4
|
+
|
|
5
|
+
La configuration du bot/de l'application Discord n'est volontairement pas réexpliquée depuis zéro ici. Utilisez ces guides amont pour les étapes côté Discord, puis revenez à la configuration de VerbalCoding :
|
|
6
|
+
|
|
7
|
+
- Guide de messagerie Discord de Hermes Agent : <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
|
|
8
|
+
- Vue d'ensemble officielle des bots Discord : <https://docs.discord.com/developers/bots/overview>
|
|
9
|
+
- Démarrage rapide officiel Discord : <https://docs.discord.com/developers/quick-start/getting-started>
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
./scripts/install.sh
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
L'installateur demande le jeton Discord, les utilisateurs autorisés, les noms de salons vocaux à rejoindre automatiquement, le salon/fil de transcription, le backend de harnais CLI, la langue vocale par défaut, les paramètres TTS et le comportement du mot de réveil. Il écrit `.env` avec le mode `0600` ; `.env` est ignoré par git. Il lie aussi la commande shell courte `vc`.
|
|
16
|
+
|
|
17
|
+
Si vous avez seulement besoin de la commande shell après une installation manuelle :
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm link
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Backends d'agents pris en charge
|
|
24
|
+
|
|
25
|
+
Définissez `AGENT_BACKEND` dans `.env`.
|
|
26
|
+
|
|
27
|
+
| Backend | Commande par défaut | Notes |
|
|
28
|
+
|---|---|---|
|
|
29
|
+
| `hermes` | `hermes chat -Q -q` | Par défaut. Préserve le comportement de reprise `.verbalcoding-session`. |
|
|
30
|
+
| `claude-code` / `claude` | `claude -p` | Remplacer avec `CLAUDE_COMMAND` ou `AGENT_COMMAND`. |
|
|
31
|
+
| `codex` | `codex exec` | Remplacer avec `CODEX_COMMAND` ou `AGENT_COMMAND`. |
|
|
32
|
+
| `gemini` | `gemini -p` | Remplacer avec `GEMINI_COMMAND` ou `AGENT_COMMAND`. |
|
|
33
|
+
| `opencode` | `opencode run` | Remplacer avec `OPENCODE_COMMAND` ou `AGENT_COMMAND`. |
|
|
34
|
+
| `openclaw` | `openclaw run` | Remplacer avec `OPENCLAW_COMMAND` ou `AGENT_COMMAND`. |
|
|
35
|
+
| `custom` | `AGENT_COMMAND` requis | Le prompt est ajouté comme dernier argument argv. |
|
|
36
|
+
|
|
37
|
+
Remplacements génériques :
|
|
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
|
+
## Contrat des adaptateurs d'agent
|
|
51
|
+
|
|
52
|
+
La passerelle vocale parle à chaque backend via un seul contrat d'adaptateur :
|
|
53
|
+
|
|
54
|
+
- `run({ text }, signal, plan)` renvoie le statut, le texte de réponse finale, le libellé du backend, le temps écoulé et des métadonnées de session facultatives.
|
|
55
|
+
- `ask(text, signal, plan)` est le raccourci de compatibilité qui renvoie seulement le texte de réponse finale.
|
|
56
|
+
- `capabilities` déclare si le backend prend en charge la reprise de session, la progression en streaming et l'annulation.
|
|
57
|
+
- Hermes est l'adaptateur de référence : reprise, streaming de progression détaillée, annulation et récupération de la réponse finale depuis les fichiers de session Hermes.
|
|
58
|
+
|
|
59
|
+
Les nouveaux backends doivent implémenter le même contrat et garder le comportement voix/STT/TTS hors de l'adaptateur.
|
|
60
|
+
|
|
61
|
+
## Exemple `.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
|
+
## Sélection de la voix TTS
|
|
91
|
+
|
|
92
|
+
Les préréglages de langue et la sélection de voix sont séparés :
|
|
93
|
+
|
|
94
|
+
- `vc language ko|en|auto` change la langue STT, la langue de progression et la voix par défaut pour cette langue.
|
|
95
|
+
- Les commandes vocales en direct comme “남자 한국어 목소리로 바꿔”, “여자 한국어 목소리로 바꿔”, `change voice to Korean female` et `switch speaker to English` ne changent que le locuteur/type de voix.
|
|
96
|
+
- `!voice-test <text>` joue un court échantillon avec le backend et la voix actuellement sélectionnés.
|
|
97
|
+
|
|
98
|
+
La sélection de voix est stockée par défaut dans `config/tts-voices.json`. Remplacez le chemin avec `TTS_VOICE_CONFIG`. La passerelle en cours d'exécution relit/applique la sélection de voix avant la synthèse, donc les commandes vocales prennent effet sans redémarrage complet.
|
|
99
|
+
|
|
100
|
+
Catalogue Edge par défaut :
|
|
101
|
+
|
|
102
|
+
| `TTS_VOICE_TYPE` | `TTS_VOICE` | Langue |
|
|
103
|
+
|---|---|---|
|
|
104
|
+
| `korean_male` | `ko-KR-InJoonNeural` | Coréen |
|
|
105
|
+
| `korean_female` | `ko-KR-SunHiNeural` | Coréen |
|
|
106
|
+
| `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` | Coréen |
|
|
107
|
+
| `english_male` | `en-US-GuyNeural` | Anglais |
|
|
108
|
+
| `english_female` | `en-US-AriaNeural` | Anglais |
|
|
109
|
+
|
|
110
|
+
Remplacement manuel persistant :
|
|
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
|
+
Pour OpenVoice, SpeechSwift ou Supertonic, conservez les paramètres de voix/référence propres au backend dans les sections ci-dessous ; le même fichier de catalogue de voix peut tout de même suivre le type de voix actif.
|
|
120
|
+
|
|
121
|
+
Options vocales propres au backend :
|
|
122
|
+
|
|
123
|
+
| Backend | Paramètres | Choix de voix |
|
|
124
|
+
|---|---|---|
|
|
125
|
+
| Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | Types intégrés ci-dessus, plus toute voix renvoyée par `edge-tts --list-voices` |
|
|
126
|
+
| Supertonic | `SUPERTONIC_VOICE`, `SUPERTONIC_LANGUAGE` | `M1`–`M5`, `F1`–`F5` ; langue `ko`, `en`, `es`, `pt`, `fr` |
|
|
127
|
+
| OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE`, `OPENVOICE_LANGUAGE` | WAV de référence autorisé fourni par l'utilisateur ; style par défaut `default` |
|
|
128
|
+
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER`, `SPEECHSWIFT_MODEL_ID` | Voix par échantillon de référence pour CosyVoice, ou IDs locuteur/modèle pris en charge par le backend |
|
|
129
|
+
|
|
130
|
+
## Segmentation des énonciations
|
|
131
|
+
|
|
132
|
+
`UTTERANCE_IDLE_MS` contrôle combien de temps la passerelle attend après un segment de parole avant de décider que l'utilisateur a terminé et de démarrer le STT. La valeur par défaut est `4500` ms afin de préserver les longues instructions parlées avec pauses naturelles. Les valeurs plus basses semblent plus rapides pour les commandes courtes mais peuvent couper une longue dictée ; les valeurs plus hautes sont plus sûres pour une parole réfléchie.
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
UTTERANCE_IDLE_MS="4500" # balanced default
|
|
136
|
+
UTTERANCE_IDLE_MS="6000" # safer for long dictation with pauses
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## Serveur MCP
|
|
140
|
+
|
|
141
|
+
VerbalCoding fournit un serveur MCP stdio afin que Hermes Agent ou tout client MCP puisse contrôler la passerelle via des outils au lieu de s'appuyer sur des skills ou des commandes shell libres.
|
|
142
|
+
|
|
143
|
+
Exemple de configuration 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
|
+
Outils MCP exposés :
|
|
155
|
+
|
|
156
|
+
| Outil | Objectif |
|
|
157
|
+
|---|---|
|
|
158
|
+
| `status` | Signaler l'état passerelle/config sans secrets |
|
|
159
|
+
| `doctor` | Exécuter le contrôle doctor expurgé |
|
|
160
|
+
| `set_auto_restart` | Activer/désactiver le redémarrage automatique du bot vocal au moment des commits |
|
|
161
|
+
| `set_language` | Mettre à jour ensemble les langues STT/progression/TTS |
|
|
162
|
+
| `start`, `stop`, `restart` | Contrôler la passerelle vocale Discord |
|
|
163
|
+
|
|
164
|
+
## TTS OpenVoice facultatif
|
|
165
|
+
|
|
166
|
+
Edge TTS reste la valeur par défaut et le fallback. Pour essayer le clonage vocal local avec 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
|
+
Définissez ensuite :
|
|
178
|
+
|
|
179
|
+
```bash
|
|
180
|
+
TTS_BACKEND="openvoice"
|
|
181
|
+
OPENVOICE_REF_AUDIO="./voice-samples/user-reference.wav"
|
|
182
|
+
OPENVOICE_PROGRESS="0"
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
Clonez uniquement des voix que vous possédez ou que vous avez l'autorisation d'utiliser. Si OpenVoice échoue ou expire, VerbalCoding revient à Edge TTS.
|
|
186
|
+
|
|
187
|
+
## TTS Supertonic facultatif
|
|
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
|
+
Définissez ensuite :
|
|
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
|
+
Si Supertonic est absent, échoue ou expire, VerbalCoding revient à Edge TTS.
|
|
207
|
+
|
|
208
|
+
## TTS SpeechSwift / CosyVoice facultatif
|
|
209
|
+
|
|
210
|
+
Sur Apple Silicon, `speech-swift` est un backend local de clonage vocal coréen avec CosyVoice/Qwen3-TTS natif MLX.
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
brew tap soniqo/speech https://github.com/soniqo/speech-swift
|
|
214
|
+
brew install speech
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Env recommandé :
|
|
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
|
+
Gardez Edge pour les prompts rapides de progression/backchannel.
|
|
232
|
+
|
|
233
|
+
## Notes d'exploitation
|
|
234
|
+
|
|
235
|
+
- Le bot a besoin de l'intent privilégié Discord Message Content activé pour les commandes texte.
|
|
236
|
+
- Le bot a besoin des permissions de connexion/parole dans le salon vocal.
|
|
237
|
+
- Pour Hermes Agent, configurez/authentifiez Hermes normalement (`hermes setup`, `hermes login`, etc.) sur votre profil par défaut.
|
|
238
|
+
- Pour Claude Code, Codex, Gemini, OpenCode, OpenClaw, installez et authentifiez ces CLI séparément.
|
|
239
|
+
- Si une CLI émet une sortie diff/code lors d'un timeout ou d'un échec de signal, la passerelle évite de la lire à voix haute et envoie plutôt le texte détaillé.
|
|
@@ -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
|
+
- Discord 公式クイックスタート: <https://docs.discord.com/developers/quick-start/getting-started>
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
./scripts/install.sh
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
インストーラーは、Discord トークン、許可ユーザー、自動参加する音声チャンネル名、文字起こし先チャンネル/スレッド、CLI ハーネスバックエンド、デフォルト音声言語、TTS 設定、ウェイクワード動作を尋ねます。モード `0600` で `.env` を書き込みます。`.env` は git で無視されます。また、短いシェルコマンド `vc` もリンクします。
|
|
16
|
+
|
|
17
|
+
手動インストール後にシェルコマンドだけが必要な場合:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
npm link
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## 対応エージェントバックエンド
|
|
24
|
+
|
|
25
|
+
`.env` で `AGENT_BACKEND` を設定します。
|
|
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` | プロンプトは最後の 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
|
+
音声ブリッジは、すべてのバックエンドと 1 つのアダプター契約を通じてやり取りします:
|
|
53
|
+
|
|
54
|
+
- `run({ text }, signal, plan)` はステータス、最終回答テキスト、バックエンドラベル、経過時間、任意のセッションメタデータを返します。
|
|
55
|
+
- `ask(text, signal, plan)` は互換性用のショートカットで、最終回答テキストだけを返します。
|
|
56
|
+
- `capabilities` は、バックエンドがセッション再開、ストリーミング進捗、キャンセルをサポートするかを宣言します。
|
|
57
|
+
- Hermes は参照アダプターです。再開、詳細進捗ストリーミング、キャンセル、Hermes セッションファイルからの最終回答復元に対応します。
|
|
58
|
+
|
|
59
|
+
新しいバックエンドは同じ契約を実装し、音声/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` で上書きできます。実行中のブリッジは合成前に音声選択を再読み込み/適用するため、音声コマンドは完全な再起動なしで反映されます。
|
|
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` は、音声セグメント後に、ブリッジがユーザーの発話完了を判断して STT を開始するまで待つ時間を制御します。デフォルトは `4500` ms で、自然な間を含む長めの音声指示を保つためです。値を小さくすると短いコマンドでは速く感じますが、長いディクテーションを分割することがあります。大きい値は、考えながら話す場合により安全です。
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
UTTERANCE_IDLE_MS="4500" # バランスのよいデフォルト
|
|
136
|
+
UTTERANCE_IDLE_MS="6000" # ポーズを含む長いディクテーションでより安全
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
## MCP サーバー
|
|
140
|
+
|
|
141
|
+
VerbalCoding には stdio MCP サーバーが付属しており、Hermes Agent または任意の MCP クライアントは、スキルや自由形式のシェルコマンドに頼らず、ツール経由でブリッジを制御できます。
|
|
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` | 秘密情報を出さずにブリッジ/設定状態を報告 |
|
|
159
|
+
| `doctor` | 秘密情報を伏せた doctor チェックを実行 |
|
|
160
|
+
| `set_auto_restart` | コミット時の音声ボット自動再起動を有効/無効化 |
|
|
161
|
+
| `set_language` | STT/進捗/TTS 言語をまとめて更新 |
|
|
162
|
+
| `start`, `stop`, `restart` | Discord 音声ブリッジを制御 |
|
|
163
|
+
|
|
164
|
+
## 任意の OpenVoice TTS
|
|
165
|
+
|
|
166
|
+
Edge TTS がデフォルトかつフォールバックです。OpenVoice V2 によるローカル音声クローンを試すには:
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
./scripts/setup_openvoice.sh
|
|
170
|
+
# OpenVoice docs から checkpoints_v2_0417.zip をダウンロードし、vendor/OpenVoice/checkpoints_v2/ の下に展開します
|
|
171
|
+
mkdir -p voice-samples
|
|
172
|
+
# 許可済み参照サンプルを voice-samples/user-reference.wav に置くか、
|
|
173
|
+
# Discord で !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
|
+
## 任意の Supertonic TTS
|
|
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
|
+
## 任意の SpeechSwift / CosyVoice TTS
|
|
209
|
+
|
|
210
|
+
Apple Silicon では、`speech-swift` は MLX ネイティブの CosyVoice/Qwen3-TTS を使った韓国語音声クローン用ローカルバックエンドです。
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
brew tap soniqo/speech https://github.com/soniqo/speech-swift
|
|
214
|
+
brew install speech
|
|
215
|
+
```
|
|
216
|
+
|
|
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 を維持してください。
|
|
232
|
+
|
|
233
|
+
## 運用メモ
|
|
234
|
+
|
|
235
|
+
- テキストコマンドには、Discord の特権 Message Content intent をボットで有効にする必要があります。
|
|
236
|
+
- ボットには音声チャンネルへの接続/発話権限が必要です。
|
|
237
|
+
- Hermes Agent では、デフォルトプロファイルで通常どおり Hermes を設定/認証してください(`hermes setup`、`hermes login` など)。
|
|
238
|
+
- Claude Code、Codex、Gemini、OpenCode、OpenClaw では、それぞれの CLI を別途インストールして認証してください。
|
|
239
|
+
- CLI がタイムアウトやシグナル失敗時に diff/code 出力を出した場合、ブリッジはそれを読み上げず、詳細テキストとして送信します。
|