verbalcoding 0.2.6 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/README.md +12 -22
  2. package/app-node/cli_install.test.mjs +15 -0
  3. package/docs/FRESH_INSTALL.md +8 -2
  4. package/docs/assets/figures/verbalcoding-flow.svg +45 -30
  5. package/docs/i18n/CONFIGURATION.es.md +239 -0
  6. package/docs/i18n/CONFIGURATION.fr.md +239 -0
  7. package/docs/i18n/CONFIGURATION.ja.md +239 -0
  8. package/docs/i18n/CONFIGURATION.ko.md +66 -74
  9. package/docs/i18n/CONFIGURATION.ru.md +239 -0
  10. package/docs/i18n/CONFIGURATION.zh.md +239 -0
  11. package/docs/i18n/FRESH_INSTALL.es.md +207 -0
  12. package/docs/i18n/FRESH_INSTALL.fr.md +207 -0
  13. package/docs/i18n/FRESH_INSTALL.ja.md +207 -0
  14. package/docs/i18n/FRESH_INSTALL.ko.md +60 -54
  15. package/docs/i18n/FRESH_INSTALL.ru.md +207 -0
  16. package/docs/i18n/FRESH_INSTALL.zh.md +207 -0
  17. package/docs/i18n/MULTI_INSTANCE.es.md +180 -0
  18. package/docs/i18n/MULTI_INSTANCE.fr.md +180 -0
  19. package/docs/i18n/MULTI_INSTANCE.ja.md +179 -0
  20. package/docs/i18n/MULTI_INSTANCE.ko.md +46 -46
  21. package/docs/i18n/MULTI_INSTANCE.ru.md +179 -0
  22. package/docs/i18n/MULTI_INSTANCE.zh.md +179 -0
  23. package/docs/i18n/README.es.md +83 -55
  24. package/docs/i18n/README.fr.md +85 -57
  25. package/docs/i18n/README.ja.md +83 -55
  26. package/docs/i18n/README.ko.md +47 -56
  27. package/docs/i18n/README.ru.md +86 -58
  28. package/docs/i18n/README.zh.md +83 -56
  29. package/docs/i18n/RELEASE.es.md +74 -0
  30. package/docs/i18n/RELEASE.fr.md +74 -0
  31. package/docs/i18n/RELEASE.ja.md +74 -0
  32. package/docs/i18n/RELEASE.ko.md +38 -36
  33. package/docs/i18n/RELEASE.ru.md +74 -0
  34. package/docs/i18n/RELEASE.zh.md +74 -0
  35. package/docs/i18n/USAGE.es.md +161 -0
  36. package/docs/i18n/USAGE.fr.md +161 -0
  37. package/docs/i18n/USAGE.ja.md +161 -0
  38. package/docs/i18n/USAGE.ko.md +61 -72
  39. package/docs/i18n/USAGE.ru.md +161 -0
  40. package/docs/i18n/USAGE.zh.md +161 -0
  41. package/package.json +1 -1
  42. package/scripts/bootstrap_prereqs.sh +15 -3
  43. package/scripts/cli.mjs +1 -1
  44. package/scripts/doctor.mjs +114 -8
@@ -1,45 +1,37 @@
1
1
  # VerbalCoding 사용 가이드
2
2
 
3
- 문서는 README 넣기에는 실제 운영 방법을 모아 사용 설명서입니다.
3
+ 페이지에는 README 너무 길게 만들던 운영 세부 정보가 담겨 있습니다.
4
4
 
5
5
  ## CLI 명령
6
6
 
