Files
knowledge-base/claude-memory/cliproxy_code_server.md

58 lines
4.6 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.
---
name: CLIProxy на code-server (10.0.0.179)
description: Claude Code использует CLIProxy OAuth — процедура обновления токена при протухании
type: project
---
Claude Code на code-server (LXC 132, IP 10.0.0.179) работает через локальный CLIProxy (порт 8317, cliproxy.service).
**Проблема:** OAuth токен (batlaew@gmail.com) протухает каждые ~8 часов. CLIProxy может не обновить refresh_token автоматически → клиент переходит в suspended → Claude Code перестаёт работать.
**Why:** CLIProxy использует OAuth через claude.ai, а не прямой API. Это бесплатно (подписка Pro), но требует периодического обновления токена.
## Процедура обновления токена
1. Остановить сервис: `systemctl stop cliproxy.service`
2. Запустить логин: `/usr/local/bin/cli-proxy-api -config /root/.cli-proxy-api/config.yaml -claude-login -no-browser`
3. CLIProxy покажет URL для SSH-туннеля и ссылку авторизации
4. На локальной машине сделать SSH-туннель: `ssh -L 54545:127.0.0.1:54545 root@202.71.12.186`
5. Открыть ссылку авторизации в браузере, залогиниться batlaew@gmail.com
6. После callback — токен обновится в `/root/.cli-proxy-api/claude-batlaew@gmail.com.json`
7. Запустить сервис: `systemctl start cliproxy.service`
## Конфигурация
- settings.json: `apiBaseUrl: http://localhost:8317`, `apiKey: sk-cliproxyapi-local`
- Env: `ANTHROPIC_BASE_URL=http://localhost:8317`
- Токен файл: `/root/.cli-proxy-api/claude-batlaew@gmail.com.json`
- API keys в config.yaml: `sk-clawdbot-proxy`, `sk-f4ab6903a58a4cb4b2b453ae2bbf2c6e`
## Альтернатива (fallback)
Прямой API: ключ `ANTHROPIC_API_KEY=sk-ant-api03-vMW...` доступен в env. Для переключения: в settings.json поменять apiBaseUrl на `https://api.anthropic.com` и apiKey на прямой ключ. Но это платно.
## TODO
- Выяснить, почему auto-refresh не срабатывает (проверить после следующего протухания)
- Рассмотреть cron для принудительного рефреша до истечения токена
## Update 2026-05-06 — два разных CLIProxy-механизма
После audit'а (см. [[../decisions/2026-05-06-openclaw-opus-4-7-via-max-cliproxy]]) выяснилось:
1. **Standalone `cliproxy.service` на порту 8317** — описан выше, OAuth `batlaew@gmail.com` (Pro), auto-refresh ломается. Сейчас используется только legacy ботами (NIIKN 133, Знам 134), которым ещё не выдан прямой API ключ. Когда мигрируют — service выключить.
2. **Встроенный CLIProxy-модуль OmniRoute** (через `cc/*` модели) — **другой mechanism**. Использует Max-подписку Олега, OAuth flow через `claude-cli/1.0.83` user-agent. У OmniRoute есть **HealthCheck loop** (`/root/.npm/_npx/cb5891f90ae65d14/node_modules/omniroute/app`) который **проактивно** refresh'ит токены до их истечения — видно в `journalctl -u omniroute`:
```
[HealthCheck] Refreshing gemini-cli/... (token expiring soon)
[HealthCheck] [TOKEN_REFRESH] Successfully refreshed Google token
[HealthCheck] Refreshing antigravity/... (token expiring soon)
[HealthCheck] [TOKEN_REFRESH] Successfully refreshed Google token
[HealthCheck] Refreshing kiro/... (token expiring soon)
[HealthCheck] [TOKEN_REFRESH] Successfully refreshed Kiro AWS token
```
То есть проблема старого CLIProxy (8h cycle + ломаный refresh) **в OmniRoute не повторяется** — refresh работает по событию `expiring soon`.
**Где живёт state OAuth:** `/root/.omniroute/storage.sqlite` → таблица `provider_connections` (поля `access_token`, `refresh_token`, `expires_at`). 11 провайдеров активно (claude:1, antigravity:5, codex:7, kiro:5, и т.д.).
**Мониторинг здоровья cc/* для openclaw** — см. [[../snippets/omniroute-models-audit]] (smoke test шаблоны и интерпретация ошибок).