Files
wiki/memory/2026-05-14.md
2026-05-15 01:30:01 +03:00

365 lines
21 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 — настроить