7
7
  ```bash
8
- vc setup --yes # npm 설치 의존성 부트스트랩과 설정 마법사 실행
9
- vc start # 기본 Discord 음성 브릿지 시작
10
- vc status # STT 언어, 진행 언어, TTS 음성 상태 보기
11
- vc language en # 영어 STT + 영어 진행/TTS 음성
12
- vc language ko # 한국어 STT + 한국어 진행/TTS 음성
13
- vc language auto # Whisper 자동 언어 감지 + 진행/TTS 음성 프리셋
14
- vc restart auto status # 커밋 시 음성 봇 자동 재시작 설정 보기
15
- vc restart auto on # 커밋 음성 자동 재시작 켜기
16
- vc restart auto off # 자동 재시작 끄기; 기본값
17
- vc bot invite CLIENT_ID # 필요한 권한이 포함된 Discord 초대 URL 출력
18
- vc instance status # 인스턴스별 설정과 프로세스 상태 목록 보기
19
- vc instance setup NAME # instances/NAME.env 작성 Hermes 프로필 생성
20
- vc instance start NAME # ./run.sh instances/NAME.env를 백그라운드로 시작
21
- vc instance stop NAME # 백그라운드 인스턴스 중지 및 pid 파일 제거
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`를 수정합니다. 적용하려면 `vc start`, `./run.sh`, 또는 사용 중인 프로세스 매니저로 브릿지를 재시작하세요.
24
+ 언어 변경은 `.env`를 업데이트합니다. 적용하려면 `./run.sh` 또는 사용 중인 프로세스 관리자로 브리지를 다시 시작하세요.
27
25
 
28
26
  ## 실행 모드
29
27
 
30
- npm으로 설치한 기본 브릿지:
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
- 프로젝트별 인스턴스 env 실행:
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
- 봇은 설정된 음성 채널 이름 중 첫 번째로 자동 입장합니다. 기본값은 `일반,General,general`입니다.
42
+ 봇은 설정된 번째 채널 이름에 자동 참가하며 기본값은 `일반,General,general`입니다.
51
43
 
52
44
  ## Discord 명령
53
45
 
54
- 명령을 연결하기 전에 먼저 상위 문서대로 Discord 애플리케이션/봇을 설정하세요.
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
- 다음 `vc bot invite CLIENT_ID`를 사용하면 VerbalCoding에 필요한 텍스트/음성 권한이 포함된 초대 URL을 만들 수 있습니다.
51
+ 그런 다음 `vc bot invite CLIENT_ID`로 텍스트 음성 권한이 포함된 VerbalCoding 전용 초대 URL을 생성하세요.
60
52
 
61
- | 명령 | 용도 |
53
+ | 명령 | 목적 |
62
54
  |---|---|
63
- | `!ping` | 봇 연결 기본 확인 |
64
- | `!join` / `!leave` | 음성 채널 입장/퇴장 |
65
- | `!say <text>` | 텍스트를 바로 TTS로 읽기 |
66
- | `!voice-test <text>` | 현재 TTS 백엔드/목소리 테스트 |
67
- | `!voice-clone capture` | 다음 유효 발화를 OpenVoice 기준 샘플로 저장 |
68
- | `!voice-clone status` / `!voice-clone cancel` | 샘플 캡처 상태 확인/취소 |
69
- | `!ask <prompt>` | 음성과 같은 선택된 CLI 어댑터로 텍스트 요청 보내기 |
70
- | `!session status` | 현재 프로젝트/default 에이전트 세션 보기 |
71
- | `!session new <name> <workdir> [context] --voice <voice-channel>` | 프로젝트 단위 Hermes 세션 생성 |
72
- | `!session attach-voice [sessionName] --voice <voice-channel>` | 현재 텍스트 채널/스레드를 음성 채널에 연결 |
73
- | `!session list` | 설정된 프로젝트 세션 목록 보기 |
74
- | `!session reset` / `!reset-session` | 현재 프로젝트/default 세션 파일 초기화 |
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
- 음성으로도 “외부 모드”, “보수 모드”, “실내”, “기본 감도” 같은 감도 전환과 “잠깐”, “멈춰”, “그만” 같은 명확한 중단 표현을 처리합니다. “상세 진행 켜” / “상세 진행 꺼”처럼 말해서 verbose progress도 바꿀 있습니다.
71
+ “외부 모드”, “보수 모드”, “실내”, “기본 감도” 같은 음성 표현과 “잠깐”, “멈춰”, “그만” 같은 명확한 중지 문구는 브리지가 처리합니다. “상세 진행 켜” / “상세 진행 꺼”라고 말해 음성으로 자세한 진행을 전환할 수도 있습니다.
80
72
 
