# 2026-05-14 — Claude CLI Proxy + TRI max-aggregation ## Claude CLI Proxy — ГОТОВО ✅ ### Что сделано - **Проект:** `tasks/claude-cli-proxy/` (BRD, DEV_TASK, PROJECT.md) - **Суть:** CLIProxyAPI (Go, open-source) оборачивает Claude Code CLI в OpenAI-compatible API - **Деплой:** Docker контейнер `claude-cli-proxy` на mva154 (82.22.50.71) - **OAuth:** авторизован через Max 5x подписку Славы (claude-homenet542@gmail.com) - **Сеть:** `openclaw_openclaw-network`, доступен из `openclaw-gateway` по имени `claude-cli-proxy:8317` - **Порт:** 127.0.0.1:8317 (не наружу) ### OpenClaw интеграция - Provider `claude-cli-proxy` добавлен в `openclaw.json` - Dev-агент переключен на `claude-cli-proxy/claude-sonnet-4-20250514` - Доступные модели: sonnet-4, sonnet-4-6, opus-4, opus-4-7, opus-4-6, haiku-4-5 - Gateway перечитал конфиг (SIGHUP) ### Лимиты - Max 5x: ~50-200 промптов/5ч окно - ⚠️ С 15.06.2026 — Agent SDK credit отдельный (детали TBD) ### Переавторизация (если токен протухнет) 1. `docker compose down` 2. `docker run --rm -it -p 54545:54545 -v $(pwd)/auth:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --claude-login --no-browser` 3. SSH туннель + открыть URL в браузере 4. `docker compose up -d` --- ## TRI тайлы — max-агрегация для мелких зумов ✅ ### Проблема На мелких зумах (5-8) вся карта TRI жёлтая — bilinear resampling усредняет значения. ### Решение Python max-pool (factor=10) на raw TRI single-band → colorize → tile. GDAL 3.4 не поддерживает `-r max`, поэтому numpy. ### Результат - Zoom 5: 6 тайлов, все непустые, 52% visible — преобладает оранжевый/красный - Zoom 6-8: контраст есть, плоские участки прозрачные - Zoom 10-12: full-res, без изменений - Общий размер: 520M ### Ждём фидбек Славы Нужно подтверждение что на карте теперь видно где холмисто. ## CLIProxyAPI — дебаг и фикс (14.05.2026) ### Проблема Dev-агент не мог работать через `claude-cli-proxy/claude-sonnet-4-6` — получал "FailoverError: network connection error". При этом curl из того же контейнера работал. ### Корневая причина `HTTP_PROXY=http://xray:10809` и `HTTPS_PROXY=http://xray:10809` в environment контейнера openclaw-gateway направляли ВСЕ HTTP-запросы через Xray прокси. Xray не мог зарезолвить внутренний docker hostname `claude-cli-proxy` → connection error. curl работал потому что обрабатывает прокси иначе для внутренних хостов. ### Фикс 1. Добавлен `NO_PROXY=claude-cli-proxy,localhost,127.0.0.1,172.19.0.0/24` в `/home/slin/openclaw/docker-compose.yml` 2. Убран `reasoning: true` из всех моделей cli-proxy в openclaw.json (парсер не извлекал content) 3. Пересоздан контейнер: `docker compose up -d openclaw-gateway` ### Конфиг провайдера (рабочий) ```json "claude-cli-proxy": { "baseUrl": "http://claude-cli-proxy:8317/v1", "apiKey": "dummy", "api": "openai-completions", "models": [...] // без reasoning:true } ``` ### Уроки - SIGHUP НЕ перечитывает конфигурацию провайдеров (models.providers) — нужен полный рестарт - HTTP_PROXY влияет на Node.js HTTP клиент для ВСЕХ запросов, включая внутренние docker - NO_PROXY обязателен для внутренних сервисов в docker network - CLIProxyAPI поддерживает и OpenAI формат, и нативный Anthropic Messages API # 2026-05-14 — Claude CLI Proxy + TRI max-aggregation ## Claude CLI Proxy — ГОТОВО ✅ ### Что сделано - **Проект:** `tasks/claude-cli-proxy/` (BRD, DEV_TASK, PROJECT.md) - **Суть:** CLIProxyAPI (Go, open-source) оборачивает Claude Code CLI в OpenAI-compatible API - **Деплой:** Docker контейнер `claude-cli-proxy` на mva154 (82.22.50.71) - **OAuth:** авторизован через Max 5x подписку Славы (claude-homenet542@gmail.com) - **Сеть:** `openclaw_openclaw-network`, доступен из `openclaw-gateway` по имени `claude-cli-proxy:8317` - **Порт:** 127.0.0.1:8317 (не наружу) ### OpenClaw интеграция - Provider `claude-cli-proxy` добавлен в `openclaw.json` - Dev-агент переключен на `claude-cli-proxy/claude-sonnet-4-6` - Доступные модели: sonnet-4, sonnet-4-6, opus-4, opus-4-7, opus-4-6, haiku-4-5 - Gateway перечитал конфиг (SIGHUP) ### Лимиты - Max 5x: ~50-200 промптов/5ч окно - ⚠️ С 15.06.2026 — Agent SDK credit отдельный (детали TBD) ### Переавторизация (если токен протухнет) 1. `docker compose down` 2. `docker run --rm -it -p 54545:54545 -v $(pwd)/auth:/root/.cli-proxy-api eceasy/cli-proxy-api:latest /CLIProxyAPI/CLIProxyAPI --claude-login --no-browser` 3. SSH туннель + открыть URL в браузере 4. `docker compose up -d` --- ## TRI тайлы — max-агрегация для мелких зумов ✅ ### Проблема На мелких зумах (5-8) вся карта TRI жёлтая — bilinear resampling усредняет значения. ### Решение Python max-pool (factor=10) на raw TRI single-band → colorize → tile. GDAL 3.4 не поддерживает `-r max`, поэтому numpy. ### Результат - Zoom 5: 6 тайлов, все непустые, 52% visible — преобладает оранжевый/красный - Zoom 6-8: контраст есть, плоские участки прозрачные - Zoom 10-12: full-res, без изменений - Общий размер: 520M ### Ждём фидбек Славы Нужно подтверждение что на карте теперь видно где холмисто. ## CLIProxyAPI — дебаг и фикс (14.05.2026) ### Проблема Dev-агент не мог работать через `claude-cli-proxy/claude-sonnet-4-6` — получал "FailoverError: network connection error". При этом curl из того же контейнера работал. ### Корневая причина `HTTP_PROXY=http://xray:10809` и `HTTPS_PROXY=http://xray:10809` в environment контейнера openclaw-gateway направляли ВСЕ HTTP-запросы через Xray прокси. Xray не мог зарезолвить внутренний docker hostname `claude-cli-proxy` → connection error. curl работал потому что обрабатывает прокси иначе для внутренних хостов. ### Фикс 1. Добавлен `NO_PROXY=claude-cli-proxy,localhost,127.0.0.1,172.19.0.0/24` в `/home/slin/openclaw/docker-compose.yml` 2. Убран `reasoning: true` из всех моделей cli-proxy в openclaw.json (парсер не извлекал content) 3. Пересоздан контейнер: `docker compose up -d openclaw-gateway` ### Конфиг провайдера (рабочий) ```json "claude-cli-proxy": { "baseUrl": "http://claude-cli-proxy:8317/v1", "apiKey": "dummy", "api": "openai-completions", "models": [...] // без reasoning:true } ``` ### Уроки - SIGHUP НЕ перечитывает конфигурацию провайдеров (models.providers) — нужен полный рестарт - HTTP_PROXY влияет на Node.js HTTP клиент для ВСЕХ запросов, включая внутренние docker - NO_PROXY обязателен для внутренних сервисов в docker network - CLIProxyAPI поддерживает и OpenAI формат, и нативный Anthropic Messages API --- ## CLIProxyAPI — проблема cloaking + rate limit (14.05.2026) ### Проблема 2: System prompt не доходит до модели После фикса NO_PROXY запросы доходят, но Dev-агент отвечает "I don't see a Your Role section" — CLIProxyAPI инжектит system prompt Claude Code поверх нашего (cloaking). ### Попытка фикса: anthropic-messages API - Переключил `api: "anthropic-messages"`, `baseUrl: http://claude-cli-proxy:8317` (без /v1) - Добавил `User-Agent: claude-cli/2.1.44` header для bypass cloaking - Результат: запрос дошёл до Anthropic, но получил **429 rate limit** ### Открытие: два разных rate limit bucket'а - `/v1/chat/completions` (OpenAI формат) → идёт через Claude Code CLI → тот же bucket что у Славы в терминале → **работает** - `/v1/messages` (Anthropic формат) → идёт напрямую в Messages API → **отдельный rate limit** → 429 ### Текущий статус - `api: "openai-completions"` работает без rate limit, но cloaking затирает system prompt - `api: "anthropic-messages"` обходит cloaking, но попадает в rate limit - CLIProxyAPI v7.0.6 не имеет опции отключить cloaking (PR #3328, #2709 не смержены) ### Варианты решения 1. Обновить CLIProxyAPI до latest (может PR уже в main) 2. Добавить `"cloak": "passthrough"` в auth JSON (если поддерживается) 3. Использовать openai-completions + жить с cloaking (system prompt частично работает) 4. Fallback на vibecode для Dev-агента (текущий workaround) ### Текущий workaround Dev-агент работает на `vibecode/claude-sonnet-4.6` — стабильно, без проблем. --- ## Enduro Trails — UI улучшения ✅ ### Что сделано (через Dev-агента на vibecode/claude-sonnet-4.6) 1. **Zoom-индикатор** — в правом верхнем углу, `z12` 2. **Масштабная линейка** — перенесена в правый верхний угол 3. **Кнопка Поиск (🔍)** — в тулбаре, Nominatim geocoding, центрирование карты 4. **Объединение zoom + scale** — `z7 · 30 км` в одну строку 5. **Возврат ScaleControl** — линейка под текстом 6. **Финальная переделка** — одна строка: линейка с расстоянием внутри + номер зума справа (`[——— 30 km ———] z10`) ### UI тесты - Написаны тест-кейсы: `tasks/enduro-trails/TEST_CASES_UI_SEARCH.md` (11 тестов) - Результат: 8 PASS, 2 FAIL (кнопка ✕ не видна), 1 flaky - Отчёт: `tasks/enduro-trails/reports/ui-search/report.md` ### Баг: кнопка ✕ закрытия поиска не видна - Цвет сливается с тёмной темой - Нужно сделать контрастнее/крупнее - Не критично — панель закрывается повторным кликом на "Поиск"