diff --git a/family/how-to/balda-valera.md b/family/how-to/balda-valera.md deleted file mode 100644 index 156125a9..00000000 --- a/family/how-to/balda-valera.md +++ /dev/null @@ -1,62 +0,0 @@ -# Балда / Валера — эксплуатация - -## Расположение -- 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 ":" 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 -``` diff --git a/family/how-to/claudio-klaudiy.md b/family/how-to/claudio-klaudiy.md deleted file mode 100644 index f0c55bad..00000000 --- a/family/how-to/claudio-klaudiy.md +++ /dev/null @@ -1,51 +0,0 @@ -# Клавдий (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=` в DM. Токен генерируется при первом старте и пишется в лог: `docker logs claudio-agent-claudio-1 | grep -i owner`