81
- ## 목소리 변경
73
+ ## 음성 변경
82
74
 
83
- `vc language ko|en|auto`는 STT 언어, 진행 언어, 기본 TTS 목소리를 함께 바꿉니다. 언어 전체가 아니라 말하는 사람/목소리만 바꾸고 싶다면 Discord 음성에서 이렇게 말하면 됩니다.
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
- 실행 중인 브릿지는 발화를 제어 명령으로 인식해 `config/tts-voices.json`을 갱신하고, 현재 프로세스의 TTS 설정도 바로 바꾼 뒤 “목소리를 Korean male로 바꿨어.” 같은 짧은 확인을 말합니다. 바꾼 직후에는 `!voice-test <text>`로 현재 백엔드와 목소리를 바로 들어볼 수 있습니다.
84
+ 실행 중인 브리지는 이를 음성 제어 명령으로 인식하고 `config/tts-voices.json`을 업데이트하며, 실행 프로세스의 유효 TTS env를 업데이트하고 “목소리를 Korean male로 바꿨어.” 같은 짧은 확인으로 응답합니다. 변경 직후 `!voice-test <text>`로 현재 백엔드와 음성을 들어보세요.
93
85
 
94
- 기본 Edge 목소리 타입:
86
+ 내장 Edge 음성 유형:
95
87
 
96
- | 목소리 타입 | Edge voice |
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
- 영구 수동 설정이 필요하면 `.env`에 `TTS_BACKEND=edge`, `TTS_VOICE_TYPE=<voice-type>`, 필요 `TTS_VOICE=<edge-voice>`를 설정하세요. 많은 커스텀 목소리 카탈로그는 `config/tts-voices.json`에서 관리할 수 있습니다.
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 voice |
111
- | Supertonic | `SUPERTONIC_VOICE` | `M1`–`M5`, `F1`–`F5`; `SUPERTONIC_LANGUAGE=ko|en|es|pt|fr` |
112
- | OpenVoice | `OPENVOICE_REF_AUDIO`, `OPENVOICE_STYLE` | 사용 허가가 있는 reference WAV와 `default` 같은 style |
113
- | SpeechSwift / CosyVoice | `SPEECHSWIFT_REF_AUDIO`, `SPEECHSWIFT_ENGINE`, `SPEECHSWIFT_SPEAKER` | CosyVoice reference WAV 또는 백엔드가 지원하는 speaker/model 값 |
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 로컬 clone 백엔드는 위 env 바꾼 `!voice-test <text>`로 바로 들어보세요. 현재 음성 명령 기반 전환은 기본 Edge-style voice type에 매핑되어 있고, 더 풍부한 백엔드 카탈로그는 `config/tts-voices.json`에 추가할 수 있습니다.
107
+ Supertonic 로컬 복제 백엔드에서는백엔드 env 변수와 `!voice-test <text>`를 사용해 변경 사항을 청음하세요. 음성 명령 전환은 현재 내장 Edge 스타일 음성 유형에 매핑됩니다. 더 풍부한 백엔드 카탈로그는 `config/tts-voices.json`에 추가할 수 있습니다.
116
108
 
117
- ## 긴 발화와 중간 멈춤
109
+ ## 긴 받아쓰기와 멈춤
118
110
 
