verbalcoding 0.2.5 → 0.2.7
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 +5 -0
- package/app-node/cli_install.test.mjs +2 -1
- package/docs/i18n/CONFIGURATION.es.md +150 -0
- package/docs/i18n/CONFIGURATION.fr.md +150 -0
- package/docs/i18n/CONFIGURATION.ja.md +150 -0
- package/docs/i18n/CONFIGURATION.ko.md +49 -146
- package/docs/i18n/CONFIGURATION.ru.md +150 -0
- package/docs/i18n/CONFIGURATION.zh.md +150 -0
- package/docs/i18n/FRESH_INSTALL.es.md +124 -0
- package/docs/i18n/FRESH_INSTALL.fr.md +124 -0
- package/docs/i18n/FRESH_INSTALL.ja.md +124 -0
- package/docs/i18n/FRESH_INSTALL.ko.md +37 -114
- package/docs/i18n/FRESH_INSTALL.ru.md +124 -0
- package/docs/i18n/FRESH_INSTALL.zh.md +124 -0
- package/docs/i18n/MULTI_INSTANCE.es.md +121 -0
- package/docs/i18n/MULTI_INSTANCE.fr.md +121 -0
- package/docs/i18n/MULTI_INSTANCE.ja.md +121 -0
- package/docs/i18n/MULTI_INSTANCE.ko.md +28 -86
- package/docs/i18n/MULTI_INSTANCE.ru.md +121 -0
- package/docs/i18n/MULTI_INSTANCE.zh.md +121 -0
- package/docs/i18n/README.es.md +50 -86
- package/docs/i18n/README.fr.md +50 -86
- package/docs/i18n/README.ja.md +50 -86
- package/docs/i18n/README.ko.md +41 -113
- package/docs/i18n/README.ru.md +50 -86
- package/docs/i18n/README.zh.md +50 -86
- package/docs/i18n/RELEASE.es.md +58 -0
- package/docs/i18n/RELEASE.fr.md +58 -0
- package/docs/i18n/RELEASE.ja.md +58 -0
- package/docs/i18n/RELEASE.ko.md +36 -50
- package/docs/i18n/RELEASE.ru.md +58 -0
- package/docs/i18n/RELEASE.zh.md +58 -0
- package/docs/i18n/USAGE.es.md +134 -0
- package/docs/i18n/USAGE.fr.md +134 -0
- package/docs/i18n/USAGE.ja.md +134 -0
- package/docs/i18n/USAGE.ko.md +63 -101
- package/docs/i18n/USAGE.ru.md +134 -0
- package/docs/i18n/USAGE.zh.md +134 -0
- package/package.json +2 -2
- package/integrations/openvoice/__pycache__/synth.cpython-311.pyc +0 -0
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Чистая установка
|
|
2
|
+
|
|
3
|
+
This guide mirrors the English fresh-install flow for Русский. It is intended for a clean public install and avoids local-only assumptions.
|
|
4
|
+
|
|
5
|
+
## 1. Install the CLI
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g verbalcoding
|
|
9
|
+
vc setup --yes
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Or run the published package directly:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npx verbalcoding setup --yes
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Contributor clone path:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
git clone https://github.com/ca1773130n/VerbalCoding.git
|
|
22
|
+
cd VerbalCoding
|
|
23
|
+
./scripts/install.sh --yes
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 2. Bootstrap dependencies
|
|
27
|
+
|
|
28
|
+
The setup flow installs npm dependencies when needed, links the short `vc` command for clone installs, installs `ffmpeg` / Node / `whisper-cli` where the OS package manager supports it, downloads `models/ggml-small-q5_1.bin`, creates `.venv-tts`, and writes `.env`.
|
|
29
|
+
|
|
30
|
+
Useful variants:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
vc setup --yes --no-wizard
|
|
34
|
+
./scripts/install.sh --yes --no-wizard
|
|
35
|
+
./scripts/install.sh --skip-system
|
|
36
|
+
./scripts/install.sh --skip-model
|
|
37
|
+
./scripts/install.sh --skip-edge-tts
|
|
38
|
+
VERBALCODING_SKIP_CLI_LINK=1 ./scripts/install.sh --yes
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Supported bootstrap paths: macOS/Homebrew, Debian/Ubuntu `apt`, Fedora/RHEL `dnf`, and Arch `pacman`. If unsupported, manually install Node.js 20+, npm, ffmpeg, Python 3, `whisper-cli`, and an authenticated CLI agent backend.
|
|
42
|
+
|
|
43
|
+
## 3. Discord application setup
|
|
44
|
+
|
|
45
|
+
Read the upstream bot guides first:
|
|
46
|
+
|
|
47
|
+
- Hermes Agent Discord guide: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
|
|
48
|
+
- Discord official bot overview: <https://docs.discord.com/developers/bots/overview>
|
|
49
|
+
- Discord official getting started guide: <https://docs.discord.com/developers/quick-start/getting-started>
|
|
50
|
+
|
|
51
|
+
Create a Discord application and bot, enable the Message Content privileged intent, put the token in the installer or `.env` as `DISCORD_BOT_TOKEN`, then generate the invite URL:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
vc bot invite <discord-client-id>
|
|
55
|
+
vc bot invite <discord-client-id> --guild <guild-id>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 4. Verify
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
vc doctor
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`vc doctor` redacts secrets and reports missing commands/models/tokens without printing sensitive values. Expected success includes Node.js, npm, ffmpeg, whisper-cli, the model, Discord bot token configured, edge-tts, and the selected agent CLI.
|
|
65
|
+
|
|
66
|
+
## 5. Run
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
vc start
|
|
70
|
+
# or, from a GitHub clone:
|
|
71
|
+
./run.sh
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Expected log lines:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
Logged in as <bot-name>
|
|
78
|
+
Listening in voice channel <server> / <channel>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
In Discord:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
!ping
|
|
85
|
+
!join
|
|
86
|
+
!ask say hello briefly
|
|
87
|
+
!verbose on
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Then speak in the configured voice channel. You should see STT text, progress text when verbose mode is on, a final text answer, and hear TTS playback.
|
|
91
|
+
|
|
92
|
+
## 6. Project-per-room setup
|
|
93
|
+
|
|
94
|
+
For one permanent bot per project voice room, create one Discord application per project, then:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
vc instance setup my-project
|
|
98
|
+
vc bot invite <that-project-client-id>
|
|
99
|
+
vc instance start my-project
|
|
100
|
+
vc instance status my-project
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 7. Optional OpenVoice setup
|
|
104
|
+
|
|
105
|
+
Keep `TTS_BACKEND=edge` for a fresh install. To enable OpenVoice later:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
./scripts/setup_openvoice.sh
|
|
109
|
+
# Download OpenVoice V2 checkpoints into vendor/OpenVoice/checkpoints_v2/
|
|
110
|
+
# Add a permitted local sample at voice-samples/user-reference.wav,
|
|
111
|
+
# or run the bot, say "목소리 샘플 녹음 시작해", then speak 10-30 seconds.
|
|
112
|
+
python3 integrations/openvoice/synth.py --openvoice-dir vendor/OpenVoice --ref-audio voice-samples/user-reference.wav --text '안녕하세요. 버벌코딩 목소리 복제 테스트입니다.' --output /tmp/verbalcoding-openvoice-smoke.wav
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Then set `TTS_BACKEND=openvoice`, run `vc doctor`, and test `!voice-test <text>` in Discord.
|
|
116
|
+
|
|
117
|
+
## 8. Maintainer smoke tests
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
./scripts/install.sh --yes --no-wizard
|
|
121
|
+
npm pack --dry-run
|
|
122
|
+
vc doctor || true
|
|
123
|
+
./scripts/docker_ubuntu_smoke.sh
|
|
124
|
+
```
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# 全新安装
|
|
2
|
+
|
|
3
|
+
This guide mirrors the English fresh-install flow for 中文. It is intended for a clean public install and avoids local-only assumptions.
|
|
4
|
+
|
|
5
|
+
## 1. Install the CLI
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g verbalcoding
|
|
9
|
+
vc setup --yes
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
Or run the published package directly:
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npx verbalcoding setup --yes
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Contributor clone path:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
git clone https://github.com/ca1773130n/VerbalCoding.git
|
|
22
|
+
cd VerbalCoding
|
|
23
|
+
./scripts/install.sh --yes
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
## 2. Bootstrap dependencies
|
|
27
|
+
|
|
28
|
+
The setup flow installs npm dependencies when needed, links the short `vc` command for clone installs, installs `ffmpeg` / Node / `whisper-cli` where the OS package manager supports it, downloads `models/ggml-small-q5_1.bin`, creates `.venv-tts`, and writes `.env`.
|
|
29
|
+
|
|
30
|
+
Useful variants:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
vc setup --yes --no-wizard
|
|
34
|
+
./scripts/install.sh --yes --no-wizard
|
|
35
|
+
./scripts/install.sh --skip-system
|
|
36
|
+
./scripts/install.sh --skip-model
|
|
37
|
+
./scripts/install.sh --skip-edge-tts
|
|
38
|
+
VERBALCODING_SKIP_CLI_LINK=1 ./scripts/install.sh --yes
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Supported bootstrap paths: macOS/Homebrew, Debian/Ubuntu `apt`, Fedora/RHEL `dnf`, and Arch `pacman`. If unsupported, manually install Node.js 20+, npm, ffmpeg, Python 3, `whisper-cli`, and an authenticated CLI agent backend.
|
|
42
|
+
|
|
43
|
+
## 3. Discord application setup
|
|
44
|
+
|
|
45
|
+
Read the upstream bot guides first:
|
|
46
|
+
|
|
47
|
+
- Hermes Agent Discord guide: <https://hermes-agent.nousresearch.com/docs/user-guide/messaging/discord>
|
|
48
|
+
- Discord official bot overview: <https://docs.discord.com/developers/bots/overview>
|
|
49
|
+
- Discord official getting started guide: <https://docs.discord.com/developers/quick-start/getting-started>
|
|
50
|
+
|
|
51
|
+
Create a Discord application and bot, enable the Message Content privileged intent, put the token in the installer or `.env` as `DISCORD_BOT_TOKEN`, then generate the invite URL:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
vc bot invite <discord-client-id>
|
|
55
|
+
vc bot invite <discord-client-id> --guild <guild-id>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## 4. Verify
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
vc doctor
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`vc doctor` redacts secrets and reports missing commands/models/tokens without printing sensitive values. Expected success includes Node.js, npm, ffmpeg, whisper-cli, the model, Discord bot token configured, edge-tts, and the selected agent CLI.
|
|
65
|
+
|
|
66
|
+
## 5. Run
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
vc start
|
|
70
|
+
# or, from a GitHub clone:
|
|
71
|
+
./run.sh
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Expected log lines:
|
|
75
|
+
|
|
76
|
+
```text
|
|
77
|
+
Logged in as <bot-name>
|
|
78
|
+
Listening in voice channel <server> / <channel>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
In Discord:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
!ping
|
|
85
|
+
!join
|
|
86
|
+
!ask say hello briefly
|
|
87
|
+
!verbose on
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Then speak in the configured voice channel. You should see STT text, progress text when verbose mode is on, a final text answer, and hear TTS playback.
|
|
91
|
+
|
|
92
|
+
## 6. Project-per-room setup
|
|
93
|
+
|
|
94
|
+
For one permanent bot per project voice room, create one Discord application per project, then:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
vc instance setup my-project
|
|
98
|
+
vc bot invite <that-project-client-id>
|
|
99
|
+
vc instance start my-project
|
|
100
|
+
vc instance status my-project
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 7. Optional OpenVoice setup
|
|
104
|
+
|
|
105
|
+
Keep `TTS_BACKEND=edge` for a fresh install. To enable OpenVoice later:
|
|
106
|
+
|
|
107
|
+
```bash
|
|
108
|
+
./scripts/setup_openvoice.sh
|
|
109
|
+
# Download OpenVoice V2 checkpoints into vendor/OpenVoice/checkpoints_v2/
|
|
110
|
+
# Add a permitted local sample at voice-samples/user-reference.wav,
|
|
111
|
+
# or run the bot, say "목소리 샘플 녹음 시작해", then speak 10-30 seconds.
|
|
112
|
+
python3 integrations/openvoice/synth.py --openvoice-dir vendor/OpenVoice --ref-audio voice-samples/user-reference.wav --text '안녕하세요. 버벌코딩 목소리 복제 테스트입니다.' --output /tmp/verbalcoding-openvoice-smoke.wav
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Then set `TTS_BACKEND=openvoice`, run `vc doctor`, and test `!voice-test <text>` in Discord.
|
|
116
|
+
|
|
117
|
+
## 8. Maintainer smoke tests
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
./scripts/install.sh --yes --no-wizard
|
|
121
|
+
npm pack --dry-run
|
|
122
|
+
vc doctor || true
|
|
123
|
+
./scripts/docker_ubuntu_smoke.sh
|
|
124
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# VerbalCoding Multiinstancia
|
|
2
|
+
|
|
3
|
+
VerbalCoding can run multiple independent Discord voice bridge processes. Each process loads a different `instances/<name>.env` file and uses a different Discord bot token.
|
|
4
|
+
|
|
5
|
+
Use this when each project should permanently occupy its own Discord voice channel and write to its own transcript channel/thread.
|
|
6
|
+
|
|
7
|
+
## Why multiple bot tokens are required
|
|
8
|
+
|
|
9
|
+
Discord voice residency is effectively one active voice connection per bot account per guild. For simultaneous project rooms, create one Discord application/bot per project.
|
|
10
|
+
|
|
11
|
+
## File layout
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
instances/
|
|
15
|
+
README.md
|
|
16
|
+
example.env
|
|
17
|
+
llm-wiki.env # local only, ignored by git
|
|
18
|
+
verbalcoding.env # local only, ignored by git
|
|
19
|
+
.run/instances/
|
|
20
|
+
llm-wiki.pid # runtime only, ignored by git
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Real `instances/*.env` files are ignored because they may contain Discord tokens.
|
|
24
|
+
|
|
25
|
+
## Instance setup wizard
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
vc instance setup llm-wiki
|
|
29
|
+
./scripts/install.sh --instance llm-wiki
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The wizard asks for bot token, Discord Application/Client ID, voice channel, transcript target, workdir, project context, and isolated runtime paths. It writes `instances/<name>.env` with mode `0600` and backs up an existing file.
|
|
33
|
+
|
|
34
|
+
Generate invite URLs with:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
vc bot invite <client-id>
|
|
38
|
+
vc bot invite <client-id> --guild <guild-id>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Hermes profile isolation
|
|
42
|
+
|
|
43
|
+
Each instance gets its own Hermes home at `~/.hermes/profiles/<name>` so memory, `MEMORY.md`, `SOUL.md`, and learned skills do not leak across projects.
|
|
44
|
+
|
|
45
|
+
`vc instance setup <name>` creates or reuses the profile, sets `terminal.cwd`, seeds `SOUL.md`, and writes `HERMES_HOME` into the instance env. Instance names must match `^[a-z0-9][a-z0-9_-]{0,63}$`.
|
|
46
|
+
|
|
47
|
+
## Minimal generated instance env
|
|
48
|
+
|
|
49
|
+
```env
|
|
50
|
+
INSTANCE_NAME=my-project
|
|
51
|
+
DISCORD_TOKEN=replac...oken
|
|
52
|
+
DISCORD_CLIENT_ID=123456789012345678
|
|
53
|
+
AUTO_JOIN_VOICE_CHANNELS=Project Room
|
|
54
|
+
TRANSCRIPT_CHANNEL_ID=123456789012345678
|
|
55
|
+
PROJECT_SESSIONS_FILE=config/project-sessions.my-project.json
|
|
56
|
+
BRIDGE_LOG_PATH=/tmp/verbalcoding-my-project.log
|
|
57
|
+
NODE_AUDIO_DEBUG_DIR=/tmp/verbalcoding-my-project-debug
|
|
58
|
+
HERMES_SESSION_FILE=.agent-sessions/hermes/my-project.session
|
|
59
|
+
HERMES_HOME=/home/you/.hermes/profiles/my-project
|
|
60
|
+
AGENT_LABEL=VerbalCoding · My Project
|
|
61
|
+
AGENT_CWD=/path/to/my-project
|
|
62
|
+
AGENT_PROJECT_CONTEXT=Project session: My Project
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`vc doctor` checks duplicate tokens, colliding runtime paths, missing profile directories, and `terminal.cwd` mismatches without printing secrets.
|
|
66
|
+
|
|
67
|
+
## Commands
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
vc instance list
|
|
71
|
+
vc instance status
|
|
72
|
+
vc instance status my-project
|
|
73
|
+
vc instance start my-project
|
|
74
|
+
vc instance stop my-project
|
|
75
|
+
vc instance restart my-project
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Example: two permanent voice rooms
|
|
79
|
+
|
|
80
|
+
1. Create two Discord applications/bots.
|
|
81
|
+
2. Invite both with text and voice permissions. Use `vc bot invite <client-id>`.
|
|
82
|
+
3. Run setup:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
vc instance setup verbalcoding
|
|
86
|
+
vc instance setup llm-wiki
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
4. Check and start:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
vc doctor
|
|
93
|
+
vc instance start verbalcoding
|
|
94
|
+
vc instance start llm-wiki
|
|
95
|
+
vc instance status
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
5. Verify logs:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
tail -n 50 /tmp/verbalcoding-verbalcoding.log
|
|
102
|
+
tail -n 50 /tmp/verbalcoding-llm-wiki.log
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Expected:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
Listening in voice channel ... / VerbalCoding
|
|
109
|
+
Listening in voice channel ... / LLM-Wiki
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Short-term single-bot text/voice binding
|
|
113
|
+
|
|
114
|
+
If you only have one bot token, bind a project session to a voice channel instead of simultaneous residency:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
!session attach-voice --voice "LLM-Wiki"
|
|
118
|
+
!session voice llm-wiki --voice "LLM-Wiki"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
This routes text/STT/result/progress/final answer messages correctly, but it does not make one bot stay in two voice channels at the same time.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# VerbalCoding Multi-instance
|
|
2
|
+
|
|
3
|
+
VerbalCoding can run multiple independent Discord voice bridge processes. Each process loads a different `instances/<name>.env` file and uses a different Discord bot token.
|
|
4
|
+
|
|
5
|
+
Use this when each project should permanently occupy its own Discord voice channel and write to its own transcript channel/thread.
|
|
6
|
+
|
|
7
|
+
## Why multiple bot tokens are required
|
|
8
|
+
|
|
9
|
+
Discord voice residency is effectively one active voice connection per bot account per guild. For simultaneous project rooms, create one Discord application/bot per project.
|
|
10
|
+
|
|
11
|
+
## File layout
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
instances/
|
|
15
|
+
README.md
|
|
16
|
+
example.env
|
|
17
|
+
llm-wiki.env # local only, ignored by git
|
|
18
|
+
verbalcoding.env # local only, ignored by git
|
|
19
|
+
.run/instances/
|
|
20
|
+
llm-wiki.pid # runtime only, ignored by git
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Real `instances/*.env` files are ignored because they may contain Discord tokens.
|
|
24
|
+
|
|
25
|
+
## Instance setup wizard
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
vc instance setup llm-wiki
|
|
29
|
+
./scripts/install.sh --instance llm-wiki
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The wizard asks for bot token, Discord Application/Client ID, voice channel, transcript target, workdir, project context, and isolated runtime paths. It writes `instances/<name>.env` with mode `0600` and backs up an existing file.
|
|
33
|
+
|
|
34
|
+
Generate invite URLs with:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
vc bot invite <client-id>
|
|
38
|
+
vc bot invite <client-id> --guild <guild-id>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Hermes profile isolation
|
|
42
|
+
|
|
43
|
+
Each instance gets its own Hermes home at `~/.hermes/profiles/<name>` so memory, `MEMORY.md`, `SOUL.md`, and learned skills do not leak across projects.
|
|
44
|
+
|
|
45
|
+
`vc instance setup <name>` creates or reuses the profile, sets `terminal.cwd`, seeds `SOUL.md`, and writes `HERMES_HOME` into the instance env. Instance names must match `^[a-z0-9][a-z0-9_-]{0,63}$`.
|
|
46
|
+
|
|
47
|
+
## Minimal generated instance env
|
|
48
|
+
|
|
49
|
+
```env
|
|
50
|
+
INSTANCE_NAME=my-project
|
|
51
|
+
DISCORD_TOKEN=replac...oken
|
|
52
|
+
DISCORD_CLIENT_ID=123456789012345678
|
|
53
|
+
AUTO_JOIN_VOICE_CHANNELS=Project Room
|
|
54
|
+
TRANSCRIPT_CHANNEL_ID=123456789012345678
|
|
55
|
+
PROJECT_SESSIONS_FILE=config/project-sessions.my-project.json
|
|
56
|
+
BRIDGE_LOG_PATH=/tmp/verbalcoding-my-project.log
|
|
57
|
+
NODE_AUDIO_DEBUG_DIR=/tmp/verbalcoding-my-project-debug
|
|
58
|
+
HERMES_SESSION_FILE=.agent-sessions/hermes/my-project.session
|
|
59
|
+
HERMES_HOME=/home/you/.hermes/profiles/my-project
|
|
60
|
+
AGENT_LABEL=VerbalCoding · My Project
|
|
61
|
+
AGENT_CWD=/path/to/my-project
|
|
62
|
+
AGENT_PROJECT_CONTEXT=Project session: My Project
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`vc doctor` checks duplicate tokens, colliding runtime paths, missing profile directories, and `terminal.cwd` mismatches without printing secrets.
|
|
66
|
+
|
|
67
|
+
## Commands
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
vc instance list
|
|
71
|
+
vc instance status
|
|
72
|
+
vc instance status my-project
|
|
73
|
+
vc instance start my-project
|
|
74
|
+
vc instance stop my-project
|
|
75
|
+
vc instance restart my-project
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Example: two permanent voice rooms
|
|
79
|
+
|
|
80
|
+
1. Create two Discord applications/bots.
|
|
81
|
+
2. Invite both with text and voice permissions. Use `vc bot invite <client-id>`.
|
|
82
|
+
3. Run setup:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
vc instance setup verbalcoding
|
|
86
|
+
vc instance setup llm-wiki
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
4. Check and start:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
vc doctor
|
|
93
|
+
vc instance start verbalcoding
|
|
94
|
+
vc instance start llm-wiki
|
|
95
|
+
vc instance status
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
5. Verify logs:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
tail -n 50 /tmp/verbalcoding-verbalcoding.log
|
|
102
|
+
tail -n 50 /tmp/verbalcoding-llm-wiki.log
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Expected:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
Listening in voice channel ... / VerbalCoding
|
|
109
|
+
Listening in voice channel ... / LLM-Wiki
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Short-term single-bot text/voice binding
|
|
113
|
+
|
|
114
|
+
If you only have one bot token, bind a project session to a voice channel instead of simultaneous residency:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
!session attach-voice --voice "LLM-Wiki"
|
|
118
|
+
!session voice llm-wiki --voice "LLM-Wiki"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
This routes text/STT/result/progress/final answer messages correctly, but it does not make one bot stay in two voice channels at the same time.
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# VerbalCoding マルチインスタンス
|
|
2
|
+
|
|
3
|
+
VerbalCoding can run multiple independent Discord voice bridge processes. Each process loads a different `instances/<name>.env` file and uses a different Discord bot token.
|
|
4
|
+
|
|
5
|
+
Use this when each project should permanently occupy its own Discord voice channel and write to its own transcript channel/thread.
|
|
6
|
+
|
|
7
|
+
## Why multiple bot tokens are required
|
|
8
|
+
|
|
9
|
+
Discord voice residency is effectively one active voice connection per bot account per guild. For simultaneous project rooms, create one Discord application/bot per project.
|
|
10
|
+
|
|
11
|
+
## File layout
|
|
12
|
+
|
|
13
|
+
```text
|
|
14
|
+
instances/
|
|
15
|
+
README.md
|
|
16
|
+
example.env
|
|
17
|
+
llm-wiki.env # local only, ignored by git
|
|
18
|
+
verbalcoding.env # local only, ignored by git
|
|
19
|
+
.run/instances/
|
|
20
|
+
llm-wiki.pid # runtime only, ignored by git
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Real `instances/*.env` files are ignored because they may contain Discord tokens.
|
|
24
|
+
|
|
25
|
+
## Instance setup wizard
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
vc instance setup llm-wiki
|
|
29
|
+
./scripts/install.sh --instance llm-wiki
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
The wizard asks for bot token, Discord Application/Client ID, voice channel, transcript target, workdir, project context, and isolated runtime paths. It writes `instances/<name>.env` with mode `0600` and backs up an existing file.
|
|
33
|
+
|
|
34
|
+
Generate invite URLs with:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
vc bot invite <client-id>
|
|
38
|
+
vc bot invite <client-id> --guild <guild-id>
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Hermes profile isolation
|
|
42
|
+
|
|
43
|
+
Each instance gets its own Hermes home at `~/.hermes/profiles/<name>` so memory, `MEMORY.md`, `SOUL.md`, and learned skills do not leak across projects.
|
|
44
|
+
|
|
45
|
+
`vc instance setup <name>` creates or reuses the profile, sets `terminal.cwd`, seeds `SOUL.md`, and writes `HERMES_HOME` into the instance env. Instance names must match `^[a-z0-9][a-z0-9_-]{0,63}$`.
|
|
46
|
+
|
|
47
|
+
## Minimal generated instance env
|
|
48
|
+
|
|
49
|
+
```env
|
|
50
|
+
INSTANCE_NAME=my-project
|
|
51
|
+
DISCORD_TOKEN=replac...oken
|
|
52
|
+
DISCORD_CLIENT_ID=123456789012345678
|
|
53
|
+
AUTO_JOIN_VOICE_CHANNELS=Project Room
|
|
54
|
+
TRANSCRIPT_CHANNEL_ID=123456789012345678
|
|
55
|
+
PROJECT_SESSIONS_FILE=config/project-sessions.my-project.json
|
|
56
|
+
BRIDGE_LOG_PATH=/tmp/verbalcoding-my-project.log
|
|
57
|
+
NODE_AUDIO_DEBUG_DIR=/tmp/verbalcoding-my-project-debug
|
|
58
|
+
HERMES_SESSION_FILE=.agent-sessions/hermes/my-project.session
|
|
59
|
+
HERMES_HOME=/home/you/.hermes/profiles/my-project
|
|
60
|
+
AGENT_LABEL=VerbalCoding · My Project
|
|
61
|
+
AGENT_CWD=/path/to/my-project
|
|
62
|
+
AGENT_PROJECT_CONTEXT=Project session: My Project
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
`vc doctor` checks duplicate tokens, colliding runtime paths, missing profile directories, and `terminal.cwd` mismatches without printing secrets.
|
|
66
|
+
|
|
67
|
+
## Commands
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
vc instance list
|
|
71
|
+
vc instance status
|
|
72
|
+
vc instance status my-project
|
|
73
|
+
vc instance start my-project
|
|
74
|
+
vc instance stop my-project
|
|
75
|
+
vc instance restart my-project
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Example: two permanent voice rooms
|
|
79
|
+
|
|
80
|
+
1. Create two Discord applications/bots.
|
|
81
|
+
2. Invite both with text and voice permissions. Use `vc bot invite <client-id>`.
|
|
82
|
+
3. Run setup:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
vc instance setup verbalcoding
|
|
86
|
+
vc instance setup llm-wiki
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
4. Check and start:
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
vc doctor
|
|
93
|
+
vc instance start verbalcoding
|
|
94
|
+
vc instance start llm-wiki
|
|
95
|
+
vc instance status
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
5. Verify logs:
|
|
99
|
+
|
|
100
|
+
```bash
|
|
101
|
+
tail -n 50 /tmp/verbalcoding-verbalcoding.log
|
|
102
|
+
tail -n 50 /tmp/verbalcoding-llm-wiki.log
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
Expected:
|
|
106
|
+
|
|
107
|
+
```text
|
|
108
|
+
Listening in voice channel ... / VerbalCoding
|
|
109
|
+
Listening in voice channel ... / LLM-Wiki
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## Short-term single-bot text/voice binding
|
|
113
|
+
|
|
114
|
+
If you only have one bot token, bind a project session to a voice channel instead of simultaneous residency:
|
|
115
|
+
|
|
116
|
+
```text
|
|
117
|
+
!session attach-voice --voice "LLM-Wiki"
|
|
118
|
+
!session voice llm-wiki --voice "LLM-Wiki"
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
This routes text/STT/result/progress/final answer messages correctly, but it does not make one bot stay in two voice channels at the same time.
|