[2026-06-15] taiga-vault: family/how-to/balda-valera.md family/how-to/claudio-klaudiy.md personal/projects/personal-os/claude-wrapper-proxy.md

This commit is contained in:
Taiga
2026-06-15 14:40:25 +00:00
parent 1c79c0a2c7
commit 3f62bc4651
3 changed files with 112 additions and 0 deletions
+7
View File
@@ -38,6 +38,13 @@ docker-compose build && docker-compose up -d
```
Если пустой — должен подписаться при следующем старте. Или вручную через API.
## Патчи в коде (общие с Клавдием)
В `zulip_handler.go` добавлены:
1. `botName` — извлекается из bot_email (часть до @). Используется чтобы отличить свой @mention от чужого.
2. `extractOtherMention()` — проверяет текст на @**Name**, где Name не равен botName и не @**all**/@**everyone**. Если найден чужой @mention — сообщение игнорируется.
3. Детальное логирование в `handleAutoClaimMention` — видны все шаги от входа до ошибки.
## Конфигурация провайдера
В `config.yaml` обязательно:
```yaml
+51
View File
@@ -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`
@@ -0,0 +1,54 @@
# Claude Wrapper Proxy — Docker
## Расположение
| Item | Value |
|------|-------|
| Путь | `~/Docker/claude-wrapper-proxy/` |
| Compose | `docker-compose.yml` |
| Dockerfile | `Dockerfile` |
| Env | `.env` — содержит `CLAUDE_CODE_OAUTH_TOKEN` |
| Порт | 3457 (хостовый на 3456) |
## Основа
ChrisCross3/claude-proxy-full — самый продвинутый форк с MCP injection, Isolated mode, Caller-Dispatched Tools.
## Проблемы
### "Not logged in" при старте
**Причина**: OAuth токен expired. `~/.claude/.credentials.json` имеет `expiresAt`, который истекает. Claude CLI не может обновить через read-only volume.
**Решение**: передать `CLAUDE_CODE_OAUTH_TOKEN` в `.env`. Токен берётся из живой сессии Claude CLI или из `.hermes/.env`.
### Node.js на Alpine не отвечает на внешние запросы
**Причина**: `index.js` слушает на `127.0.0.1` внутри контейнера. Docker port mapping не перенаправляет с `0.0.0.0` на `127.0.0.1`.
**Решение**: в Dockerfile пропатчен `index.js``host` заменён с `127.0.0.1` на `0.0.0.0`.
### JsonWebTokenError при старте
**Причина**: пустой OAuth токен. Claude CLI внутри контейнера требует `CLAUDE_CODE_OAUTH_TOKEN` в env.
**Решение**: токен передан через `.env` + env_file в docker-compose.
## Сборка и запуск
```bash
cd ~/Docker/claude-wrapper-proxy
docker-compose build
docker-compose up -d
```
Проверка: `curl http://localhost:3457/v1/health` → должен вернуть `Hello.`
## Использование в Hermes
В `~/.hermes/config.yaml`:
```yaml
providers:
claude:
base_url: http://localhost:3457/v1
```