365 lines
21 KiB
Markdown
365 lines
21 KiB
Markdown
# 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`
|
||
|
||
### Баг: кнопка ✕ закрытия поиска не видна
|
||
- Цвет сливается с тёмной темой
|
||
- Нужно сделать контрастнее/крупнее
|
||
- Не критично — панель закрывается повторным кликом на "Поиск"
|
||
# 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`
|
||
|
||
### Баг: кнопка ✕ закрытия поиска не видна
|
||
- Цвет сливается с тёмной темой
|
||
- Нужно сделать контрастнее/крупнее
|
||
- Не критично — панель закрывается повторным кликом на "Поиск"
|
||
|
||
---
|
||
|
||
## Мультиагентная разработка — BRD (14-15.05.2026)
|
||
|
||
### Контекст
|
||
Слава дал папку `tasks/multi-agent/proposal_v1/` — 10 файлов с полной спецификацией мультиагентной системы разработки ПО. Задача: подготовить BRD.
|
||
|
||
### Решения
|
||
- **Orchestrator = детерминированный скрипт (FastAPI)**, не LLM. Чистая логика "если X → Y".
|
||
- **Стрим = Analyst** (пишет BRD/ТЗ, координирует со Славой). НЕ оркестратор.
|
||
- **Claude Code CLI на mva154** = исполнители (Architect, Developer, Reviewer, Tester)
|
||
- **Plane** = витрина для Славы (webhooks → Orchestrator)
|
||
- **Gitea** = source of truth + CI (Gitea Actions)
|
||
- Architect и Tester — обязательны (Слава подтвердил)
|
||
- Designer — вне скоупа пилота
|
||
|
||
### BRD создан
|
||
- Файл: `tasks/multi-agent/BRD.md`
|
||
- Статус: draft, дополнен по 10 расхождениям с proposal
|
||
- Добавлены секции: структура репо, CLAUDE.md, формат запуска агентов, back-to, эскалация, идемпотентность/очередь, service account, webhook-события, tester scope
|
||
- Пилотный проект: Enduro Trails
|
||
- План: 3 недели (инфра → orchestrator → пилот)
|
||
|
||
### Открытые вопросы
|
||
- Node.js на mva154 — нужно ставить
|
||
- Claude Code CLI — нужно ставить и авторизовать
|
||
- Gitea Actions runner — проверить
|
||
- Plane webhooks — настроить
|