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
package/docs/i18n/USAGE.ko.md
CHANGED
|
@@ -1,45 +1,37 @@
|
|
|
1
1
|
# VerbalCoding 사용 가이드
|
|
2
2
|
|
|
3
|
-
이
|
|
3
|
+
이 페이지에는 README를 너무 길게 만들던 운영 세부 정보가 담겨 있습니다.
|
|
4
4
|
|
|
5
5
|
## CLI 명령
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
vc
|
|
9
|
-
vc
|
|
10
|
-
vc
|
|
11
|
-
vc language
|
|
12
|
-
vc
|
|
13
|
-
vc
|
|
14
|
-
vc restart auto
|
|
15
|
-
vc
|
|
16
|
-
vc
|
|
17
|
-
vc
|
|
18
|
-
vc instance
|
|
19
|
-
vc instance
|
|
20
|
-
vc
|
|
21
|
-
|
|
22
|
-
vc doctor # 비밀값을 숨긴 상태 점검 실행
|
|
23
|
-
npm run mcp # stdio MCP 서버 실행
|
|
8
|
+
vc status # STT 언어, 진행 언어, TTS 음성 표시
|
|
9
|
+
vc language en # 영어 STT + 영어 진행/TTS 음성
|
|
10
|
+
vc language ko # 한국어 STT + 한국어 진행/TTS 음성
|
|
11
|
+
vc language auto # Whisper 자동 감지 STT + 영어 진행/TTS 음성
|
|
12
|
+
vc restart auto status # 커밋 시점 음성 봇 자동 재시작 설정 표시
|
|
13
|
+
vc restart auto on # 커밋 시점 음성 봇 자동 재시작 활성화
|
|
14
|
+
vc restart auto off # 비활성화; 기본값
|
|
15
|
+
vc bot invite CLIENT_ID # 필요한 권한이 포함된 Discord 초대 URL 출력
|
|
16
|
+
vc instance status # 인스턴스별 브리지 설정 및 프로세스 상태 나열
|
|
17
|
+
vc instance setup NAME # instances/NAME.env 작성 및 ~/.hermes/profiles/NAME 생성
|
|
18
|
+
vc instance start NAME # ./run.sh instances/NAME.env를 분리 실행으로 시작
|
|
19
|
+
vc instance stop NAME # 분리 실행 중인 인스턴스를 중지하고 pid 파일 제거
|
|
20
|
+
vc doctor # 민감 정보가 제거된 doctor 점검 실행
|
|
21
|
+
npm run mcp # stdio MCP 서버 실행
|
|
24
22
|
```
|
|
25
23
|
|
|
26
|
-
언어 변경은 `.env`를
|
|
24
|
+
언어 변경은 `.env`를 업데이트합니다. 적용하려면 `./run.sh` 또는 사용 중인 프로세스 관리자로 브리지를 다시 시작하세요.
|
|
27
25
|
|
|
28
26
|
## 실행 모드
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
vc start
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
GitHub 클론에서 직접 실행:
|
|
28
|
+
단일 인스턴스 브리지:
|
|
37
29
|
|
|
38
30
|
```bash
|
|
39
31
|
./run.sh
|
|
40
32
|
```
|
|
41
33
|
|
|
42
|
-
|
|
34
|
+
로컬 override env를 사용하는 인스턴스별 브리지:
|
|
43
35
|
|
|
44
36
|
```bash
|
|
45
37
|
./run.sh instances/my-project.env
|
|
@@ -47,40 +39,40 @@ GitHub 클론에서 직접 실행:
|
|
|
47
39
|
VERBALCODING_INSTANCE_ENV=instances/my-project.env ./run.sh
|
|
48
40
|
```
|
|
49
41
|
|
|
50
|
-
봇은 설정된
|
|
42
|
+
봇은 설정된 첫 번째 채널 이름에 자동 참가하며 기본값은 `일반,General,general`입니다.
|
|
51
43
|
|
|
52
44
|
## Discord 명령
|
|
53
45
|
|
|
54
|
-
명령을 연결하기 전에
|
|
46
|
+
명령을 연결하기 전에 업스트림 가이드를 사용해 Discord 애플리케이션/봇을 설정하세요:
|
|
55
47
|
|
|
56
48
|
- Hermes Agent Discord 가이드: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
|
|
57
49
|
- Discord 공식 봇 문서: <https://docs.discord.com/developers/bots/overview>
|
|
58
50
|
|
|
59
|
-
|
|
51
|
+
그런 다음 `vc bot invite CLIENT_ID`로 텍스트 및 음성 권한이 포함된 VerbalCoding 전용 초대 URL을 생성하세요.
|
|
60
52
|
|
|
61
|
-
| 명령 |
|
|
53
|
+
| 명령 | 목적 |
|
|
62
54
|
|---|---|
|
|
63
|
-
| `!ping` | 봇
|
|
64
|
-
| `!join` / `!leave` | 음성 채널
|
|
65
|
-
| `!say <text>` | 텍스트를
|
|
66
|
-
| `!voice-test <text>` |
|
|
67
|
-
| `!voice-clone capture` | 다음 유효 발화를 OpenVoice
|
|
68
|
-
| `!voice-clone status` / `!voice-clone cancel` |
|
|
69
|
-
| `!ask <prompt>` | 음성과
|
|
70
|
-
| `!session status` | 현재
|
|
71
|
-
| `!session new <name> <workdir> [context] --voice <voice-channel>` | 프로젝트
|
|
72
|
-
| `!session attach-voice [sessionName] --voice <voice-channel>` |
|
|
73
|
-
| `!session list` | 설정된 프로젝트 세션
|
|
74
|
-
| `!session reset` / `!reset-session` | 현재
|
|
75
|
-
| `!verbose on/off` | 자세한 진행 업데이트
|
|
76
|
-
| `!latency` / `!metrics` | 최근 지연 시간 요약
|
|
55
|
+
| `!ping` | 기본 봇 점검 |
|
|
56
|
+
| `!join` / `!leave` | 음성 채널 참가 또는 나가기 |
|
|
57
|
+
| `!say <text>` | TTS로 텍스트를 직접 말하기 |
|
|
58
|
+
| `!voice-test <text>` | 활성 TTS 백엔드/음성 테스트 |
|
|
59
|
+
| `!voice-clone capture` | 다음 유효 발화를 OpenVoice 참조 샘플로 저장 |
|
|
60
|
+
| `!voice-clone status` / `!voice-clone cancel` | 캡처 상태 확인 또는 취소 |
|
|
61
|
+
| `!ask <prompt>` | 음성과 동일하게 선택된 하네스 어댑터로 텍스트 전송 |
|
|
62
|
+
| `!session status` | 현재 프로젝트/기본 어댑터 세션 표시 |
|
|
63
|
+
| `!session new <name> <workdir> [context] --voice <voice-channel>` | 프로젝트 범위 Hermes 세션 생성 |
|
|
64
|
+
| `!session attach-voice [sessionName] --voice <voice-channel>` | 텍스트 채널/스레드를 음성 채널에 연결 |
|
|
65
|
+
| `!session list` | 설정된 프로젝트 세션 나열 |
|
|
66
|
+
| `!session reset` / `!reset-session` | 현재 프로젝트/기본 어댑터 세션 파일 지우기 |
|
|
67
|
+
| `!verbose on/off` | 자세한 진행 업데이트 전환 |
|
|
68
|
+
| `!latency` / `!metrics` | 최근 지연 시간 요약 표시 |
|
|
77
69
|
| `!sensitivity normal/conservative` | 끼어들기 감도 전환 |
|
|
78
70
|
|
|
79
|
-
|
|
71
|
+
“외부 모드”, “보수 모드”, “실내”, “기본 감도” 같은 음성 표현과 “잠깐”, “멈춰”, “그만” 같은 명확한 중지 문구는 브리지가 처리합니다. “상세 진행 켜” / “상세 진행 꺼”라고 말해 음성으로 자세한 진행을 전환할 수도 있습니다.
|
|
80
72
|
|
|
81
|
-
##
|
|
73
|
+
## 음성 변경
|
|
82
74
|
|
|
83
|
-
`vc language ko|en|auto`는 STT 언어, 진행 언어, 기본 TTS
|
|
75
|
+
`vc language ko|en|auto`는 STT 언어, 진행 언어, 해당 기본 TTS 음성을 함께 변경합니다. 브리지가 실행 중일 때 화자/음성만 바꾸고 싶다면 Discord 음성으로 말하세요:
|
|
84
76
|
|
|
85
77
|
```text
|
|
86
78
|
남자 한국어 목소리로 바꿔
|
|
@@ -89,11 +81,11 @@ change voice to Korean female
|
|
|
89
81
|
switch speaker to English
|
|
90
82
|
```
|
|
91
83
|
|
|
92
|
-
실행 중인
|
|
84
|
+
실행 중인 브리지는 이를 음성 제어 명령으로 인식하고 `config/tts-voices.json`을 업데이트하며, 실행 중 프로세스의 유효 TTS env를 업데이트하고 “목소리를 Korean male로 바꿨어.” 같은 짧은 확인으로 응답합니다. 변경 직후 `!voice-test <text>`로 현재 백엔드와 음성을 들어보세요.
|
|
93
85
|
|
|
94
|
-
|
|
86
|
+
내장 Edge 음성 유형:
|
|
95
87
|
|
|
96
|
-
|
|
|
88
|
+
| 음성 유형 | Edge 음성 |
|
|
97
89
|
|---|---|
|
|
98
90
|
| `korean_male` | `ko-KR-InJoonNeural` |
|
|
99
91
|
| `korean_female` | `ko-KR-SunHiNeural` |
|
|
@@ -101,24 +93,24 @@ switch speaker to English
|
|
|
101
93
|
| `english_male` | `en-US-GuyNeural` |
|
|
102
94
|
| `english_female` | `en-US-AriaNeural` |
|
|
103
95
|
|
|
104
|
-
|
|
96
|
+
수동 영구 설정은 `.env`에서 `TTS_BACKEND=edge`, `TTS_VOICE_TYPE=<voice-type>`, 선택적으로 `TTS_VOICE=<edge-voice>`를 설정하거나, 커스텀 음성 카탈로그를 위해 `config/tts-voices.json`을 편집하세요.
|
|
105
97
|
|
|
106
|
-
백엔드별
|
|
98
|
+
백엔드별 음성 조정값:
|
|
107
99
|
|
|
108
|
-
| 백엔드 |
|
|
100
|
+
| 백엔드 | 음성 설정 | 일반 선택지 |
|
|
109
101
|
|---|---|---|
|
|
110
|
-
| Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | `korean_male`, `korean_female`, `korean_multilingual_male`, `english_male`, `english_female`; `edge-tts --list-voices`의 모든 Edge
|
|
111
|
-
| Supertonic | `SUPERTONIC_VOICE` | `M1`–`M5`, `F1`–`F5`; `SUPERTONIC_LANGUAGE=ko|en|es|pt|fr` |
|
|
112
|
-
| OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE` |
|
|
113
|
-
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER` | CosyVoice
|
|
102
|
+
| Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | `korean_male`, `korean_female`, `korean_multilingual_male`, `english_male`, `english_female`; `edge-tts --list-voices`의 모든 Edge 음성 |
|
|
103
|
+
| Supertonic | `SUPERTONIC_VOICE` | `M1`–`M5`, `F1`–`F5`; `SUPERTONIC_LANGUAGE=ko|en|es|pt|fr` 설정 |
|
|
104
|
+
| OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE` | 허용된 참조 WAV와 `default` 같은 스타일 |
|
|
105
|
+
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER` | CosyVoice용 참조 WAV 또는 백엔드가 지원하는 화자/모델 값 |
|
|
114
106
|
|
|
115
|
-
Supertonic
|
|
107
|
+
Supertonic 및 로컬 복제 백엔드에서는 위 백엔드 env 변수와 `!voice-test <text>`를 사용해 변경 사항을 청음하세요. 음성 명령 전환은 현재 내장 Edge 스타일 음성 유형에 매핑됩니다. 더 풍부한 백엔드 카탈로그는 `config/tts-voices.json`에 추가할 수 있습니다.
|
|
116
108
|
|
|
117
|
-
## 긴
|
|
109
|
+
## 긴 받아쓰기와 멈춤
|
|
118
110
|
|
|
119
|
-
VerbalCoding은
|
|
111
|
+
VerbalCoding은 음성을 STT로 보내기 전에 유휴 구간을 기다립니다. 기본 `UTTERANCE_IDLE_MS=4500`은 일부러 약간 여유 있게 잡혀 있어, 긴 지시 중 자연스러운 멈춤 때문에 문장이 나뉘거나 에이전트 턴이 너무 일찍 시작되고 나머지가 처리 중 끼어들기로 취급되는 일을 방지합니다.
|
|
120
112
|
|
|
121
|
-
짧은
|
|
113
|
+
짧은 명령을 더 빠르게 처리하고 싶다면 `.env`에서 낮추세요. 긴 한국어 받아쓰기가 여전히 나뉜다면 높이세요:
|
|
122
114
|
|
|
123
115
|
```bash
|
|
124
116
|
UTTERANCE_IDLE_MS="6000"
|
|
@@ -126,29 +118,27 @@ UTTERANCE_IDLE_MS="6000"
|
|
|
126
118
|
|
|
127
119
|
## 자세한 진행 모드
|
|
128
120
|
|
|
129
|
-
자세한 진행은 기본적으로 꺼져 있습니다.
|
|
130
|
-
|
|
131
|
-
켜져 있으면 긴 작업 중 이런 짧은 진행 줄을 텍스트로 보냅니다.
|
|
121
|
+
`AGENT_VERBOSE_PROGRESS=1`이 설정되지 않은 한 자세한 진행은 기본적으로 꺼져 있습니다. `!verbose on` 또는 “상세 진행 켜” 같은 음성 명령으로 활성화하세요. 다음과 같은 짧은 진행 줄을 내보낼 수 있습니다:
|
|
132
122
|
|
|
133
123
|
```text
|
|
134
|
-
🤖
|
|
124
|
+
🤖 Hermes Agent 호출 시작
|
|
135
125
|
📖 파일 읽기 app-node/main.mjs
|
|
136
126
|
🔎 웹 검색 실행
|
|
137
127
|
⌨️ 터미널 명령 실행
|
|
138
|
-
🤖
|
|
128
|
+
🤖 Hermes Agent 응답 수신
|
|
139
129
|
```
|
|
140
130
|
|
|
141
|
-
이 모드는 선택된 CLI 하네스에 `VERBALCODING_PROGRESS: ...` 줄을 내보내도록 요청하고,
|
|
131
|
+
이 모드는 선택된 CLI 하네스에 `VERBALCODING_PROGRESS: ...` 줄을 내보내도록 요청하고, 가능한 경우 스트리밍 stdout/stderr에서 일반적인 도구 표시자를 요약합니다. 비밀처럼 보이는 필드는 가려지고 진행 줄은 최종 음성 답변에서 제거됩니다.
|
|
142
132
|
|
|
143
133
|
## 지연 시간 지표
|
|
144
134
|
|
|
145
|
-
VerbalCoding은
|
|
135
|
+
VerbalCoding은 턴별 지연 시간 기록을 JSONL로 작성합니다. 기본 경로:
|
|
146
136
|
|
|
147
137
|
```text
|
|
148
138
|
./.logs/latency.jsonl
|
|
149
139
|
```
|
|
150
140
|
|
|
151
|
-
각 기록에는 상태,
|
|
141
|
+
각 기록에는 상태, 총 시간, 음성 캡처 시간, 발화 유휴 대기, STT 시간, 에이전트 시간, TTS 합성/재생 시간, 청크 수, 전사 길이, 답변 길이, 가능한 경우 오디오 레벨이 포함됩니다.
|
|
152
142
|
|
|
153
143
|
Discord에서:
|
|
154
144
|
|
|
@@ -157,7 +147,7 @@ Discord에서:
|
|
|
157
147
|
!metrics
|
|
158
148
|
```
|
|
159
149
|
|
|
160
|
-
요약은
|
|
150
|
+
요약은 최신 200개 기록을 사용합니다: 개수, 평균, p95, 최대값, OK가 아닌 상태.
|
|
161
151
|
|
|
162
152
|
## 테스트
|
|
163
153
|
|
|
@@ -165,8 +155,7 @@ Discord에서:
|
|
|
165
155
|
node --check app-node/main.mjs
|
|
166
156
|
npm test
|
|
167
157
|
bash -n run.sh scripts/install.sh
|
|
168
|
-
npm pack --dry-run
|
|
169
158
|
vc doctor
|
|
170
159
|
```
|
|
171
160
|
|
|
172
|
-
`vc doctor`는
|
|
161
|
+
`vc doctor`는 의도적으로 비밀 정보를 가리고 필수 값이 설정되었는지만 보고합니다. 또한 중복 토큰 지문과 충돌하는 런타임 경로가 있는지 `instances/*.env`를 확인합니다.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# Руководство по использованию VerbalCoding
|
|
2
|
+
|
|
3
|
+
Эта страница содержит эксплуатационные подробности, которые раньше делали README слишком длинным.
|
|
4
|
+
|
|
5
|
+
## CLI-команды
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
vc status # show STT language, progress language, and TTS voice
|
|
9
|
+
vc language en # English STT + English progress/TTS voice
|
|
10
|
+
vc language ko # Korean STT + Korean progress/TTS voice
|
|
11
|
+
vc language auto # Whisper auto-detect STT + English progress/TTS voice
|
|
12
|
+
vc restart auto status # show commit-time voice-bot auto-restart setting
|
|
13
|
+
vc restart auto on # enable commit-time voice-bot auto-restart
|
|
14
|
+
vc restart auto off # disable it; this is the default
|
|
15
|
+
vc bot invite CLIENT_ID # print a Discord invite URL with required permissions
|
|
16
|
+
vc instance status # list per-instance bridge configs and process status
|
|
17
|
+
vc instance setup NAME # write instances/NAME.env and create ~/.hermes/profiles/NAME
|
|
18
|
+
vc instance start NAME # start ./run.sh instances/NAME.env detached
|
|
19
|
+
vc instance stop NAME # stop a detached instance and remove its pid file
|
|
20
|
+
vc doctor # run the redacted doctor check
|
|
21
|
+
npm run mcp # run the stdio MCP server
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
Изменения языка обновляют `.env`; перезапустите bridge через `./run.sh` или ваш менеджер процессов, чтобы они вступили в силу.
|
|
25
|
+
|
|
26
|
+
## Режимы запуска
|
|
27
|
+
|
|
28
|
+
Bridge с одним экземпляром:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
./run.sh
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Bridge для отдельного экземпляра с локальным override env:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
./run.sh instances/my-project.env
|
|
38
|
+
# or
|
|
39
|
+
VERBALCODING_INSTANCE_ENV=instances/my-project.env ./run.sh
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Бот автоматически присоединяется к первому настроенному имени канала, по умолчанию `일반,General,general`.
|
|
43
|
+
|
|
44
|
+
## Команды Discord
|
|
45
|
+
|
|
46
|
+
Перед подключением команд настройте приложение/бота Discord с помощью исходных руководств:
|
|
47
|
+
|
|
48
|
+
- Руководство Hermes Agent по Discord: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
|
|
49
|
+
- Официальная документация Discord по ботам: <https://docs.discord.com/developers/bots/overview>
|
|
50
|
+
|
|
51
|
+
Затем используйте `vc bot invite CLIENT_ID`, чтобы сгенерировать URL приглашения VerbalCoding с текстовыми и голосовыми разрешениями.
|
|
52
|
+
|
|
53
|
+
| Команда | Назначение |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `!ping` | Базовая проверка бота |
|
|
56
|
+
| `!join` / `!leave` | Войти в голосовой канал или выйти из него |
|
|
57
|
+
| `!say <text>` | Произнести текст напрямую через TTS |
|
|
58
|
+
| `!voice-test <text>` | Проверить активный TTS-бэкенд/голос |
|
|
59
|
+
| `!voice-clone capture` | Сохранить следующую допустимую реплику как референсный образец OpenVoice |
|
|
60
|
+
| `!voice-clone status` / `!voice-clone cancel` | Проверить или отменить запись |
|
|
61
|
+
| `!ask <prompt>` | Отправить текст через тот же выбранный адаптер харнеса, что и голос |
|
|
62
|
+
| `!session status` | Показать текущую проектную/стандартную сессию адаптера |
|
|
63
|
+
| `!session new <name> <workdir> [context] --voice <voice-channel>` | Создать сессию Hermes в области проекта |
|
|
64
|
+
| `!session attach-voice [sessionName] --voice <voice-channel>` | Привязать текстовый канал/тред к голосовому каналу |
|
|
65
|
+
| `!session list` | Показать настроенные проектные сессии |
|
|
66
|
+
| `!session reset` / `!reset-session` | Очистить файл текущей проектной/стандартной сессии адаптера |
|
|
67
|
+
| `!verbose on/off` | Включить или выключить подробные обновления прогресса |
|
|
68
|
+
| `!latency` / `!metrics` | Показать сводку недавней задержки |
|
|
69
|
+
| `!sensitivity normal/conservative` | Переключить чувствительность перебивания |
|
|
70
|
+
|
|
71
|
+
Голосовые эквиваленты вроде “외부 모드”, “보수 모드”, “실내”, “기본 감도” и ясные стоп-фразы вроде “잠깐”, “멈춰”, “그만” обрабатываются bridge. Также можно сказать “상세 진행 켜” / “상세 진행 꺼”, чтобы переключить подробный прогресс голосом.
|
|
72
|
+
|
|
73
|
+
## Изменение голоса
|
|
74
|
+
|
|
75
|
+
`vc language ko|en|auto` одновременно меняет язык STT, язык прогресса и соответствующий голос TTS по умолчанию. Если нужно изменить только диктора/голос во время работы bridge, скажите это голосом в Discord:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
남자 한국어 목소리로 바꿔
|
|
79
|
+
여자 한국어 목소리로 바꿔
|
|
80
|
+
change voice to Korean female
|
|
81
|
+
switch speaker to English
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Работающий bridge распознаёт это как команды управления голосом, обновляет `config/tts-voices.json`, обновляет эффективное TTS-окружение для текущего процесса и отвечает коротким подтверждением вроде “목소리를 Korean male로 바꿨어.” Используйте `!voice-test <text>` сразу после изменения, чтобы услышать текущий бэкенд и голос.
|
|
85
|
+
|
|
86
|
+
Встроенные типы голосов Edge:
|
|
87
|
+
|
|
88
|
+
| Тип голоса | Голос Edge |
|
|
89
|
+
|---|---|
|
|
90
|
+
| `korean_male` | `ko-KR-InJoonNeural` |
|
|
91
|
+
| `korean_female` | `ko-KR-SunHiNeural` |
|
|
92
|
+
| `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` |
|
|
93
|
+
| `english_male` | `en-US-GuyNeural` |
|
|
94
|
+
| `english_female` | `en-US-AriaNeural` |
|
|
95
|
+
|
|
96
|
+
Для постоянной ручной конфигурации задайте `TTS_BACKEND=edge`, `TTS_VOICE_TYPE=<voice-type>` и, при необходимости, `TTS_VOICE=<edge-voice>` в `.env` либо отредактируйте `config/tts-voices.json` для пользовательских каталогов голосов.
|
|
97
|
+
|
|
98
|
+
Параметры голоса для конкретных бэкендов:
|
|
99
|
+
|
|
100
|
+
| Бэкенд | Настройка голоса | Распространённые варианты |
|
|
101
|
+
|---|---|---|
|
|
102
|
+
| Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | `korean_male`, `korean_female`, `korean_multilingual_male`, `english_male`, `english_female`; любой голос Edge из `edge-tts --list-voices` |
|
|
103
|
+
| Supertonic | `SUPERTONIC_VOICE` | `M1`–`M5`, `F1`–`F5`; задайте `SUPERTONIC_LANGUAGE=ko|en|es|pt|fr` |
|
|
104
|
+
| OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE` | разрешённый референсный WAV плюс стиль, например `default` |
|
|
105
|
+
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER` | референсный WAV для CosyVoice или поддерживаемые бэкендом значения диктора/модели |
|
|
106
|
+
|
|
107
|
+
Для Supertonic и локальных бэкендов клонирования используйте переменные окружения бэкенда выше плюс `!voice-test <text>`, чтобы прослушать изменения. Переключение голосовой командой сейчас сопоставляет встроенные типы голосов в стиле Edge; более богатые каталоги бэкендов можно добавить в `config/tts-voices.json`.
|
|
108
|
+
|
|
109
|
+
## Длинная диктовка и паузы
|
|
110
|
+
|
|
111
|
+
VerbalCoding ждёт окно бездействия перед отправкой речи в STT. Значение по умолчанию `UTTERANCE_IDLE_MS=4500` намеренно немного терпеливое, чтобы естественная пауза в длинной инструкции не разделяла предложение, не запускала ход агента слишком рано и не воспринимала остаток как прерывание во время обработки.
|
|
112
|
+
|
|
113
|
+
Если вы предпочитаете более быстрые короткие команды, уменьшите значение в `.env`; если длинная корейская диктовка всё ещё разбивается, увеличьте его:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
UTTERANCE_IDLE_MS="6000"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## Режим подробного прогресса
|
|
120
|
+
|
|
121
|
+
Подробный прогресс по умолчанию выключен, если не задано `AGENT_VERBOSE_PROGRESS=1`. Включите его через `!verbose on` или голосовой командой вроде “상세 진행 켜”. Он может выводить короткие строки прогресса, например:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
🤖 Hermes Agent 호출 시작
|
|
125
|
+
📖 파일 읽기 app-node/main.mjs
|
|
126
|
+
🔎 웹 검색 실행
|
|
127
|
+
⌨️ 터미널 명령 실행
|
|
128
|
+
🤖 Hermes Agent 응답 수신
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Этот режим просит выбранный CLI-харнес выводить строки `VERBALCODING_PROGRESS: ...` и, когда доступно, суммирует распространённые маркеры инструментов из потокового stdout/stderr. Поля, похожие на секреты, редактируются, а строки прогресса удаляются из финального озвучиваемого ответа.
|
|
132
|
+
|
|
133
|
+
## Метрики задержки
|
|
134
|
+
|
|
135
|
+
VerbalCoding записывает записи задержки для каждого хода в формате JSONL. Путь по умолчанию:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
./.logs/latency.jsonl
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Каждая запись включает статус, общее время, время захвата голоса, ожидание бездействия реплики, время STT, время агента, время синтеза/воспроизведения TTS, количество фрагментов, длину расшифровки, длину ответа и уровни аудио, когда они доступны.
|
|
142
|
+
|
|
143
|
+
В Discord:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
!latency
|
|
147
|
+
!metrics
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Сводка использует последние 200 записей: количество, среднее, p95, максимум и статусы не-OK.
|
|
151
|
+
|
|
152
|
+
## Тестирование
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
node --check app-node/main.mjs
|
|
156
|
+
npm test
|
|
157
|
+
bash -n run.sh scripts/install.sh
|
|
158
|
+
vc doctor
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`vc doctor` намеренно редактирует секреты и сообщает только, настроены ли необходимые значения. Он также проверяет `instances/*.env` на повторяющиеся отпечатки токенов и конфликтующие runtime-пути.
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
# VerbalCoding 使用指南
|
|
2
|
+
|
|
3
|
+
本页面保存曾经让 README 过长的运维细节。
|
|
4
|
+
|
|
5
|
+
## CLI 命令
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
vc status # 显示 STT 语言、进度语言和 TTS 声音
|
|
9
|
+
vc language en # 英语 STT + 英语进度/TTS 声音
|
|
10
|
+
vc language ko # 韩语 STT + 韩语进度/TTS 声音
|
|
11
|
+
vc language auto # Whisper 自动检测 STT + 英语进度/TTS 声音
|
|
12
|
+
vc restart auto status # 显示提交时语音机器人自动重启设置
|
|
13
|
+
vc restart auto on # 启用提交时语音机器人自动重启
|
|
14
|
+
vc restart auto off # 禁用它;这是默认值
|
|
15
|
+
vc bot invite CLIENT_ID # 打印带所需权限的 Discord 邀请 URL
|
|
16
|
+
vc instance status # 列出每实例桥接配置和进程状态
|
|
17
|
+
vc instance setup NAME # 写入 instances/NAME.env 并创建 ~/.hermes/profiles/NAME
|
|
18
|
+
vc instance start NAME # 分离启动 ./run.sh instances/NAME.env
|
|
19
|
+
vc instance stop NAME # 停止分离的实例并移除其 pid 文件
|
|
20
|
+
vc doctor # 运行脱敏 doctor 检查
|
|
21
|
+
npm run mcp # 运行 stdio MCP 服务器
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
语言更改会更新 `.env`;请使用 `./run.sh` 或你的进程管理器重启桥接,让更改生效。
|
|
25
|
+
|
|
26
|
+
## 运行模式
|
|
27
|
+
|
|
28
|
+
单实例桥接:
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
./run.sh
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
使用本地覆盖 env 的每实例桥接:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
./run.sh instances/my-project.env
|
|
38
|
+
# 或
|
|
39
|
+
VERBALCODING_INSTANCE_ENV=instances/my-project.env ./run.sh
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
机器人会自动加入第一个已配置的频道名称,默认是 `일반,General,general`。
|
|
43
|
+
|
|
44
|
+
## Discord 命令
|
|
45
|
+
|
|
46
|
+
在接线命令之前,请使用上游指南设置 Discord 应用/机器人:
|
|
47
|
+
|
|
48
|
+
- Hermes Agent Discord 指南:<https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
|
|
49
|
+
- Discord 官方机器人文档:<https://docs.discord.com/developers/bots/overview>
|
|
50
|
+
|
|
51
|
+
然后使用 `vc bot invite CLIENT_ID` 生成带文本和语音权限的 VerbalCoding 专用邀请 URL。
|
|
52
|
+
|
|
53
|
+
| 命令 | 用途 |
|
|
54
|
+
|---|---|
|
|
55
|
+
| `!ping` | 基本机器人检查 |
|
|
56
|
+
| `!join` / `!leave` | 加入或离开语音 |
|
|
57
|
+
| `!say <text>` | 直接通过 TTS 朗读文本 |
|
|
58
|
+
| `!voice-test <text>` | 测试当前 TTS 后端/声音 |
|
|
59
|
+
| `!voice-clone capture` | 将下一个有效发言保存为 OpenVoice 参考样本 |
|
|
60
|
+
| `!voice-clone status` / `!voice-clone cancel` | 查看或取消采集 |
|
|
61
|
+
| `!ask <prompt>` | 通过与语音相同的已选择驱动适配器发送文本 |
|
|
62
|
+
| `!session status` | 显示当前项目/默认适配器会话 |
|
|
63
|
+
| `!session new <name> <workdir> [context] --voice <voice-channel>` | 创建项目范围的 Hermes 会话 |
|
|
64
|
+
| `!session attach-voice [sessionName] --voice <voice-channel>` | 将文本频道/thread 绑定到语音频道 |
|
|
65
|
+
| `!session list` | 列出已配置的项目会话 |
|
|
66
|
+
| `!session reset` / `!reset-session` | 清除当前项目/默认适配器会话文件 |
|
|
67
|
+
| `!verbose on/off` | 切换详细进度更新 |
|
|
68
|
+
| `!latency` / `!metrics` | 显示最近延迟摘要 |
|
|
69
|
+
| `!sensitivity normal/conservative` | 切换插话灵敏度 |
|
|
70
|
+
|
|
71
|
+
桥接会处理诸如“외부 모드”、“보수 모드”、“실내”、“기본 감도”等语音等价命令,以及“잠깐”、“멈춰”、“그만”等明确停止短语。你也可以说“상세 진행 켜” / “상세 진행 꺼”来通过语音切换详细进度。
|
|
72
|
+
|
|
73
|
+
## 更改声音
|
|
74
|
+
|
|
75
|
+
`vc language ko|en|auto` 会同时更改 STT 语言、进度语言和匹配的默认 TTS 声音。如果只想在桥接运行时更换说话人/声音,请在 Discord 语音中说:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
남자 한국어 목소리로 바꿔
|
|
79
|
+
여자 한국어 목소리로 바꿔
|
|
80
|
+
change voice to Korean female
|
|
81
|
+
switch speaker to English
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
实时桥接会将这些识别为语音控制命令,更新 `config/tts-voices.json`,更新运行进程的有效 TTS env,并用类似“목소리를 Korean male로 바꿨어.”的简短确认作答。更改后立即使用 `!voice-test <text>` 来听当前后端和声音。
|
|
85
|
+
|
|
86
|
+
内置 Edge 声音类型:
|
|
87
|
+
|
|
88
|
+
| 声音类型 | Edge 声音 |
|
|
89
|
+
|---|---|
|
|
90
|
+
| `korean_male` | `ko-KR-InJoonNeural` |
|
|
91
|
+
| `korean_female` | `ko-KR-SunHiNeural` |
|
|
92
|
+
| `korean_multilingual_male` | `ko-KR-HyunsuMultilingualNeural` |
|
|
93
|
+
| `english_male` | `en-US-GuyNeural` |
|
|
94
|
+
| `english_female` | `en-US-AriaNeural` |
|
|
95
|
+
|
|
96
|
+
对于持久手动配置,请在 `.env` 中设置 `TTS_BACKEND=edge`、`TTS_VOICE_TYPE=<voice-type>`,并可选设置 `TTS_VOICE=<edge-voice>`;也可以编辑 `config/tts-voices.json` 以使用自定义声音目录。
|
|
97
|
+
|
|
98
|
+
后端专用声音旋钮:
|
|
99
|
+
|
|
100
|
+
| 后端 | 声音设置 | 常见选择 |
|
|
101
|
+
|---|---|---|
|
|
102
|
+
| Edge | `TTS_VOICE_TYPE`, `TTS_VOICE` | `korean_male`, `korean_female`, `korean_multilingual_male`, `english_male`, `english_female`;来自 `edge-tts --list-voices` 的任何 Edge 声音 |
|
|
103
|
+
| Supertonic | `SUPERTONIC_VOICE` | `M1`–`M5`, `F1`–`F5`;设置 `SUPERTONIC_LANGUAGE=ko|en|es|pt|fr` |
|
|
104
|
+
| OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE` | 获准使用的参考 WAV,以及如 `default` 的风格 |
|
|
105
|
+
| SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER` | CosyVoice 的参考 WAV,或后端支持的说话人/模型值 |
|
|
106
|
+
|
|
107
|
+
对于 Supertonic 和本地克隆后端,请使用上面的后端 env vars 加 `!voice-test <text>` 来试听更改。语音命令切换目前映射到内置 Edge 风格声音类型;更丰富的后端目录可以添加到 `config/tts-voices.json`。
|
|
108
|
+
|
|
109
|
+
## 长听写和停顿
|
|
110
|
+
|
|
111
|
+
VerbalCoding 会等待一个空闲窗口后再把语音发送给 STT。默认 `UTTERANCE_IDLE_MS=4500` 有意稍微耐心一些,这样长指令中的自然停顿不会拆分句子、过早启动代理轮次,并把剩余语音当作处理期间的打断。
|
|
112
|
+
|
|
113
|
+
如果你偏好更快的短命令,请在 `.env` 中降低它;如果长韩语听写仍被拆分,请提高它:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
UTTERANCE_IDLE_MS="6000"
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
## 详细进度模式
|
|
120
|
+
|
|
121
|
+
除非设置了 `AGENT_VERBOSE_PROGRESS=1`,详细进度默认关闭。可用 `!verbose on` 或“상세 진행 켜”等语音命令启用。它可以输出如下简短进度行:
|
|
122
|
+
|
|
123
|
+
```text
|
|
124
|
+
🤖 Hermes Agent 호출 시작
|
|
125
|
+
📖 파일 읽기 app-node/main.mjs
|
|
126
|
+
🔎 웹 검색 실행
|
|
127
|
+
⌨️ 터미널 명령 실행
|
|
128
|
+
🤖 Hermes Agent 응답 수신
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
该模式会要求所选 CLI 驱动输出 `VERBALCODING_PROGRESS: ...` 行,并在可用时汇总流式 stdout/stderr 中的常见工具标记。看起来像密钥的字段会被脱敏,进度行会从最终朗读答案中移除。
|
|
132
|
+
|
|
133
|
+
## 延迟指标
|
|
134
|
+
|
|
135
|
+
VerbalCoding 会按轮次将延迟记录写为 JSONL。默认路径:
|
|
136
|
+
|
|
137
|
+
```text
|
|
138
|
+
./.logs/latency.jsonl
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
每条记录包含状态、总耗时、语音采集时间、发言空闲等待、STT 时间、代理时间、TTS 合成/播放时间、分块数量、转写长度、答案长度,以及可用时的音频电平。
|
|
142
|
+
|
|
143
|
+
在 Discord 中:
|
|
144
|
+
|
|
145
|
+
```text
|
|
146
|
+
!latency
|
|
147
|
+
!metrics
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
摘要使用最新 200 条记录:数量、平均值、p95、最大值和非 OK 状态。
|
|
151
|
+
|
|
152
|
+
## 测试
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
node --check app-node/main.mjs
|
|
156
|
+
npm test
|
|
157
|
+
bash -n run.sh scripts/install.sh
|
|
158
|
+
vc doctor
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`vc doctor` 会有意脱敏密钥,并只报告必需值是否已配置。它还会检查 `instances/*.env` 中是否存在重复令牌指纹和冲突的运行时路径。
|
package/package.json
CHANGED
|
@@ -79,13 +79,25 @@ install_system_linux_packages() {
|
|
|
79
79
|
if has_cmd apt-get; then
|
|
80
80
|
log 'Installing Linux packages with apt-get'
|
|
81
81
|
run_sudo apt-get update
|
|
82
|
-
|
|
82
|
+
local packages=(curl ca-certificates git python3 python3-venv python3-pip build-essential cmake pkg-config ffmpeg)
|
|
83
|
+
# npm installs often run under NodeSource Node.js, whose `nodejs` package conflicts
|
|
84
|
+
# with Ubuntu's separate `npm` package. Do not request nodejs/npm again when the
|
|
85
|
+
# current npm-based installer is already running with working node and npm.
|
|
86
|
+
has_cmd node || packages+=(nodejs)
|
|
87
|
+
has_cmd npm || packages+=(npm)
|
|
88
|
+
run_sudo apt-get install -y "${packages[@]}"
|
|
83
89
|
elif has_cmd dnf; then
|
|
84
90
|
log 'Installing Linux packages with dnf'
|
|
85
|
-
|
|
91
|
+
local packages=(curl ca-certificates git python3 python3-pip gcc gcc-c++ make cmake pkgconf-pkg-config ffmpeg)
|
|
92
|
+
has_cmd node || packages+=(nodejs)
|
|
93
|
+
has_cmd npm || packages+=(npm)
|
|
94
|
+
run_sudo dnf install -y "${packages[@]}"
|
|
86
95
|
elif has_cmd pacman; then
|
|
87
96
|
log 'Installing Linux packages with pacman'
|
|
88
|
-
|
|
97
|
+
local packages=(curl ca-certificates git python python-pip base-devel cmake pkgconf ffmpeg)
|
|
98
|
+
has_cmd node || packages+=(nodejs)
|
|
99
|
+
has_cmd npm || packages+=(npm)
|
|
100
|
+
run_sudo pacman -Sy --needed --noconfirm "${packages[@]}"
|
|
89
101
|
else
|
|
90
102
|
warn 'No supported Linux package manager found. Install node/npm, ffmpeg, python3, git, cmake, and a C++ toolchain manually.'
|
|
91
103
|
return 1
|
package/scripts/cli.mjs
CHANGED
|
@@ -292,7 +292,7 @@ async function main(argv = process.argv.slice(2)) {
|
|
|
292
292
|
}
|
|
293
293
|
if (command === 'doctor') {
|
|
294
294
|
const { spawnSync } = await import('node:child_process');
|
|
295
|
-
const result = spawnSync(process.execPath, [path.join(ROOT, 'scripts', 'doctor.mjs')], { stdio: 'inherit', cwd: ROOT });
|
|
295
|
+
const result = spawnSync(process.execPath, [path.join(ROOT, 'scripts', 'doctor.mjs'), ...argv.slice(1)], { stdio: 'inherit', cwd: ROOT });
|
|
296
296
|
process.exitCode = result.status ?? 1;
|
|
297
297
|
return;
|
|
298
298
|
}
|