77 lines
3.6 KiB
Markdown
77 lines
3.6 KiB
Markdown
# Клавдий (Claudio) — эксплуатация
|
||
|
||
## Расположение
|
||
|
||
| Item | Value |
|
||
|------|-------|
|
||
| Repo | `~/Developer/balda/` (один код с Валерой) |
|
||
| Ветка | `main` |
|
||
| 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` |
|
||
| Образ | `claudio-agent-claudio` (тагается как `balda-agent-valera` для Валеры) |
|
||
|
||
## Запуск / рестарт
|
||
|
||
```bash
|
||
cd ~/Docker/claudio-agent
|
||
docker-compose restart # без пересборки
|
||
docker-compose up -d # пересоздать контейнер
|
||
|
||
# Rebuild после изменений в коде:
|
||
cd ~/Docker/claudio-agent && docker-compose build
|
||
docker tag claudio-agent-claudio:latest balda-agent-valera:latest
|
||
cd ~/Docker/claudio-agent && docker-compose up -d
|
||
cd ~/Docker/balda-agent && docker-compose up -d
|
||
```
|
||
|
||
> Валера и Клавдий — **один код и один образ** (`claudio-agent-claudio` → `balda-agent-valera`). Разница только в конфиге, `.env` и порте webhook (8091 vs 8092). Сборка всегда из `~/Docker/claudio-agent/`.
|
||
|
||
## Архитектура получения сообщений
|
||
|
||
Клавдий — **outgoing webhook bot** (bot_type=3). Zulip отправляет webhook только для @mention и DM.
|
||
|
||
## Отличие от Валеры
|
||
|
||
- **Провайдер**: `claude` (claude-sonnet-4-6) через Claude Proxy (контейнер, порт 3457)
|
||
- **Порт webhook**: 8092 (у Валеры 8091)
|
||
- **База**: отдельная SQLite (NATS embedded)
|
||
|
||
## MCP Obsidian — конфиг
|
||
Аналогично Валере — URL обязательно с `/sse`:
|
||
```yaml
|
||
runtime:
|
||
mcp_servers:
|
||
obsidian:
|
||
type: sse
|
||
url: http://obsidian-mcp:3101/sse
|
||
name: obsidian
|
||
```
|
||
|
||
## Проблемы и решения
|
||
|
||
### Валера отвечал вместо Клавдия на @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
|
||
|
||
Если после запуска не отвечает на @mention — проверить в config.yaml `allowed_owners`:
|
||
```yaml
|
||
zulip:
|
||
allowed_owners:
|
||
- admin@zulip.local
|
||
```
|
||
Owner'ы прописаны в config.yaml статически, команда `/start owner=<token>` не нужна.
|
||
|
||
При необходимости — пересоздать контейнер: `docker-compose up -d`
|