[2026-06-15] taiga-vault: personal/projects/balda/balda-valera.md personal/projects/balda/claudio-klaudiy.md
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
# Балда / Валера — эксплуатация
|
||||
|
||||
## Расположение
|
||||
- Repo: `~/Developer/balda/`
|
||||
- **Рабочий compose**: `~/Docker/balda-agent/docker-compose.yaml` → контейнер `balda-agent-valera-1`
|
||||
- Config (persistent): `~/Docker/balda-agent/.config/balda/config.yaml`
|
||||
- Env: `~/Docker/balda-agent/.env`
|
||||
- Дублирующий compose `~/Developer/balda/compose.valera.yaml` — НЕ использовать (сеть `balda_default` без DNS)
|
||||
|
||||
## Запуск / рестарт
|
||||
```bash
|
||||
cd ~/Docker/balda-agent
|
||||
docker-compose restart
|
||||
|
||||
# Rebuild после изменений в коде:
|
||||
docker-compose build && docker-compose up -d
|
||||
```
|
||||
|
||||
## Архитектура получения сообщений
|
||||
Валера — **outgoing webhook bot** (bot_type=3). Zulip отправляет webhook только для @mention и DM.
|
||||
|
||||
Для получения всех сообщений в теме — Events API polling (горутина в коде):
|
||||
- `events_polling.enabled: true` в config.yaml
|
||||
- Очередь регистрируется с `all_public_streams=true`
|
||||
- Бот подписывается на все публичные стримы при старте (`SubscribeToPublicStreams`)
|
||||
- После @mention создаётся сессия; последующие сообщения без @mention обрабатываются
|
||||
|
||||
**После перезапуска**: нужно один раз написать `@Валера <текст>` чтобы создать сессию в теме.
|
||||
|
||||
## Диагностика молчания
|
||||
1. Проверить логи: `docker logs balda-agent-valera-1 --tail 50`
|
||||
2. Проверить что Events API polling запустился: `zulip events queue registered` в логах
|
||||
3. Стухший NATS-таск (симптом: логов нет после @mention)
|
||||
Фикс: `docker-compose restart` (NATS embedded, состояние в памяти)
|
||||
4. Бот не подписан на стримы (симптом: `processing zulip message trigger=stream` не появляется):
|
||||
```bash
|
||||
curl -u "<bot_email>:<api_key>" https://zulip.qentra.top/api/v1/users/me/subscriptions
|
||||
```
|
||||
Если пустой — должен подписаться при следующем старте. Или вручную через API.
|
||||
|
||||
## Патчи в коде (общие с Клавдием)
|
||||
|
||||
В `zulip_handler.go` добавлены:
|
||||
1. `botName` — извлекается из bot_email (часть до @). Используется чтобы отличить свой @mention от чужого.
|
||||
2. `extractOtherMention()` — проверяет текст на @**Name**, где Name не равен botName и не @**all**/@**everyone**. Если найден чужой @mention — сообщение игнорируется.
|
||||
3. Детальное логирование в `handleAutoClaimMention` — видны все шаги от входа до ошибки.
|
||||
|
||||
## Конфигурация провайдера
|
||||
В `config.yaml` обязательно:
|
||||
```yaml
|
||||
balda:
|
||||
provider: deepseek
|
||||
zulip:
|
||||
events_polling:
|
||||
enabled: true
|
||||
stream_only_with_session: true
|
||||
runtime:
|
||||
providers:
|
||||
deepseek:
|
||||
openai:
|
||||
base_url: https://api.deepseek.com/v1
|
||||
```
|
||||
@@ -0,0 +1,51 @@
|
||||
# Клавдий (Claudio) — эксплуатация
|
||||
|
||||
## Расположение
|
||||
|
||||
| Item | Value |
|
||||
|------|-------|
|
||||
| Repo | `~/Developer/balda/` (один код с Валерой) |
|
||||
| Compose | `~/Docker/claudio-agent/docker-compose.yaml` → контейнер `claudio-agent-claudio-1` |
|
||||
| Config | `~/Docker/claudio-agent/.config/balda/config.yaml` |
|
||||
| Env | `~/Docker/claudio-agent/.env` |
|
||||
| Dockerfile | `~/Docker/claudio-agent/Dockerfile.claudio` |
|
||||
|
||||
## Запуск / рестарт
|
||||
|
||||
```bash
|
||||
cd ~/Docker/claudio-agent
|
||||
docker-compose restart # без пересборки
|
||||
docker-compose build && docker-compose up -d # после изменений в коде
|
||||
```
|
||||
|
||||
## Архитектура получения сообщений
|
||||
|
||||
Клавдий — **outgoing webhook bot** (bot_type=3). Zulip отправляет webhook только для @mention и DM.
|
||||
|
||||
Для получения всех сообщений в теме — **Events API polling**:
|
||||
- Подписан на все публичные стримы при старте
|
||||
- После @mention создаётся сессия; последующие сообщения без @mention обрабатываются
|
||||
|
||||
## Отличие от Валеры
|
||||
|
||||
- **Провайдер**: `claude` (claude-sonnet-4-6) через Claude Proxy (контейнер, порт 3457)
|
||||
- **Порт webhook**: 8092 (у Валеры 8091)
|
||||
- **База**: отдельная SQLite (NATS embedded)
|
||||
|
||||
## Проблемы и решения
|
||||
|
||||
### Валера отвечал вместо Клавдия на @mention
|
||||
|
||||
**Причина**: у Валеры в `allowed_owners` был `admin@zulip.local` (реальный email юзера), а у Клавдия — `amartemyanov@duckduckgo.com` (не совпадает). `isAllowedOwner` возвращал false.
|
||||
|
||||
**Решение**: добавлен `admin@zulip.local` в allowed_owners Клавдия.
|
||||
|
||||
### Валера отвечал на @mention других ботов (через Events API)
|
||||
|
||||
**Причина**: оба бота подписаны на Events API с `all_public_streams=true`. Когда кто-то писал `@Клавдий`, Валера получал это сообщение через Events API и, имея активную сессию в том же треде, отвечал.
|
||||
|
||||
**Решение**: пропатчен `zulip_handler.go` — добавлена проверка `extractOtherMention()`: если сообщение со стрима содержит @mention другого бота, игнорировать.
|
||||
|
||||
### При первом запуске не отвечает на @mention
|
||||
|
||||
Нужен `/start owner=<token>` в DM. Токен генерируется при первом старте и пишется в лог: `docker logs claudio-agent-claudio-1 | grep -i owner`
|
||||
Reference in New Issue
Block a user