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.
- package/README.md +12 -27
- package/app-node/cli_install.test.mjs +32 -0
- package/app-node/install_config.mjs +10 -0
- package/docs/FRESH_INSTALL.md +8 -2
- package/docs/assets/figures/verbalcoding-flow.svg +45 -30
- package/docs/i18n/CONFIGURATION.es.md +138 -49
- package/docs/i18n/CONFIGURATION.fr.md +138 -49
- package/docs/i18n/CONFIGURATION.ja.md +137 -48
- package/docs/i18n/CONFIGURATION.ko.md +137 -48
- package/docs/i18n/CONFIGURATION.ru.md +138 -49
- package/docs/i18n/CONFIGURATION.zh.md +137 -48
- package/docs/i18n/FRESH_INSTALL.es.md +115 -32
- package/docs/i18n/FRESH_INSTALL.fr.md +115 -32
- package/docs/i18n/FRESH_INSTALL.ja.md +119 -36
- package/docs/i18n/FRESH_INSTALL.ko.md +120 -37
- package/docs/i18n/FRESH_INSTALL.ru.md +115 -32
- package/docs/i18n/FRESH_INSTALL.zh.md +119 -36
- package/docs/i18n/MULTI_INSTANCE.es.md +85 -26
- package/docs/i18n/MULTI_INSTANCE.fr.md +85 -26
- package/docs/i18n/MULTI_INSTANCE.ja.md +87 -29
- package/docs/i18n/MULTI_INSTANCE.ko.md +87 -29
- package/docs/i18n/MULTI_INSTANCE.ru.md +84 -26
- package/docs/i18n/MULTI_INSTANCE.zh.md +87 -29
- package/docs/i18n/README.es.md +109 -45
- package/docs/i18n/README.fr.md +109 -45
- package/docs/i18n/README.ja.md +109 -45
- package/docs/i18n/README.ko.md +108 -45
- package/docs/i18n/README.ru.md +109 -45
- package/docs/i18n/README.zh.md +108 -45
- package/docs/i18n/RELEASE.es.md +53 -37
- package/docs/i18n/RELEASE.fr.md +53 -37
- package/docs/i18n/RELEASE.ja.md +52 -36
- package/docs/i18n/RELEASE.ko.md +52 -36
- package/docs/i18n/RELEASE.ru.md +53 -37
- package/docs/i18n/RELEASE.zh.md +53 -37
- package/docs/i18n/USAGE.es.md +91 -64
- package/docs/i18n/USAGE.fr.md +91 -64
- package/docs/i18n/USAGE.ja.md +90 -63
- package/docs/i18n/USAGE.ko.md +90 -63
- package/docs/i18n/USAGE.ru.md +91 -64
- package/docs/i18n/USAGE.zh.md +90 -63
- package/package.json +1 -1
- package/scripts/bootstrap_prereqs.sh +15 -3
- package/scripts/cli.mjs +1 -1
- package/scripts/doctor.mjs +173 -8
- package/scripts/install.mjs +2 -0
|
@@ -1,50 +1,64 @@
|
|
|
1
|
-
# VerbalCoding
|
|
1
|
+
# マルチインスタンス VerbalCoding
|
|
2
2
|
|
|
3
|
-
VerbalCoding
|
|
3
|
+
VerbalCoding は、複数の独立した Discord 音声ブリッジプロセスを実行できます。各プロセスは既存の単一インスタンス Node ブリッジのままですが、異なる `instances/<name>.env` ファイルを読み込み、異なる Discord ボットトークンを使います。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
各プロジェクトが専用の Discord 音声チャンネルに常駐し、専用の文字起こしチャンネル/スレッドへ書き込む必要がある場合に使います。
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## 複数のボットトークンが必要な理由
|
|
8
8
|
|
|
9
|
-
Discord
|
|
9
|
+
Discord 音声の常駐は、実質的に 1 つのギルドにつき 1 ボットアカウントあたり 1 つのアクティブな音声接続です。同じギルド内で 1 つのボットトークンが別の音声チャンネルに参加すると、以前のチャンネルに同時に常駐し続けることはできません。同時に使うプロジェクトルームには、プロジェクトごとに 1 つの Discord アプリケーション/ボットを作成してください。
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## ファイルレイアウト
|
|
12
12
|
|
|
13
13
|
```text
|
|
14
14
|
instances/
|
|
15
15
|
README.md
|
|
16
16
|
example.env
|
|
17
|
-
llm-wiki.env #
|
|
18
|
-
verbalcoding.env #
|
|
17
|
+
llm-wiki.env # ローカルのみ、git で無視
|
|
18
|
+
verbalcoding.env # ローカルのみ、git で無視
|
|
19
19
|
.run/instances/
|
|
20
|
-
llm-wiki.pid #
|
|
20
|
+
llm-wiki.pid # 実行時のみ、git で無視
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
実際の `instances/*.env` ファイルは Discord トークンを含む可能性があるため無視されます。`instances/example.env` がコミット済みテンプレートです。
|
|
24
24
|
|
|
25
|
-
##
|
|
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
|
-
|
|
35
|
+
ウィザードは、ボットトークン、Discord Application/Client ID、音声チャンネル、文字起こし先、作業ディレクトリ、プロジェクトコンテキスト、分離されたランタイムパスを尋ねます。`instances/<name>.env` をモード `0600` で書き込み、上書き前に既存ファイルをバックアップし、次に使う start/status コマンドを表示します。
|
|
33
36
|
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
57
|
+
`vc instance start <name>` は自己修復します。env が指す Hermes プロファイルディレクトリが存在しない場合、起動前に再作成します。
|
|
46
58
|
|
|
47
|
-
|
|
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
|
-
`
|
|
79
|
+
各インスタンスには、ログ/デバッグ/セッションファイル用に一意の値を与えてください。`HERMES_HOME` と対応する `~/.hermes/profiles/<name>` ディレクトリは `vc instance setup` によって自動作成されます。`vc doctor` は、重複トークン、衝突するランタイムパス、存在しないプロファイルディレクトリ、プロファイルとインスタンス間の `terminal.cwd` 不一致を、秘密情報を出力せずに確認します。
|
|
66
80
|
|
|
67
|
-
##
|
|
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
|
-
|
|
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.
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
179
|
+
これはルーティングには便利ですが、1 つのボットを同時に 2 つの音声チャンネルへ常駐させるものではありません。同時に永続常駐させるには、複数のボットトークン/プロセスを使ってください。
|
|
@@ -1,50 +1,64 @@
|
|
|
1
|
-
# VerbalCoding
|
|
1
|
+
# Multi-instance VerbalCoding
|
|
2
2
|
|
|
3
|
-
VerbalCoding
|
|
3
|
+
VerbalCoding은 여러 개의 독립적인 Discord 음성 브리지 프로세스를 실행할 수 있습니다. 각 프로세스는 여전히 기존 단일 인스턴스 Node 브리지이지만, 서로 다른 `instances/<name>.env` 파일을 로드하고 서로 다른 Discord 봇 토큰을 사용합니다.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
각 프로젝트가 자체 Discord 음성 채널을 영구적으로 차지하고 자체 전사 채널/스레드에 기록해야 할 때 사용하세요.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## 여러 봇 토큰이 필요한 이유
|
|
8
8
|
|
|
9
|
-
Discord
|
|
9
|
+
Discord 음성 상주는 사실상 길드당 봇 계정 하나에 활성 음성 연결 하나입니다. 같은 길드에서 하나의 봇 토큰이 다른 음성 채널에 참가하면 이전 채널에 영구 연결된 상태를 동시에 유지할 수 없습니다. 동시에 여러 프로젝트 방을 쓰려면 프로젝트마다 Discord 애플리케이션/봇을 하나씩 만드세요.
|
|
10
10
|
|
|
11
|
-
##
|
|
11
|
+
## 파일 배치
|
|
12
12
|
|
|
13
13
|
```text
|
|
14
14
|
instances/
|
|
15
15
|
README.md
|
|
16
16
|
example.env
|
|
17
|
-
llm-wiki.env #
|
|
18
|
-
verbalcoding.env #
|
|
17
|
+
llm-wiki.env # 로컬 전용, git에서 무시됨
|
|
18
|
+
verbalcoding.env # 로컬 전용, git에서 무시됨
|
|
19
19
|
.run/instances/
|
|
20
|
-
llm-wiki.pid #
|
|
20
|
+
llm-wiki.pid # 런타임 전용, git에서 무시됨
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
실제 `instances/*.env` 파일은 Discord 토큰을 포함할 수 있으므로 무시됩니다. `instances/example.env`가 커밋된 템플릿입니다.
|
|
24
24
|
|
|
25
|
-
##
|
|
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
|
-
|
|
35
|
+
마법사는 봇 토큰, Discord Application/Client ID, 음성 채널, 전사 대상, workdir, 프로젝트 컨텍스트, 격리된 런타임 경로를 묻습니다. mode `0600`으로 `instances/<name>.env`를 작성하고, 덮어쓰기 전에 기존 파일을 백업하며, 다음 start/status 명령을 출력합니다.
|
|
33
36
|
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
57
|
+
`vc instance start <name>`은 자가 복구를 수행합니다. env가 더 이상 존재하지 않는 Hermes 프로필 디렉터리를 가리키면, 시작 명령은 실행 전에 해당 프로필을 다시 만듭니다.
|
|
46
58
|
|
|
47
|
-
|
|
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
|
|
79
|
+
모든 인스턴스에 로그/디버그/세션 파일의 고유 값을 부여하세요. `HERMES_HOME`과 일치하는 `~/.hermes/profiles/<name>` 디렉터리는 `vc instance setup`이 자동으로 만듭니다. `vc doctor`는 비밀 정보를 출력하지 않고 중복 토큰, 충돌하는 런타임 경로, 누락된 프로필 디렉터리, 프로필과 인스턴스 사이의 `terminal.cwd` 불일치를 확인합니다.
|
|
66
80
|
|
|
67
|
-
##
|
|
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
|
-
|
|
92
|
+
`start`는 `./run.sh instances/<name>.env`를 분리 실행하고 `.run/instances/<name>.pid`를 작성합니다.
|
|
93
|
+
|
|
94
|
+
`stop`은 `SIGTERM`을 보내고 최대 10초간 기다린 뒤, 필요하면 `SIGKILL`로 폴백하고 pid 파일을 제거합니다.
|
|
95
|
+
|
|
96
|
+
## 예시: 두 개의 영구 음성 방
|
|
79
97
|
|
|
80
|
-
1.
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
150
|
+
7. 둘 다 중지합니다:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
vc instance stop verbalcoding
|
|
154
|
+
vc instance stop llm-wiki
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## 단기 단일 봇 텍스트/음성 바인딩
|
|
158
|
+
|
|
159
|
+
봇 토큰이 하나뿐이라면 동시 다중 채널 상주 대신 프로젝트 세션 음성 바인딩을 사용하세요.
|
|
113
160
|
|
|
114
|
-
|
|
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
|
-
|
|
179
|
+
이는 라우팅에는 편리하지만, 하나의 봇을 두 음성 채널에 동시에 머물게 하지는 않습니다. 동시 영구 상주에는 여러 봇 토큰/프로세스를 사용하세요.
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
# VerbalCoding
|
|
1
|
+
# Многоэкземплярный VerbalCoding
|
|
2
2
|
|
|
3
|
-
VerbalCoding
|
|
3
|
+
VerbalCoding может запускать несколько независимых процессов голосового bridge Discord. Каждый процесс всё ещё является существующим одноэкземплярным Node bridge, но загружает другой файл `instances/<name>.env` и использует другой токен Discord-бота.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Используйте это, когда каждый проект должен постоянно занимать собственный голосовой канал Discord и писать в собственный канал/тред расшифровок.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Почему требуется несколько токенов ботов
|
|
8
8
|
|
|
9
|
-
Discord
|
|
9
|
+
Присутствие в голосе Discord фактически ограничено одним активным голосовым подключением на аккаунт бота в пределах guild. Если один токен бота подключается к другому голосовому каналу в той же guild, он не может одновременно оставаться постоянно подключённым к предыдущему каналу. Для одновременных проектных комнат создавайте по одному приложению/боту Discord на проект.
|
|
10
10
|
|
|
11
|
-
##
|
|
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
|
-
|
|
23
|
+
Настоящие файлы `instances/*.env` игнорируются, потому что могут содержать токены Discord. `instances/example.env` — закоммиченный шаблон.
|
|
24
24
|
|
|
25
|
-
##
|
|
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
|
-
|
|
35
|
+
Мастер запрашивает токен бота, Discord Application/Client ID, голосовой канал, цель расшифровок, workdir, контекст проекта и изолированные runtime-пути. Он записывает `instances/<name>.env` с режимом `0600`, создаёт резервную копию существующего файла перед перезаписью и печатает следующие команды start/status.
|
|
33
36
|
|
|
34
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
57
|
+
`vc instance start <name>` самовосстанавливается: если env указывает на директорию профиля Hermes, которой больше нет, команда start пересоздаёт её перед запуском.
|
|
46
58
|
|
|
47
|
-
|
|
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`
|
|
79
|
+
Дайте каждому экземпляру уникальные значения для файлов логов/debug/session. `HERMES_HOME` и соответствующая директория `~/.hermes/profiles/<name>` создаются автоматически командой `vc instance setup`. `vc doctor` проверяет повторяющиеся токены, конфликтующие runtime-пути, отсутствующие директории профилей и несоответствия `terminal.cwd` между профилем и экземпляром — всё это без печати секретов.
|
|
66
80
|
|
|
67
|
-
##
|
|
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
|
-
|
|
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.
|
|
81
|
-
|
|
82
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
150
|
+
7. Остановите оба:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
vc instance stop verbalcoding
|
|
154
|
+
vc instance stop llm-wiki
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
## Краткосрочная привязка текста/голоса с одним ботом
|
|
158
|
+
|
|
159
|
+
Если у вас есть только один токен бота, используйте привязку голоса проектной сессии вместо одновременного присутствия в нескольких каналах.
|
|
113
160
|
|
|
114
|
-
|
|
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
|
-
|
|
179
|
+
Это удобно для маршрутизации, но не заставляет одного бота одновременно оставаться в двух голосовых каналах. Для одновременного постоянного присутствия используйте несколько токенов/процессов ботов.
|