verbalcoding 0.2.7 → 0.2.9

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 (46) hide show
  1. package/README.md +12 -27
  2. package/app-node/cli_install.test.mjs +32 -0
  3. package/app-node/install_config.mjs +10 -0
  4. package/docs/FRESH_INSTALL.md +8 -2
  5. package/docs/assets/figures/verbalcoding-flow.svg +45 -30
  6. package/docs/i18n/CONFIGURATION.es.md +138 -49
  7. package/docs/i18n/CONFIGURATION.fr.md +138 -49
  8. package/docs/i18n/CONFIGURATION.ja.md +137 -48
  9. package/docs/i18n/CONFIGURATION.ko.md +137 -48
  10. package/docs/i18n/CONFIGURATION.ru.md +138 -49
  11. package/docs/i18n/CONFIGURATION.zh.md +137 -48
  12. package/docs/i18n/FRESH_INSTALL.es.md +115 -32
  13. package/docs/i18n/FRESH_INSTALL.fr.md +115 -32
  14. package/docs/i18n/FRESH_INSTALL.ja.md +119 -36
  15. package/docs/i18n/FRESH_INSTALL.ko.md +120 -37
  16. package/docs/i18n/FRESH_INSTALL.ru.md +115 -32
  17. package/docs/i18n/FRESH_INSTALL.zh.md +119 -36
  18. package/docs/i18n/MULTI_INSTANCE.es.md +85 -26
  19. package/docs/i18n/MULTI_INSTANCE.fr.md +85 -26
  20. package/docs/i18n/MULTI_INSTANCE.ja.md +87 -29
  21. package/docs/i18n/MULTI_INSTANCE.ko.md +87 -29
  22. package/docs/i18n/MULTI_INSTANCE.ru.md +84 -26
  23. package/docs/i18n/MULTI_INSTANCE.zh.md +87 -29
  24. package/docs/i18n/README.es.md +109 -45
  25. package/docs/i18n/README.fr.md +109 -45
  26. package/docs/i18n/README.ja.md +109 -45
  27. package/docs/i18n/README.ko.md +108 -45
  28. package/docs/i18n/README.ru.md +109 -45
  29. package/docs/i18n/README.zh.md +108 -45
  30. package/docs/i18n/RELEASE.es.md +53 -37
  31. package/docs/i18n/RELEASE.fr.md +53 -37
  32. package/docs/i18n/RELEASE.ja.md +52 -36
  33. package/docs/i18n/RELEASE.ko.md +52 -36
  34. package/docs/i18n/RELEASE.ru.md +53 -37
  35. package/docs/i18n/RELEASE.zh.md +53 -37
  36. package/docs/i18n/USAGE.es.md +91 -64
  37. package/docs/i18n/USAGE.fr.md +91 -64
  38. package/docs/i18n/USAGE.ja.md +90 -63
  39. package/docs/i18n/USAGE.ko.md +90 -63
  40. package/docs/i18n/USAGE.ru.md +91 -64
  41. package/docs/i18n/USAGE.zh.md +90 -63
  42. package/package.json +1 -1
  43. package/scripts/bootstrap_prereqs.sh +15 -3
  44. package/scripts/cli.mjs +1 -1
  45. package/scripts/doctor.mjs +173 -8
  46. package/scripts/install.mjs +2 -0
@@ -1,50 +1,64 @@
1
- # VerbalCoding マルチインスタンス
1
+ # マルチインスタンス VerbalCoding
2
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.
3
+ VerbalCoding は、複数の独立した Discord 音声ブリッジプロセスを実行できます。各プロセスは既存の単一インスタンス Node ブリッジのままですが、異なる `instances/<name>.env` ファイルを読み込み、異なる Discord ボットトークンを使います。
4
4
 
5
- Use this when each project should permanently occupy its own Discord voice channel and write to its own transcript channel/thread.
5
+ 各プロジェクトが専用の Discord 音声チャンネルに常駐し、専用の文字起こしチャンネル/スレッドへ書き込む必要がある場合に使います。
6
6
 
7
- ## Why multiple bot tokens are required
7
+ ## 複数のボットトークンが必要な理由
8
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.
9
+ Discord 音声の常駐は、実質的に 1 つのギルドにつき 1 ボットアカウントあたり 1 つのアクティブな音声接続です。同じギルド内で 1 つのボットトークンが別の音声チャンネルに参加すると、以前のチャンネルに同時に常駐し続けることはできません。同時に使うプロジェクトルームには、プロジェクトごとに 1 つの Discord アプリケーション/ボットを作成してください。
10
10
 
