diff --git a/claude-memory/omniroute.md b/claude-memory/omniroute.md index 286f37d..0858e2d 100644 --- a/claude-memory/omniroute.md +++ b/claude-memory/omniroute.md @@ -4,20 +4,21 @@ description: OmniRoute v3.6.5 на LXC 132 (10.0.0.179) — AI-шлюз для 6 type: project originSessionId: 9f26284f-db92-456f-813d-fd8210b7d7b6 --- -## OmniRoute v3.6.5 (LXC 132, 10.0.0.179) +## OmniRoute v3.6.9+ (LXC 132, 10.0.0.179) - **Путь**: /root/OmniRoute/, Node.js 22, Next.js 16.2, git repo (github.com/diegosouzapw/OmniRoute) - **Dashboard**: http://10.0.0.179:20128, пароль: 1qaz!QAZ -- **API**: http://10.0.0.179:20128/v1 -- **API Key**: sk-225e902dc95ff192-6bdad7-3ec8cdc6 +- **API**: http://10.0.0.179:20128/v1 (или https://ai.dttb.ru/v1 публично через NPM с Bearer) +- **API Key**: `sk-225e902dc95ff192-6bdad7-3ec8cdc6` (test-key) / `sk-225e902dc95ff192-e71c19-7cc9283e` (claw) - **SQLite DB**: /root/.omniroute/storage.sqlite - **Service**: omniroute.service (systemd, enabled), запускает **npx-кэш** (НЕ git repo) - **ExecStart**: `/usr/bin/node /root/.npm/_npx//node_modules/omniroute/app/server.js` (hash меняется при обновлении) - **Конфиг**: /root/OmniRoute/.env (секреты сгенерированы) +- **Каталог моделей**: 145+ моделей (на 2026-05-06) ### SSH доступ к LXC 132 -- **Прямой SSH (root@10.0.0.179) НЕ РАБОТАЕТ** — пароль 1qaz!QAZ не подходит, ключ claude-code отсутствует -- **Доступ через Proxmox**: `sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct exec 132 -- bash -c 'COMMAND'"` — РАБОТАЕТ +- **Прямой SSH** `ssh root@10.0.0.179` — РАБОТАЕТ если на машине есть claude-code ключ (на Mac Олега есть) +- **Через Proxmox**: `sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct exec 132 -- bash -c 'COMMAND'"` — РАБОТАЕТ всегда - **Hostname**: code-server ### Обновление OmniRoute (npx способ — используется сервисом) @@ -30,18 +31,34 @@ originSessionId: 9f26284f-db92-456f-813d-fd8210b7d7b6 ### Обновление git-репозитория (отдельно, для разработки) 1. `cd /root/OmniRoute && git pull origin main && npm install && npm run build` -### Подключённые провайдеры (2026-04-11) -| Провайдер | Аккаунт | Модели | Статус | -|-----------|---------|--------|--------| -| Codex (OpenAI) | batlaew@gmail.com (free plan) | gpt-5.4, gpt-5.4-mini | Работает, refresh проблема | -| Claude | OAuth | claude-opus-4-6, sonnet | Токен есть, refresh проблема | -| Kiro (AWS) | OAuth | claude-sonnet-4.5, haiku | Токен есть, refresh проблема | +### Подключённые провайдеры (актуально 2026-05-06) +| Префикс | Провайдер | Модели Opus | Статус | +|---------|-----------|-------------|--------| +| **`cc/`** | Claude Code OAuth (Max-подписка) | **claude-opus-4-7**, opus-4-6, sonnet-4-6, sonnet-4-5, haiku-4-5 | ✅ Primary path к Opus | +| `claude/` | прямой Anthropic API (платный) | claude-opus-4-7, opus-4-6, sonnet-4-6, haiku-4-5 | ✅ Резерв per-token | +| `kr/` | Kiro/AWS Bedrock | sonnet-4.5 (Opus НЕТ) | ✅ для Sonnet, ❌ Opus | +| `cx/` | Codex (OpenAI free) | gpt-5.4, gpt-5.4-mini, gpt-5.5 | ✅ для GPT | +| `gh/` | GitHub Copilot integrator (MS) | sonnet-4.5/4.6, ~~opus-4.6~~, ~~opus-4.7~~ | ⚠️ Sonnet работает, Opus сломан (см. ниже) | +| `antigravity/` | Google Antigravity | opus-4-6-thinking | ❌ Нужен OAuth reconnect (projectId пуст) | +| `kc/` `kilocode/` | KiloCode aggregator | opus-4.7 | ❌ Empty response | +| `glm/` | Zhipu Z.ai | glm-5.1 | ✅ | + +### Главный путь к Opus 4.7 — `omniroute/cc/claude-opus-4-7` + +Через **CLIProxy + Claude Code OAuth + Max-подписку**. Фиксированная стоимость, без per-token. Подтверждено 2026-05-06: smoke-test вернул корректный ответ от `claude-opus-4-7`. См. [[../decisions/2026-05-06-openclaw-opus-4-7-via-max-cliproxy]]. + +### Известные сломы + +- **`gh/claude-opus-4.6`**: MS Copilot integrator убрал Opus 4.6 из своего scope, отдаёт «model not available for integrator vscode-chat» +- **`gh/claude-opus-4.7`**: ID mismatch — OmniRoute шлёт `4.7`, MS ждёт `4-7` (точка vs дефис). Баг текущей версии OmniRoute. Workaround: использовать `cc/claude-opus-4-7` пока не починят. +- **`antigravity/*`**: возвращает `"Missing Google projectId for Antigravity account. Please reconnect OAuth in Providers → Antigravity"`. Триггер из [[user_profile]]: до OAuth нужен вход на antigravity.google и создание Cloud Code project. ### Использование -- Prefix модели: `cx/gpt-5.4` (Codex), `cc/claude-opus-4-6` (Claude) -- 181 модель доступна через API (на 2026-04-14) -- Codex OAuth: callback на localhost:1455 (нужен SSH-туннель для удалённого доступа) -- Token refresh: требует периодическую перелогинку OAuth + +- Prefix модели в API: `cc/claude-opus-4-7`, `kr/claude-sonnet-4.5`, `cx/gpt-5.4` +- Codex OAuth callback: localhost:1455 (нужен SSH-туннель для удалённого онбординга) +- Token refresh: периодическая перелогинка OAuth — проверять Dashboard → Providers +- Health-check moniter: на LXC 132 в `journalctl -u omniroute -f` смотреть USAGE/STREAM строки ### Важно - OAuth Codex привязан к localhost:1455 — для удалённого доступа: `ssh -L 20128:localhost:20128 -L 1455:localhost:1455 root@10.0.0.179` diff --git a/decisions/2026-05-02-apple-id-tj-via-residential-proxy.md b/decisions/2026-05-02-apple-id-tj-via-residential-proxy.md index ca6796a..0771985 100644 --- a/decisions/2026-05-02-apple-id-tj-via-residential-proxy.md +++ b/decisions/2026-05-02-apple-id-tj-via-residential-proxy.md @@ -125,6 +125,25 @@ Grizzlysms TJ-pool **полностью забанен** Apple на текущи **Когда НЕ подходит:** долгосрочное хранение Apple Cash, привязка карт с большим балансом, использование как primary iCloud (там этот US Apple ID лучше не использовать вообще, только App Store). +## Статус на 2026-05-06 + +**Прогресс:** +- ✅ IPRoyal Royal Residential куплен (1 GB pay-as-you-go), TJ residential подтверждён рабочим (см. [[../snippets/iproyal-gost-relay]]) +- ✅ Локальный gost-relay отлажен (порт 9999 для TJ, 9998 для FI), FoxyProxy multi-port +- ✅ Firefox настроен: `intl.accept_languages = tg-TJ`, WebRTC отключён, приватное окно +- ✅ Apple footer показывает «Tajikistan» при правильной комбинации IP + locale + cookies-чистка +- ✅ US Adidas-аккаунт куплен (`hbuggle819@icloud.com`), 2FA через trusted devices, карта привязана +- ⚠️ **Сложности с virtual SMS** — grizzlysms TJ-pool забанен Apple, требуются альтернативы (5sim, smsbower) или реальная TJ SIM +- ⚠️ **Митинский радиорынок «высох»** (2026-05-04 проверено лично): продажа TJ-SIM мигрантам сократилась после ужесточения ФЗ-178. Альтернативные источники: Avito с доставкой (1500-3500 ₽), Telegram-каналы, знакомые в TJ +- 🔴 **Регион US Adidas пока не менялся на TJ** — ждём реальную TJ-SIM либо premium DID. Аккаунт пока используется только для скачивания приложений. + +**Текущий план:** +1. Найти реальную TJ SIM-карту (Avito / Telegram / знакомые) +2. После получения SIM — менять регион Adidas-аккаунта на TJ через TJ-IP (gost), привязка к новой TJ-карте +3. До этого момента — US Adidas-аккаунт используется только в App Store на iPhone для скачивания заблокированных в RU приложений (по схеме [[../snippets/apple-id-us-on-russia]]) + +**Параллельная находка:** Google гораздо строже Apple к virtual SMS — на TJ-IP при регистрации нового @gmail сразу требует QR-верификацию через trusted device. Web-регистрация Google под TJ через grizzlysms — путь в тупик, требует Android-эмулятор или готовый купленный аккаунт. + ## Связанные - [[../README]] — индекс vault diff --git a/decisions/2026-05-06-openclaw-opus-4-7-via-max-cliproxy.md b/decisions/2026-05-06-openclaw-opus-4-7-via-max-cliproxy.md new file mode 100644 index 0000000..0bf95e6 --- /dev/null +++ b/decisions/2026-05-06-openclaw-opus-4-7-via-max-cliproxy.md @@ -0,0 +1,118 @@ +--- +date: 2026-05-06 +type: decision +tags: [decision, openclaw, omniroute, claude, opus, cliproxy, max-plan] +--- + +# 2026-05-06: openclaw перешёл на Claude Opus 4.7 через Max-подписку (cc/* в OmniRoute) + +## Контекст + +Искали стабильный источник Claude Opus 4.6/4.7 для openclaw — обсуждали построение Workspace-фарма на новом домене с пулом аккаунтов под Antigravity. Перед тем как затевать фарм ($12/домен + время на регистрации + риск массового бана), проверили что фактически работает в текущей OmniRoute. + +## Что обнаружили в OmniRoute (10.0.0.179:20128) + +В каталоге **17 моделей с opus в id**, но реально пингуются только три: + +| Model ID | Источник | Статус | +|---|---|---| +| **`cc/claude-opus-4-7`** | Claude Code OAuth (Max-подписка Олега) | ✅ Работает | +| `cc/claude-opus-4-6` | то же | ✅ Работает | +| `claude/claude-opus-4-7` | прямой Anthropic API | ✅ Работает (платный per-token) | +| `gh/claude-opus-4.6` | GitHub Copilot integrator MS | ❌ MS убрала Opus 4.6 из integrator scope, отдаёт «model not available» | +| `gh/claude-opus-4.7` | то же | ❌ ID mismatch: OmniRoute шлёт `4.7`, MS ждёт `4-7` (баг mapping в текущей версии) | +| `kr/claude-opus-4.6` / `4.7` | Kiro/AWS | ❌ Kiro Opus не выдаёт, только Sonnet | +| `kiro/claude-opus-*` | то же | ❌ | +| `kc/anthropic/claude-opus-4.7` | KiloCode | ❌ Empty response | +| `kilocode/anthropic/claude-opus-4.7` | то же | ❌ | +| `antigravity/claude-opus-4-6-thinking` | Google Antigravity | ❌ «Missing Google projectId — reconnect OAuth in Providers → Antigravity» | + +## Решение + +**Workspace-фарм для Antigravity не нужен.** У Олега уже есть рабочий Opus 4.7 через **`cc/claude-opus-4-7`** — это его собственная Max-подписка Anthropic, проксированная через CLIProxy в OmniRoute. Лучше любого фарма потому что: + +- Нет per-token биллинга, фиксированная стоимость Max ($200/мес за Max20x) +- Не нужны множественные аккаунты, recovery emails, virtual cards +- Один источник = один ключ = простая интеграция +- Нет риска массового бана как у фарм-аккаунтов +- Самая свежая модель Opus 4.7 (новее чем 4.6 которая в фармовых Antigravity) + +### Изменения в `/root/.openclaw/openclaw.json` (LXC 137) + +**Было:** +```json +"agents.defaults.model": { + "primary": "omniroute/kr/claude-sonnet-4.5", + "fallbacks": [ + "omniroute/cc/claude-sonnet-4-6", + "omniroute/cx/gpt-5.4" + ] +} +``` + +**Стало:** +```json +"agents.defaults.model": { + "primary": "omniroute/cc/claude-opus-4-7", + "fallbacks": [ + "omniroute/cc/claude-sonnet-4-6", + "omniroute/kr/claude-sonnet-4.5", + "omniroute/cx/gpt-5.4" + ] +} +``` + +Также добавлена запись в `models.providers.omniroute.models[]`: +```json +{ + "id": "cc/claude-opus-4-7", + "name": "Claude Opus 4.7 (CLIProxy/Max)", + "reasoning": false, + "input": ["text", "image"], + "contextWindow": 200000, + "maxTokens": 8192 +} +``` + +Без этой записи openclaw fallback'нет на следующий — модель должна быть в каталоге провайдера. + +### Применение + +OpenClaw подхватил изменения **через hot-reload без рестарта** (видно в журнале: `[reload] config hot reload applied`). После я ещё раз сделал `systemctl --user restart openclaw-gateway.service` для чистоты, но это было необязательно. + +В логах после старта: +``` +[gateway] agent model: omniroute/cc/claude-opus-4-7 +[gateway] http server listening (7 plugins: ..., telegram; 8.6s) +[telegram] [default] starting provider (@maxim_dttb_bot) +[gateway] ready +``` + +## Бэкап и rollback + +Автобэкап перед изменениями: `/root/.openclaw/openclaw.json.bak.opus47-20260506-090832` + +Rollback одной командой: +```bash +sshpass -p '1qaz!QAZ' ssh root@10.0.0.250 "pct exec 137 -- bash -c ' + cp /root/.openclaw/openclaw.json.bak.opus47-20260506-090832 /root/.openclaw/openclaw.json + XDG_RUNTIME_DIR=/run/user/0 systemctl --user restart openclaw-gateway.service +'" +``` + +## Известные риски и мониторинг + +1. **Max-подписка fair-use лимиты** — Anthropic размывает по нагрузке, точных цифр нет. Когда упрёмся — openclaw сам перейдёт на `cc/claude-sonnet-4-6` (видно в логах `model fallback decision`). +2. **CLIProxy OAuth refresh** — может протухнуть. Мониторинг: `journalctl --user -u openclaw-gateway -f` на LXC 137. При ошибке 401 от Anthropic API → переподключить Claude Code OAuth в OmniRoute (Dashboard → Providers → Claude → Reconnect). +3. **Скорость** — Opus 4.7 в среднем 2-5 сек медленнее Sonnet 4.5. Для интерактива в Telegram это норма. + +## Параллельные находки + +- **Antigravity** требует OAuth re-connect. По заметке `feedback_antigravity_onboarding.md`: открыть [antigravity.google](https://antigravity.google), залогиниться, создать Cloud Code project → projectId подтянется → `antigravity/claude-opus-4-6-thinking` оживёт. Сейчас не критично. +- **`Unknown model: cx/gpt-5.4`** — каждые 30 минут в логах ошибка. Health-check тыкается в модель которой нет в каталоге `omniroute.models[]` openclaw. Не блокер — failover работает. Решение: либо добавить `cx/gpt-5.4` в каталог openclaw, либо убрать из health-check'ов. + +## Связанные + +- [[../claude-memory/omniroute]] — OmniRoute setup, провайдеры, версии +- [[../projects/dttb/openclaw]] — справочник по openclaw +- [[../snippets/clawdbot-cliproxy-config]] — старый шаблон CLIProxy diff --git a/snippets/iproyal-gost-relay.md b/snippets/iproyal-gost-relay.md new file mode 100644 index 0000000..c6e05e9 --- /dev/null +++ b/snippets/iproyal-gost-relay.md @@ -0,0 +1,100 @@ +--- +date: 2026-05-06 +type: snippet +tags: [proxy, iproyal, gost, foxyproxy, apple, google] +--- + +# IPRoyal Royal Residential через локальный gost-relay + +Постоянный «вечный» способ использовать IPRoyal residential без проблем с FoxyProxy (он режет длинный пароль с password-модификаторами `_country-X_session-Y_lifetime-Z`). Решение: запускаем локальный `gost` который слушает 127.0.0.1:PORT и форвардит на IPRoyal с правильным паролем зашитым в команду. Браузер тогда указывает только `127.0.0.1:PORT` без auth. + +## Установка + +```bash +brew install gost # macOS, ~1 мин +# или +apt install golang && go install github.com/go-gost/gost/cmd/gost@latest +``` + +## Базовая команда + +```bash +gost -L "http://127.0.0.1:PORT" \ + -F "http://USER:PASS_country-XX_session-LABEL_lifetime-30m@geo.iproyal.com:12321" +``` + +Где: +- `PORT` — локальный порт для FoxyProxy (выбираешь сам, например 9999) +- `USER` / `PASS` — base creds из IPRoyal Dashboard → Royal Residential → Proxy List +- `XX` — ISO-код страны **lowercase** (`tj`, `fi`, `us`, `de`...). `country-Tajikistan` НЕ работает. +- `LABEL` — любая метка sticky-сессии (одна метка = один и тот же IP в течение `lifetime`) +- `lifetime-30m` — IP не меняется 30 минут. Доступно `1m`-`120m`. + +## Twin-port схема (рекомендуется) + +Запусти **два gost одновременно** на разных портах для разных стран — переключаешься между ними в FoxyProxy одной кнопкой: + +```bash +# Порт 9999 → TJ (для Apple ID) +gost -L "http://127.0.0.1:9999" \ + -F "http://OYB0rKuOA5qnNS6o:fXtn1jdd0xIt2EPf_country-tj_session-applemod_lifetime-30m@geo.iproyal.com:12321" & + +# Порт 9998 → FI (для Google Antigravity) +gost -L "http://127.0.0.1:9998" \ + -F "http://OYB0rKuOA5qnNS6o:fXtn1jdd0xIt2EPf_country-fi_session-googlemod_lifetime-30m@geo.iproyal.com:12321" & +``` + +В FoxyProxy создаёшь **два профиля**: +| Title | Type | Host | Port | +|---|---|---|---| +| 🇹🇯 IPRoyal-TJ | HTTP | 127.0.0.1 | 9999 | +| 🇫🇮 IPRoyal-FI | HTTP | 127.0.0.1 | 9998 | + +Username/Password — **пустые** (gost уже знает auth). + +## Подтверждённые рабочие IP (история) + +| Дата | Страна | Sticky-метка | Реальный IP | ASN | +|------|--------|--------------|-------------|-----| +| 2026-05-03 | TJ | `appletj01` | 185.177.2.130 (Dushanbe) | AS51346 Tojiktelecom | +| 2026-05-03 | TJ | `appletj02` | 94.199.21.228 (Khujand) | AS24722 Babilon-T | +| 2026-05-04 | TJ | `applemod` | 109.75.61.86 (Dushanbe) | AS47139 INDIGO | +| 2026-05-04 | TJ | `applemod3` | 109.74.74.60 (Dushanbe) | AS24722 Babilon-T | +| 2026-05-04 | FI | `googletest` | 212.149.238.126 (Oulu) | AS16086 DNA Oyj | + +Все ASN из списка реальных residential провайдеров — **Apple/Google не палят как proxy**, в отличие от Hostkey/OVH/AWS. + +## Важно — почему не FoxyProxy напрямую к IPRoyal + +FoxyProxy парсер при сохранении пароля «режет» строку на специальных символах (`_` или после первого `:`). Из-за этого `pass_country-tj_session-X` уходит в IPRoyal как просто `pass` → IPRoyal отдаёт **random country**, не TJ. Подтверждено 2026-05-03: с обрезанным паролем вернулся IP Бразилии (Claro NXT). + +Через gost модификаторы передаются как часть upstream URL и до FoxyProxy не доходят — он видит только `127.0.0.1:PORT` без auth. + +## Тест что работает + +```bash +# С FI residential +curl -x http://127.0.0.1:9998 https://ipinfo.io +# Ожидание: "country":"FI", residential ASN (DNA, Elisa, Telia) + +# С TJ residential +curl -x http://127.0.0.1:9999 https://ipinfo.io +# Ожидание: "country":"TJ", AS24722 Babilon / AS51346 Tojiktelecom / AS47139 INDIGO +``` + +## WebRTC + Accept-Language (обязательно для Apple ID) + +Прокси сам по себе **недостаточен** — Firefox шлёт RU-локаль и WebRTC может слить реальный IP. + +В Firefox `about:config`: +- `intl.accept_languages` = `tg-TJ, tg, en-US, en` (для TJ) или `fi-FI, fi, en-US, en` (для FI) +- `media.peerconnection.enabled` = `false` +- `media.peerconnection.ice.default_address_only` = `true` + +И регистрироваться **в приватном окне** (Cmd+Shift+P) чтобы не было RU-cookies. + +## Стоимость + +IPRoyal Royal Residential pay-as-you-go: $7/GB (на момент 2026-05-03). 1 GB трафика хватает на ~10 регистраций Apple ID или ~5 часов работы с веб-консолями. + +См. также: [[../decisions/2026-05-02-apple-id-tj-via-residential-proxy]]