119
- VerbalCoding은 말을 STT로 보내기 전에 idle window를 기다립니다. 기본값 `UTTERANCE_IDLE_MS=4500`은 일부러 조금 여유 있게 잡혀 있습니다. 긴 지시 중 자연스러운 멈춤을 문장 끝으로 오해해 앞부분만 에이전트에 보내고, 뒷부분을 processing 중 끼어들기로 처리하는 문제를 줄이기 위해서입니다.
111
+ VerbalCoding은 음성을 STT로 보내기 전에 유휴 구간을 기다립니다. 기본 `UTTERANCE_IDLE_MS=4500`은 일부러 약간 여유 있게 잡혀 있어, 긴 지시 중 자연스러운 멈춤 때문에 문장이 나뉘거나 에이전트 턴이 너무 일찍 시작되고 나머지가 처리 중 끼어들기로 취급되는 일을 방지합니다.
120
112
 
121
- 짧은 명령 반응을 더 빠르게 하고 싶다면 `.env`에서 낮추고, 긴 한국어 dictation이 여전히 잘리면 더 올리세요.
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
- 자세한 진행은 기본적으로 꺼져 있습니다. `.env`에 `AGENT_VERBOSE_PROGRESS=1`을 설정하거나 Discord에서 `!verbose on`, 또는 음성으로 “상세 진행 켜”라고 말해 있습니다.
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: ...` 줄을 내보내도록 요청하고, 가능하면 stdout/stderr 일반적인 도구 사용 흔적도 요약합니다. 비밀값처럼 보이는 필드는 숨기고, 진행 줄은 최종 음성 답변에서 제거합니다.
131
+ 이 모드는 선택된 CLI 하네스에 `VERBALCODING_PROGRESS: ...` 줄을 내보내도록 요청하고, 가능한 경우 스트리밍 stdout/stderr에서 일반적인 도구 표시자를 요약합니다. 비밀처럼 보이는 필드는 가려지고 진행 줄은 최종 음성 답변에서 제거됩니다.
142
132
 
143
133
  ## 지연 시간 지표
144
134
 
145
- VerbalCoding은 턴의 지연 시간 기록을 JSONL로 저장합니다. 기본 경로:
135
+ VerbalCoding은 턴별 지연 시간 기록을 JSONL로 작성합니다. 기본 경로:
146
136
 
147
137
  ```text
148
138
  ./.logs/latency.jsonl
149
139
  ```
150
140
 
151
- 각 기록에는 상태, 전체 시간, 음성 캡처 시간, 발화 idle 대기, STT 시간, 에이전트 시간, TTS 합성/재생 시간, 청크 수, 발화 길이, 답변 길이, 가능한 경우 오디오 레벨이 포함됩니다.
141
+ 각 기록에는 상태, 시간, 음성 캡처 시간, 발화 유휴 대기, STT 시간, 에이전트 시간, TTS 합성/재생 시간, 청크 수, 전사 길이, 답변 길이, 가능한 경우 오디오 레벨이 포함됩니다.
152
142
 
153
143
  Discord에서:
154
144
 
@@ -157,7 +147,7 @@ Discord에서:
157
147
  !metrics
158
148
  ```
159
149
 
160
- 요약은 최근 200개 기록 기준으로 count, average, p95, max, non-OK 상태를 보여줍니다.
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`는 비밀값을 출력하지 않고 필수 값이 설정됐는지만 확인합니다. 또한 `instances/*.env`에서 중복 토큰 지문과 충돌하는 런타임 경로를 검사합니다.
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verbalcoding",
3
- "version": "0.2.6",
3
+ "version": "0.2.8",
4
4
  "description": "Discord voice bridge for CLI coding agents.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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
- run_sudo apt-get install -y curl ca-certificates git python3 python3-venv python3-pip build-essential cmake pkg-config ffmpeg nodejs npm
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
- run_sudo dnf install -y curl ca-certificates git python3 python3-pip gcc gcc-c++ make cmake pkgconf-pkg-config ffmpeg nodejs npm
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
- run_sudo pacman -Sy --needed --noconfirm curl ca-certificates git python python-pip base-devel cmake pkgconf ffmpeg nodejs npm
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
  }