11
- ## File layout
11
+ ## ファイルレイアウト
12
12
 
13
13
  ```text
14
14
  instances/
15
15
  README.md
16
16
  example.env
17
- llm-wiki.env # local only, ignored by git
18
- verbalcoding.env # local only, ignored by git
17
+ llm-wiki.env # ローカルのみ、git で無視
18
+ verbalcoding.env # ローカルのみ、git で無視
19
19
  .run/instances/
20
- llm-wiki.pid # runtime only, ignored by git
20
+ llm-wiki.pid # 実行時のみ、git で無視
21
21
  ```
22
22
 
23
- Real `instances/*.env` files are ignored because they may contain Discord tokens.
23
+ 実際の `instances/*.env` ファイルは Discord トークンを含む可能性があるため無視されます。`instances/example.env` がコミット済みテンプレートです。
24
24
 
25
- ## Instance setup wizard
25
+ ## インスタンスセットアップウィザード
26
+
27
+ 通常利用では、ユーザーが env ファイルをコピーして手動編集すべきではありません。代わりにウィザードを実行してください:
26
28
 
27
29
  ```bash
28
30
  vc instance setup llm-wiki
31
+ # またはプロジェクトセットアップスクリプトから:
29
32
  ./scripts/install.sh --instance llm-wiki
30
33
  ```
31
34
 
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.
35
+ ウィザードは、ボットトークン、Discord Application/Client ID、音声チャンネル、文字起こし先、作業ディレクトリ、プロジェクトコンテキスト、分離されたランタイムパスを尋ねます。`instances/<name>.env` をモード `0600` で書き込み、上書き前に既存ファイルをバックアップし、次に使う start/status コマンドを表示します。
33
36
 
34
- Generate invite URLs with:
37
+ セットアップ中に Discord Application/Client ID を入力すると、概要にそのボットの招待 URL も表示されます。同じ URL はいつでも次で生成できます:
35
38
 
36
39
  ```bash
37
40
  vc bot invite <client-id>
38
41
  vc bot invite <client-id> --guild <guild-id>
39
42
  ```
40
43
 
41
- ## Hermes profile isolation
44
+ 同時に常駐する音声ルームごとに Discord Developer Portal のアプリケーション/ボットは依然として 1 つ必要ですが、OAuth URL や権限整数を手動で組み立てずに済みます。
45
+
46
+ ### Hermes プロファイル分離
47
+
48
+ 各インスタンスには `~/.hermes/profiles/<name>` に独自の Hermes ホームが与えられるため、メモリ、MEMORY.md、SOUL.md、学習済みスキルがプロジェクト間で漏れません。
49
+
50
+ `vc instance setup <name>` は自動的に次を行います:
42
51
 
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.
52
+ - `hermes profile create <name> --clone-from default` を実行します(現在の `~/.hermes` から API キーとモデルを引き継ぎ、セッションとメモリは新規に開始します)。
53
+ - 新しいプロファイルの `terminal.cwd` をインスタンスの作業ディレクトリに設定します。
54
+ - ウィザードのプロジェクトコンテキスト回答から `<profile>/SOUL.md` を初期化します。
55
+ - `instances/<name>.env` に `HERMES_HOME=...` を書き込みます。
44
56
 
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}$`.
57
+ `vc instance start <name>` は自己修復します。env が指す Hermes プロファイルディレクトリが存在しない場合、起動前に再作成します。
46
58
 
47
- ## Minimal generated instance env
59
+ Hermes は名前をディレクトリおよび設定キーとして使うため、インスタンス名は `^[a-z0-9][a-z0-9_-]{0,63}$` に一致する必要があります。
60
+
61
+ ## 生成される最小インスタンス env
48
62
 
49
63
  ```env
50
64
  INSTANCE_NAME=my-project
@@ -62,9 +76,9 @@ AGENT_CWD=/path/to/my-project
62
76
  AGENT_PROJECT_CONTEXT=Project session: My Project
63
77
  ```
64
78
 
65
- `vc doctor` checks duplicate tokens, colliding runtime paths, missing profile directories, and `terminal.cwd` mismatches without printing secrets.
79
+ 各インスタンスには、ログ/デバッグ/セッションファイル用に一意の値を与えてください。`HERMES_HOME` と対応する `~/.hermes/profiles/<name>` ディレクトリは `vc instance setup` によって自動作成されます。`vc doctor` は、重複トークン、衝突するランタイムパス、存在しないプロファイルディレクトリ、プロファイルとインスタンス間の `terminal.cwd` 不一致を、秘密情報を出力せずに確認します。
66
80
 
67
- ## Commands
81
+ ## コマンド
68
82
 
69
83
  ```bash
70
84
  vc instance list
@@ -75,47 +89,91 @@ vc instance stop my-project
75
89
  vc instance restart my-project
76
90
  ```
77
91
 
78
- ## Example: two permanent voice rooms
92
+ `start` `./run.sh instances/<name>.env` をデタッチして実行し、`.run/instances/<name>.pid` を書き込みます。
93
+
94
+ `stop` は `SIGTERM` を送り、最大 10 秒待ってから `SIGKILL` にフォールバックし、pid ファイルを削除します。
95
+
96
+ ## 例: 2 つの永続音声ルーム
79
97
 
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:
98
+ 1. 2 つの Discord アプリケーション/ボットを作成します:
99
+ - VerbalCoding bot
100
+ - LLM-Wiki bot
101
+
102
+ 2. テキストおよび音声権限付きで両方をサーバーに招待します:
103
+ - チャンネルを見る
104
+ - メッセージを送信
105
+ - スレッドでメッセージを送信
106
+ - メッセージ履歴を読む
107
+ - アプリケーションコマンドを使う
108
+ - 接続
109
+ - 発話
110
+
111
+ 各 Discord アプリケーション作成後に `vc bot invite <client-id>` を使うと、これらの権限を含む正確な招待 URL が出力されます。
112
+
113
+ 3. 各ローカルインスタンスでセットアップウィザードを実行します:
83
114
 
84
115
  ```bash
85
116
  vc instance setup verbalcoding
86
117
  vc instance setup llm-wiki
87
118
  ```
88
119
 
89
- 4. Check and start:
120
+ ウィザードは、git で無視される `instances/verbalcoding.env` `instances/llm-wiki.env` をモード `0600` で書き込みます。また、既存のインスタンス env を置き換える前にバックアップします。各実行では、デフォルト Hermes ホームから複製された `~/.hermes/profiles/<name>` も作成されるため、2 つのインスタンスは同じ認証/モデルで開始しながら、各プロジェクトの学習に伴って独立したメモリとスキルを蓄積します。
121
+
122
+ 4. 設定を確認します:
90
123
 
91
124
  ```bash
92
125
  vc doctor
126
+ ```
127
+
128
+ 5. 両方を起動します:
129
+
130
+ ```bash
93
131
  vc instance start verbalcoding
94
132
  vc instance start llm-wiki
95
133
  vc instance status
96
134
  ```
97
135
 
98
- 5. Verify logs:
136
+ 6. ログを確認します:
99
137
 
100
138
  ```bash
101
139
  tail -n 50 /tmp/verbalcoding-verbalcoding.log
102
140
  tail -n 50 /tmp/verbalcoding-llm-wiki.log
103
141
  ```
104
142
 
105
- Expected:
143
+ 期待されるログ行:
106
144
 
107
145
  ```text
108
146
  Listening in voice channel ... / VerbalCoding
109
147
  Listening in voice channel ... / LLM-Wiki
110
148
  ```
111
149
 
112
- ## Short-term single-bot text/voice binding
150
+ 7. 両方を停止します:
151
+
152
+ ```bash
153
+ vc instance stop verbalcoding
154
+ vc instance stop llm-wiki
155
+ ```
156
+
157
+ ## 短期的な単一ボットでのテキスト/音声紐付け
158
+
159
+ ボットトークンが 1 つしかない場合は、同時マルチチャンネル常駐ではなく、プロジェクトセッションの音声紐付けを使ってください。
113
160
 
114
- If you only have one bot token, bind a project session to a voice channel instead of simultaneous residency:
161
+ 対象のテキストチャンネル/スレッドで次を実行します:
115
162
 
116
163
  ```text
117
164
  !session attach-voice --voice "LLM-Wiki"
165
+ ```
166
+
167
+ 動作:
168
+
169
+ - 選択した音声チャンネルを現在のテキストチャンネル/スレッドに紐付けます。
170
+ - 現在のテキストチャンネルにプロジェクトセッションがない場合、アドホックな分離セッションを作成します。
171
+ - 音声 STT/結果/進捗/最終回答テキストは、そのアクティブなプロジェクト文字起こし先へルーティングされます。
172
+
173
+ 既存の名前付きプロジェクトセッションを紐付けるには:
174
+
175
+ ```text
118
176
  !session voice llm-wiki --voice "LLM-Wiki"
119
177
  ```
120
178
 
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.
179
+ これはルーティングには便利ですが、1 つのボットを同時に 2 つの音声チャンネルへ常駐させるものではありません。同時に永続常駐させるには、複数のボットトークン/プロセスを使ってください。
@@ -1,50 +1,64 @@
1
- # VerbalCoding 멀티 인스턴스
1
+ # Multi-instance VerbalCoding
2
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.
3
+ VerbalCoding 여러 개의 독립적인 Discord 음성 브리지 프로세스를 실행할 있습니다. 프로세스는 여전히 기존 단일 인스턴스 Node 브리지이지만, 서로 다른 `instances/<name>.env` 파일을 로드하고 서로 다른 Discord 토큰을 사용합니다.
4
4
 
5
- Use this when each project should permanently occupy its own Discord voice channel and write to its own transcript channel/thread.
5
+ 프로젝트가 자체 Discord 음성 채널을 영구적으로 차지하고 자체 전사 채널/스레드에 기록해야 사용하세요.
6
6
 
7
- ## Why multiple bot tokens are required
7
+ ## 여러 토큰이 필요한 이유
8
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.
9
+ Discord 음성 상주는 사실상 길드당 계정 하나에 활성 음성 연결 하나입니다. 같은 길드에서 하나의 토큰이 다른 음성 채널에 참가하면 이전 채널에 영구 연결된 상태를 동시에 유지할 수 없습니다. 동시에 여러 프로젝트 방을 쓰려면 프로젝트마다 Discord 애플리케이션/봇을 하나씩 만드세요.
10
10
 
11
- ## File layout
11
+ ## 파일 배치
12
12
 
13
13
  ```text
14
14
  instances/
15
15
  README.md
16
16
  example.env
17
- llm-wiki.env # local only, ignored by git
18
- verbalcoding.env # local only, ignored by git
17
+ llm-wiki.env # 로컬 전용, git에서 무시됨
18
+ verbalcoding.env # 로컬 전용, git에서 무시됨
19
19
  .run/instances/
20
- llm-wiki.pid # runtime only, ignored by git
20
+ llm-wiki.pid # 런타임 전용, git에서 무시됨
21
21
  ```
22
22
 
23
- Real `instances/*.env` files are ignored because they may contain Discord tokens.
23
+ 실제 `instances/*.env` 파일은 Discord 토큰을 포함할 있으므로 무시됩니다. `instances/example.env`가 커밋된 템플릿입니다.
24
24
 
25
- ## Instance setup wizard
25
+ ## 인스턴스 설정 마법사
26
+
27
+ 일반 사용자는 env 파일을 복사해 수동으로 편집하지 않아도 됩니다. 대신 마법사를 실행하세요:
26
28
 
27
29
  ```bash
28
30
  vc instance setup llm-wiki
31
+ # 또는 프로젝트 설정 스크립트를 통해:
29
32
  ./scripts/install.sh --instance llm-wiki
30
33
  ```
31
34
 
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.
35
+ 마법사는 토큰, Discord Application/Client ID, 음성 채널, 전사 대상, workdir, 프로젝트 컨텍스트, 격리된 런타임 경로를 묻습니다. mode `0600`으로 `instances/<name>.env`를 작성하고, 덮어쓰기 전에 기존 파일을 백업하며, 다음 start/status 명령을 출력합니다.
33
36
 
34
- Generate invite URLs with:
37
+ 설정 Discord Application/Client ID를 입력하면 요약에 해당 봇의 초대 URL도 출력됩니다. 같은 URL은 언제든 다음으로 생성할 수 있습니다:
35
38
 
36
39
  ```bash
37
40
  vc bot invite <client-id>
38
41
  vc bot invite <client-id> --guild <guild-id>
39
42
  ```
40
43
 
41
- ## Hermes profile isolation
44
+ 동시 음성 방마다 Developer Portal 애플리케이션/봇이 하나씩 필요한 점은 변하지 않지만, OAuth URL이나 권한 정수를 수동으로 만들 필요가 없습니다.
45
+
46
+ ### Hermes 프로필 격리
47
+
48
+ 각 인스턴스는 `~/.hermes/profiles/<name>`에 자체 Hermes home을 갖습니다. 따라서 memory, MEMORY.md, SOUL.md, 학습된 skill이 프로젝트 간에 새지 않습니다.
49
+
50
+ `vc instance setup <name>`은 자동으로 다음을 수행합니다:
42
51
 
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.
52
+ - `hermes profile create <name> --clone-from default` 실행(현재 `~/.hermes`의 API 키와 모델은 가져오며, 세션과 메모리는 새로 시작),
53
+ - 새 프로필의 `terminal.cwd`를 인스턴스 workdir로 설정,
54
+ - 마법사의 프로젝트 컨텍스트 답변으로 `<profile>/SOUL.md` 초기화,
55
+ - `instances/<name>.env`에 `HERMES_HOME=...` 작성.
44
56
 
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}$`.
57
+ `vc instance start <name>`은 자가 복구를 수행합니다. env가 이상 존재하지 않는 Hermes 프로필 디렉터리를 가리키면, 시작 명령은 실행 전에 해당 프로필을 다시 만듭니다.
46
58
 
47
- ## Minimal generated instance env
59
+ Hermes가 이름을 디렉터리 설정 키로 사용하므로 인스턴스 이름은 `^[a-z0-9][a-z0-9_-]{0,63}$`와 일치해야 합니다.
60
+
61
+ ## 최소 생성 인스턴스 env
48
62
 
49
63
  ```env
50
64
  INSTANCE_NAME=my-project
@@ -62,9 +76,9 @@ AGENT_CWD=/path/to/my-project
62
76
  AGENT_PROJECT_CONTEXT=Project session: My Project
63
77
  ```
64
78
 
65
- `vc doctor` checks duplicate tokens, colliding runtime paths, missing profile directories, and `terminal.cwd` mismatches without printing secrets.
79
+ 모든 인스턴스에 로그/디버그/세션 파일의 고유 값을 부여하세요. `HERMES_HOME`과 일치하는 `~/.hermes/profiles/<name>` 디렉터리는 `vc instance setup`이 자동으로 만듭니다. `vc doctor`는 비밀 정보를 출력하지 않고 중복 토큰, 충돌하는 런타임 경로, 누락된 프로필 디렉터리, 프로필과 인스턴스 사이의 `terminal.cwd` 불일치를 확인합니다.
66
80
 
67
- ## Commands
81
+ ## 명령
68
82
 
69
83
  ```bash
70
84
  vc instance list
@@ -75,47 +89,91 @@ vc instance stop my-project
75
89
  vc instance restart my-project
76
90
  ```
77
91
 
78
- ## Example: two permanent voice rooms
92
+ `start`는 `./run.sh instances/<name>.env`를 분리 실행하고 `.run/instances/<name>.pid`를 작성합니다.
93
+
94
+ `stop`은 `SIGTERM`을 보내고 최대 10초간 기다린 뒤, 필요하면 `SIGKILL`로 폴백하고 pid 파일을 제거합니다.
95
+
96
+ ## 예시: 두 개의 영구 음성 방
79
97
 
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:
98
+ 1. 개의 Discord 애플리케이션/봇을 만듭니다:
99
+ - VerbalCoding bot
100
+ - LLM-Wiki bot
101
+
102
+ 2. 텍스트 및 음성 권한으로 둘 다 서버에 초대합니다:
103
+ - View Channel
104
+ - Send Messages
105
+ - Send Messages in Threads
106
+ - Read Message History
107
+ - Use Application Commands
108
+ - Connect
109
+ - Speak
110
+
111
+ 각 Discord 애플리케이션을 만든 뒤 `vc bot invite <client-id>`를 사용하면 해당 권한이 포함된 정확한 초대 URL을 출력할 수 있습니다.
112
+
113
+ 3. 각 로컬 인스턴스에 대해 설정 마법사를 실행합니다:
83
114
 
84
115
  ```bash
85
116
  vc instance setup verbalcoding
86
117
  vc instance setup llm-wiki
87
118
  ```
88
119
 
89
- 4. Check and start:
120
+ 마법사는 mode `0600`으로 git에서 무시되는 `instances/verbalcoding.env` `instances/llm-wiki.env` 파일을 작성합니다. 또한 기존 인스턴스 env를 교체하기 전에 백업합니다. 각 실행은 기본 Hermes home에서 복제한 `~/.hermes/profiles/<name>`도 생성하므로, 두 인스턴스는 같은 인증/모델로 시작하지만 각 프로젝트를 학습하면서 독립적인 메모리와 skill을 축적합니다.
121
+
122
+ 4. 설정을 확인합니다:
90
123
 
91
124
  ```bash
92
125
  vc doctor
126
+ ```
127
+
128
+ 5. 둘 다 시작합니다:
129
+
130
+ ```bash
93
131
  vc instance start verbalcoding
94
132
  vc instance start llm-wiki
95
133
  vc instance status
96
134
  ```
97
135
 
98
- 5. Verify logs:
136
+ 6. 로그를 확인합니다:
99
137
 
100
138
  ```bash
101
139
  tail -n 50 /tmp/verbalcoding-verbalcoding.log
102
140
  tail -n 50 /tmp/verbalcoding-llm-wiki.log
103
141
  ```
104
142
 
105
- Expected:
143
+ 예상 로그 줄:
106
144
 
107
145
  ```text
108
146
  Listening in voice channel ... / VerbalCoding
109
147
  Listening in voice channel ... / LLM-Wiki
110
148
  ```
111
149
 
112
- ## Short-term single-bot text/voice binding
150
+ 7. 중지합니다:
151
+
152
+ ```bash
153
+ vc instance stop verbalcoding
154
+ vc instance stop llm-wiki
155
+ ```
156
+
157
+ ## 단기 단일 봇 텍스트/음성 바인딩
158
+
159
+ 봇 토큰이 하나뿐이라면 동시 다중 채널 상주 대신 프로젝트 세션 음성 바인딩을 사용하세요.
113
160
 
114
- If you only have one bot token, bind a project session to a voice channel instead of simultaneous residency:
161
+ 대상 텍스트 채널/스레드에서 다음을 실행합니다:
115
162
 
116
163
  ```text
117
164
  !session attach-voice --voice "LLM-Wiki"
165
+ ```
166
+
167
+ 동작:
168
+
169
+ - 선택한 음성 채널을 현재 텍스트 채널/스레드에 바인딩합니다.
170
+ - 현재 텍스트 채널에 프로젝트 세션이 없으면 임시 격리 세션을 만듭니다.
171
+ - 음성 STT/결과/진행/최종 답변 텍스트가 해당 활성 프로젝트 전사 대상으로 라우팅됩니다.
172
+
173
+ 기존 이름 있는 프로젝트 세션을 연결하려면:
174
+
175
+ ```text
118
176
  !session voice llm-wiki --voice "LLM-Wiki"
119
177
  ```
120
178
 
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.
179
+ 이는 라우팅에는 편리하지만, 하나의 봇을 음성 채널에 동시에 머물게 하지는 않습니다. 동시 영구 상주에는 여러 토큰/프로세스를 사용하세요.
@@ -1,14 +1,14 @@
1
- # VerbalCoding Мульти-инстансы
1
+ # Многоэкземплярный VerbalCoding
2
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.
3
+ VerbalCoding может запускать несколько независимых процессов голосового bridge Discord. Каждый процесс всё ещё является существующим одноэкземплярным Node bridge, но загружает другой файл `instances/<name>.env` и использует другой токен Discord-бота.
4
4
 
5
- Use this when each project should permanently occupy its own Discord voice channel and write to its own transcript channel/thread.
5
+ Используйте это, когда каждый проект должен постоянно занимать собственный голосовой канал Discord и писать в собственный канал/тред расшифровок.
6
6
 
7
- ## Why multiple bot tokens are required
7
+ ## Почему требуется несколько токенов ботов
8
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.
9
+ Присутствие в голосе Discord фактически ограничено одним активным голосовым подключением на аккаунт бота в пределах guild. Если один токен бота подключается к другому голосовому каналу в той же guild, он не может одновременно оставаться постоянно подключённым к предыдущему каналу. Для одновременных проектных комнат создавайте по одному приложению/боту Discord на проект.
10
10
 
11
- ## File layout
11
+ ## Структура файлов
12
12
 
13
13
  ```text
14
14
  instances/
@@ -20,31 +20,45 @@ instances/
20
20
  llm-wiki.pid # runtime only, ignored by git
21
21
  ```
22
22
 
23
- Real `instances/*.env` files are ignored because they may contain Discord tokens.
23
+ Настоящие файлы `instances/*.env` игнорируются, потому что могут содержать токены Discord. `instances/example.env` — закоммиченный шаблон.
24
24
 
25
- ## Instance setup wizard
25
+ ## Мастер настройки экземпляра
26
+
27
+ Пользователям не следует копировать и вручную редактировать env-файлы для обычного использования. Вместо этого запустите мастер:
26
28
 
27
29
  ```bash
28
30
  vc instance setup llm-wiki
31
+ # or through the project setup script:
29
32
  ./scripts/install.sh --instance llm-wiki
30
33
  ```
31
34
 
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.
35
+ Мастер запрашивает токен бота, Discord Application/Client ID, голосовой канал, цель расшифровок, workdir, контекст проекта и изолированные runtime-пути. Он записывает `instances/<name>.env` с режимом `0600`, создаёт резервную копию существующего файла перед перезаписью и печатает следующие команды start/status.
33
36
 
34
- Generate invite URLs with:
37
+ Если во время настройки вы введёте Discord Application/Client ID, сводка также напечатает URL приглашения для этого бота. Тот же URL можно сгенерировать в любое время:
35
38
 
36
39
  ```bash
37
40
  vc bot invite <client-id>
38
41
  vc bot invite <client-id> --guild <guild-id>
39
42
  ```
40
43
 
41
- ## Hermes profile isolation
44
+ Discord всё равно требует одно приложение/бота Developer Portal на каждую одновременную голосовую комнату, но это избавляет от ручной сборки OAuth URL или целых чисел разрешений.
45
+
46
+ ### Изоляция профилей Hermes
47
+
48
+ Каждый экземпляр получает собственный home Hermes в `~/.hermes/profiles/<name>`, чтобы память, MEMORY.md, SOUL.md и изученные skills не перетекали между проектами.
49
+
50
+ `vc instance setup <name>` автоматически:
42
51
 
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.
52
+ - запускает `hermes profile create <name> --clone-from default` (переносит API-ключи и модель из текущего `~/.hermes`; сессии и память начинаются заново),
53
+ - задаёт `terminal.cwd` нового профиля в workdir экземпляра,
54
+ - заполняет `<profile>/SOUL.md` из ответа мастеру о контексте проекта,
55
+ - записывает `HERMES_HOME=...` в `instances/<name>.env`.
44
56
 
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}$`.
57
+ `vc instance start <name>` самовосстанавливается: если env указывает на директорию профиля Hermes, которой больше нет, команда start пересоздаёт её перед запуском.
46
58
 
47
- ## Minimal generated instance env
59
+ Имена экземпляров должны соответствовать `^[a-z0-9][a-z0-9_-]{0,63}$`, потому что Hermes использует имя как директорию и ключ конфигурации.
60
+
61
+ ## Минимальный сгенерированный env экземпляра
48
62
 
49
63
  ```env
50
64
  INSTANCE_NAME=my-project
@@ -62,9 +76,9 @@ AGENT_CWD=/path/to/my-project
62
76
  AGENT_PROJECT_CONTEXT=Project session: My Project
63
77
  ```
64
78
 
65
- `vc doctor` checks duplicate tokens, colliding runtime paths, missing profile directories, and `terminal.cwd` mismatches without printing secrets.
79
+ Дайте каждому экземпляру уникальные значения для файлов логов/debug/session. `HERMES_HOME` и соответствующая директория `~/.hermes/profiles/<name>` создаются автоматически командой `vc instance setup`. `vc doctor` проверяет повторяющиеся токены, конфликтующие runtime-пути, отсутствующие директории профилей и несоответствия `terminal.cwd` между профилем и экземпляром — всё это без печати секретов.
66
80
 
67
- ## Commands
81
+ ## Команды
68
82
 
69
83
  ```bash
70
84
  vc instance list
@@ -75,47 +89,91 @@ vc instance stop my-project
75
89
  vc instance restart my-project
76
90
  ```
77
91
 
78
- ## Example: two permanent voice rooms
92
+ `start` запускает `./run.sh instances/<name>.env` в detached-режиме и записывает `.run/instances/<name>.pid`.
93
+
94
+ `stop` отправляет `SIGTERM`, ждёт до 10 секунд, затем откатывается к `SIGKILL` и удаляет pid-файл.
95
+
96
+ ## Пример: две постоянные голосовые комнаты
79
97
 
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:
98
+ 1. Создайте два приложения/бота Discord:
99
+ - бот VerbalCoding
100
+ - бот LLM-Wiki
101
+
102
+ 2. Пригласите обоих на сервер с текстовыми и голосовыми разрешениями:
103
+ - Просмотр канала
104
+ - Отправка сообщений
105
+ - Отправка сообщений в тредах
106
+ - Чтение истории сообщений
107
+ - Использование команд приложения
108
+ - Подключение
109
+ - Речь
110
+
111
+ Используйте `vc bot invite <client-id>` после создания каждого приложения Discord, чтобы напечатать точный URL приглашения с этими разрешениями.
112
+
113
+ 3. Запустите мастер настройки для каждого локального экземпляра:
83
114
 
84
115
  ```bash
85
116
  vc instance setup verbalcoding
86
117
  vc instance setup llm-wiki
87
118
  ```
88
119
 
89
- 4. Check and start:
120
+ Мастер записывает игнорируемые файлы `instances/verbalcoding.env` и `instances/llm-wiki.env` с режимом `0600`; он также создаёт резервную копию существующего env экземпляра перед заменой. Каждый запуск также создаёт `~/.hermes/profiles/<name>`, клонированный из вашего стандартного Hermes home, поэтому два экземпляра стартуют с одинаковой аутентификацией/моделью, но накапливают независимую память и skills по мере изучения каждого проекта.
121
+
122
+ 4. Проверьте конфигурацию:
90
123
 
91
124
  ```bash
92
125
  vc doctor
126
+ ```
127
+
128
+ 5. Запустите оба:
129
+
130
+ ```bash
93
131
  vc instance start verbalcoding
94
132
  vc instance start llm-wiki
95
133
  vc instance status
96
134
  ```
97
135
 
98
- 5. Verify logs:
136
+ 6. Проверьте логи:
99
137
 
100
138
  ```bash
101
139
  tail -n 50 /tmp/verbalcoding-verbalcoding.log
102
140
  tail -n 50 /tmp/verbalcoding-llm-wiki.log
103
141
  ```
104
142
 
105
- Expected:
143
+ Ожидаемые строки логов:
106
144
 
107
145
  ```text
108
146
  Listening in voice channel ... / VerbalCoding
109
147
  Listening in voice channel ... / LLM-Wiki
110
148
  ```
111
149
 
112
- ## Short-term single-bot text/voice binding
150
+ 7. Остановите оба:
151
+
152
+ ```bash
153
+ vc instance stop verbalcoding
154
+ vc instance stop llm-wiki
155
+ ```
156
+
157
+ ## Краткосрочная привязка текста/голоса с одним ботом
158
+
159
+ Если у вас есть только один токен бота, используйте привязку голоса проектной сессии вместо одновременного присутствия в нескольких каналах.
113
160
 
114
- If you only have one bot token, bind a project session to a voice channel instead of simultaneous residency:
161
+ Выполните это в целевом текстовом канале/треде:
115
162
 
116
163
  ```text
117
164
  !session attach-voice --voice "LLM-Wiki"
165
+ ```
166
+
167
+ Поведение:
168
+
169
+ - Привязывает выбранный голосовой канал к текущему текстовому каналу/треду.
170
+ - Если в текущем текстовом канале нет проектной сессии, создаёт ad-hoc изолированную сессию.
171
+ - Текст voice STT/result/progress/final-answer направляется в активную цель расшифровок проекта.
172
+
173
+ Чтобы привязать существующую именованную проектную сессию:
174
+
175
+ ```text
118
176
  !session voice llm-wiki --voice "LLM-Wiki"
119
177
  ```
120
178
 
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.
179
+ Это удобно для маршрутизации, но не заставляет одного бота одновременно оставаться в двух голосовых каналах. Для одновременного постоянного присутствия используйте несколько токенов/процессов ботов.