From 46c8a0922e9d75e2217175af4f97b5a07a574c26 Mon Sep 17 00:00:00 2001 From: vitya Date: Sat, 22 Aug 2026 20:22:00 +0300 Subject: [PATCH] meta(wiki): ingest ForgetMeAI free web-chat proxy analysis (concept + raw) + qwen-web task update (browser path through baxia-WAF) --- .tasks/llm-web-proxy-qwen-web.md | 16 +++- .../forgetmeai-free-web-chat-proxies.md | 88 +++++++++++++++++++ .../omniroute-combo-deepseek-web-tuning.md | 1 + .wiki/index.md | 1 + .wiki/log.md | 1 + .../forgetmeai-repo-analysis-2026-08-22.md | 60 +++++++++++++ 6 files changed, 164 insertions(+), 3 deletions(-) create mode 100644 .wiki/concepts/forgetmeai-free-web-chat-proxies.md create mode 100644 .wiki/raw/forgetmeai-repo-analysis-2026-08-22.md diff --git a/.tasks/llm-web-proxy-qwen-web.md b/.tasks/llm-web-proxy-qwen-web.md index 7bc3471..c180a4c 100644 --- a/.tasks/llm-web-proxy-qwen-web.md +++ b/.tasks/llm-web-proxy-qwen-web.md @@ -23,6 +23,12 @@ - `open-sse/executors/qwen-web.ts` — из docker-образа `diegosouzapw/omniroute:latest` (`/app/`), паттерн вытаскивания deepseek-web.ts (уже отработан в llm-web-proxy). - Парсеры тулов общие — `webTools.ts` уже есть, переиспользовать. +## Находка 2026-08-22 (вечер): прямой fetch мёртв — нужен браузерный путь + +Подтверждено внешним источником (ForgetMeAI/FreeQwenApi, 212⭐): **Node-fetch в принципе не проходит baxia-WAF** — капча привязана к device-фингерпринту (bx-umidtoken минтится JS из sg-wum.alibaba.com в контексте страницы), не к cookie. Рабочий путь — **fetch внутри `page.evaluate`** на живой странице chat.qwen.ai (настоящий umidtoken + canvas-фингерпринт + same-origin). + +Референс (закоммичен в lwp): `docs/reference/forgetmeai/` (фингерпринт-сниппет, browser-fetch паттерн, cloakbrowser-заметки). Дизайн решения: `.wiki/concepts/qwen-waf-browser-path.md` (варианты A — браузер-фасад / B — полный браузерный executor). + ## Что писать в lwp 1. executor `qwen-web` (по паттерну deepseek-web, но НЕ копипастить логику тул-эмуляции — общий модуль). @@ -39,13 +45,17 @@ ## Open questions -- [ ] Актуальный userToken chat.qwen.ai жив? (проверить при работе — EAI_AGAIN мог быть и от бана/истечения) -- [ ] Какая модель по умолчанию у qwen-web (qwen3-max? qwen3-flash?) — смотреть executor omniroute. +- [x] 2026-08-22: Актуальный userToken chat.qwen.ai жив? (проверено: executor детектит капчу, не 401 по токену — токен жив, блокирует WAF) +- [ ] Какая модель по умолчанию у qwen-web (qwen3-max? qwen3-flash?) — в lwp стоит `qwen3.7-max` (из executor'а omniroute, alias-таблица в qwen-web-executor.ts) +- [ ] Браузерный путь: какой движок (puppeteer-extra vs playwright), persistent-профиль, ручной проход капчи один раз ## Completed steps - [x] 2026-08-22: DNS-блокер перепроверен — chat.qwen.ai резолвится (EAI_AGAIN ушёл). -- [x] 2026-08-22: подтверждено, что qwen-executor'а в lwp ещё нет (только deepseek). +- [x] 2026-08-22: подтверждено, что qwen-executor'а в lwp ещё нет (только deepseek). *(позднее: executor добавлен коммитом 6ef57bc — v2 API, cookie jar + детект капчи)* +- [x] 2026-08-22: живой прогон — лог `waf=captcha-envelope` на completion (детект работает, запрос блокируется WAF). +- [x] 2026-08-22: внешний источник найден (FreeQwenApi): браузерный путь через baxia-WAF, референс в `docs/reference/forgetmeai/`, дизайн в `.wiki/concepts/qwen-waf-browser-path.md`. +- [ ] Реализация браузерного executor'а (вариант A или B) — следующий шаг. ## Notes diff --git a/.wiki/concepts/forgetmeai-free-web-chat-proxies.md b/.wiki/concepts/forgetmeai-free-web-chat-proxies.md new file mode 100644 index 0000000..9496688 --- /dev/null +++ b/.wiki/concepts/forgetmeai-free-web-chat-proxies.md @@ -0,0 +1,88 @@ +--- +title: "ForgetMeAI: семейство бесплатных web-chat прокси (DeepSeek/Qwen/GLM/Kimi) — паттерны обхода анти-бот" +type: concept +tags: [forgetmeai, llm-web-proxy, lwp, captcha, baxia-waf, pow, cloakbrowser, stealth, deepseek-web, qwen-web] +sources: [../raw/forgetmeai-repo-analysis-2026-08-22.md] +updated: 2026-08-22 +--- + +# ForgetMeAI: бесплатные web-chat прокси — что там есть для lwp + +Обзор GitHub-аккаунта [ForgetMeAI](https://github.com/ForgetMeAI) (8 репозиториев, автор t.me/forgetmeai) 2026-08-22. Весь аккаунт — ровно та же ниша, что lwp (llm-web-proxy): **локальные прокси, превращающие бесплатные веб-чаты LLM в OpenAI/Anthropic-совместимые API**. Часть репов — прямые аналоги комбо lwp, их подходы к анти-боту — готовый референс для разблокировки qwen-web и укрепления deepseek-web. + +## Репозитории (по теме) + +| Репо | ⭐ | Что это | Отношение к lwp | +|---|---|---|---| +| FreeDeepseekAPI | 318 | deepseek web-chat → OpenAI/Anthropic API. **PoW-солвер** (`lib/pow.js`) + Chrome-расширение-экспортёр сессии | прямой аналог комбо deepseek-web; PoW уже портирован в lwp (`src/vendor/deepseek-pow.ts`) | +| FreeQwenApi | 212 (форк) | qwen web-chat → OpenAI API. **Работает через браузер** (stealth-пуппетеер, fetch внутри `page.evaluate`) | ключ к разблокировке [llm-web-proxy-qwen-web]: baxia-WAF проходится браузерным фингерпринтом | +| FreeGLMKimiAPI | 67 | GLM/Z.ai + Kimi прокси. Прямой fetch + browser-fallback, **CloakBrowser** (патченый Chromium), классификация капчи (Aliyun WAF, `FRONTEND_CAPTCHA_REQUIRED`, `人机验证失败`, punish) | референс: классификаторы капчи, cloakbrowser-заметки | +| FreeKimiAPI | 27 | Kimi cfbt endpoint прокси, circuit-breaker на `browser_signature_banned` (1010) | простейший аналог, паттерн circuit-breaker уже есть в lwp | +| FreeNIMAPI | 11 | мост к NVIDIA NIM (trial) | не про капчу | +| grok_account_checker | 0 | мониторинг X-аккаунтов/SuperGrok: официальный OAuth 2.0 PKCE (Playwright) | честно: не обходит Turnstile/CAPTCHA/2FA | + +## Главный паттерн аккаунта: НЕ решать капчу, а обходить через реальную браузерную сессию + +Универсальный приём у ForgetMeAI (и у всех живых free-chat прокси): + +1. **Один раз логинишься в реальном Chrome** (видимый режим, persistent-профиль) → капчу/2FA проходишь руками. +2. **Сессия захватывается** одним из способов: + - Chrome-расширение читает куки + localStorage из залогиненной вкладки (FreeDeepseekAPI: `token`, `ds_session_id`, `smidV2`, localStorage `hif_dliq`/`hif_leim`); + - экспорт полного cookie-заголовка / cookie-файла и вставка в конфиг; + - persistent browser profile (профиль переживает рестарты, куки живут). +3. **Дальше прокси ходит с живой сессией**: прямой fetch с cookie-jar, ИЛИ fetch внутри браузерного контекста (`page.evaluate`) — когда WAF привязан к device-фингерпринту, а не к кукам. + +Исключение из «не решать»: **DeepSeek PoW** — его решают локально (WASM-солвер, см. ниже). + +## PoW-солвер DeepSeek (FreeDeepseekAPI/lib/pow.js) + +- Грузит WASM-модуль челленджа по URL, **компилирует один раз и кэширует** `WebAssembly.Module` (по URL), каждый solve — свежий Instance (чистая линейная память). +- Префикс челленджа: `salt + '_' + expire_at + '_'`, затем `challenge + prefix` в память WASM, вызов `wasm_solve(sp, cBytes, cBytes.length, pBytes, pBytes.length, difficulty)`, ответ — `float64` (ans) → `Math.floor`. +- Жёсткий таймаут на fetch WASM (15s), неудачная загрузка не кэшируется. +- **В lwp PoW уже есть** (`src/vendor/deepseek-pow.ts` + `deepseek-pow-solver.cjs`), deepseek-комбо работает — ничего не портировать. Сравнить подходы при желании: lwp-версия из omniroute (TS), ForgetMeAI-версия автономная (CJS, 54 строки) — пригодна как fallback/референс. + +## qwen-web: браузерный путь через baxia-WAF (главное для lwp) + +Наш вывод из сессии 2026-08-22 ([[omniroute-combo-deepseek-web-tuning]]): капча Alibaba baxia-WAF привязана к **device-фингерпринту** (bx-umidtoken минтится JS из sg-wum.alibaba.com), не к cookie; Node-fetch и даже CDP-запросы мимо страницы виснут. + +FreeQwenApi подтверждает и даёт рабочий путь: + +- **`src/browser/browser.js`** — puppeteer-extra + stealth-плагин + тяжёлый фингерпринт-спуфинг в `page.evaluateOnNewDocument`: `navigator.platform='Win32'`, `hardwareConcurrency=8`, `deviceMemory=8`, фейк `plugins` (Chrome PDF Plugin), `connection` (4g/50ms/10Mbps), `getBattery`, **шум в `HTMLCanvasElement.toDataURL`** (±2 на пиксель — бьёт canvas-фингерпринт), обёртки-задержки на `mousemove/mousedown/mouseup` (человечность). Launch args: `--disable-blink-features=AutomationControlled`, `--disable-web-security` и др. +- **`src/api/chat.js`** — чат-запрос исполняется **внутри страницы**: `page.evaluate(async (data) => fetch(data.apiUrl, {...}))`. Так запрос несёт настоящий umidtoken + canvas-фингерпринт + same-origin → WAF пропускает. Node-стриминг пробуется первым, при анти-бот (antiBot детект: `rgv587|fail_sys_user_validate|_____tmd_____|purecaptcha`) — fallback на browser-fetch. +- Детект анти-бот-эневелопов на HTTP 200: `lower.includes('/_____tmd_____/punish') || (window._config_ && captcha) || purecaptcha`. +- Первичная авторизация — ручная (видимый браузер, `startManualAuthenticationPuppeteer`), сессия — cookies в `sessions/accounts/`. + +**Вывод для lwp:** рабочий сценарий qwen-web = **браузерный executor** (puppeteer/playwright + stealth + фингерпринт-спуфинг + fetch в `page.evaluate`), а не реплей cookie-jar через undici. Референс-код закоммичен в lwp: `docs/reference/forgetmeai/`. + +## CloakBrowser-заметки (FreeGLMKimiAPI/docs/cloakbrowser-notes.md) + +Пропатченный Chromium против анти-бот (CloakHQ/CloakBrowser + Manager): + +- **Настоящий патченый браузер** (не JS-инъекции): stealth на уровне бинаря, Playwright-совместимый `launchPersistentContext()`. +- **Persistent не-incognito профили** обязательны: сохраняются куки/localStorage, меньше детекта. +- **Humanize-слой**: печать/клики/скролл с реалистичными задержками через доверенные input-пути. +- **Согласованность locale/timezone/proxy**: флаги браузера + geoip-сверка с IP прокси (в lwp-контексте — per-account proxy уже есть). +- Очистка lock-файлов профиля (`SingletonLock/SingletonCookie/SingletonSocket`) после падений. +- **Ограничение:** патченый браузер не решает уже сработавшую капчу — один раз пройти руками в видимом профиле. + +## Классификация капчи/анти-бот (референс-регэкспы) + +- DeepSeek: PoW-челлендж (salt/expire_at/difficulty), 503 `chat_admission_busy` = capacity (не капча). +- Qwen (baxia-WAF): `FAIL_SYS_USER_VALIDATE`, `RGV587_ERROR::SM::...`, `_____tmd_____/punish`, `x5secdata`, `rgv587`, `purecaptcha`, `success:false` на 200. +- Z.ai (GLM): `FRONTEND_CAPTCHA_REQUIRED`, `人机验证失败`, `请重新验证`, `刷新页面以更新应用`, `aliyun`, `waf`, `punish`. +- Kimi cfbt: `browser_signature_banned` (1010), `access denied`. +- Общий маркер WAF-страницы: `text/html` в ответе API + `aliyun_waf|baxia|` работает, план кастомного провайдера, qwen-web baxia-WAF стена +- [forgetmeai-free-web-chat-proxies](concepts/forgetmeai-free-web-chat-proxies.md) — семейство бесплатных web-chat прокси ForgetMeAI (DeepSeek/Qwen/GLM/Kimi): паттерн «обход капчи через реальную браузерную сессию», PoW-солвер DeepSeek, браузерный путь через baxia-WAF (fetch в page.evaluate), CloakBrowser, классификаторы капчи; карта «что берём в lwp» - [sched-admin-client-openapi](concepts/sched-admin-client-openapi.md) — F&F раунды 2026-08-18: Python-клиент одной командой из спеки (openapi-generator 7.24.0); r1 0.1.2 — 24/24+smoke 19/19, находки F-1..F-5 (8 операций на raw-обходе); r2 0.2.0/0.3.5 — все 5 закрыты, raw_ops удалён, 11/11 typed-only, вердикт «claim подтверждён полностью» - [openapi-generator-3-1-spec-gotchas](concepts/openapi-generator-3-1-spec-gotchas.md) — генерация клиентов из 3.1-спеки (openapi-generator 7.24.0, python): wrapped-ответы {} → ValidationError (raw-обход историчен: r2 спека фикснута), const:true → строковый enum, oneOf+discriminator → actual_instance=None (r2: плоская схема), java из PATH а не JAVA_HOME, InlineObjectN-имена, info.version не бьётся - [nvm-junction-ismain-gate-gotcha](concepts/nvm-junction-ismain-gate-gotcha.md) — ESM isMain-гейт молча не выполняется под junction'нутым npm-рутом (nvm/mise/volta); realpath-фикс; диагностика за 30 сек diff --git a/.wiki/log.md b/.wiki/log.md index e5e1187..a1b1545 100644 --- a/.wiki/log.md +++ b/.wiki/log.md @@ -142,3 +142,4 @@ Append-only log of wiki operations (ingests, promotions, lints, migrations). ## [2026-08-22] ingest | NEW concepts/omniroute-combo-deepseek-web-tuning.md + sources/omniroute-session-2026-08-22.md — сессия настройки web-комбо omniroute (deepseek-v4-flash/pro-web). Корни вылетов агента: (1) system_message override режет скилы pi, (2) tool_filter_regex ^(bash|computer)$ режет 337/339 тулов, (3) search-модель генерит DEEP_SEARCH-мусор + «Link reading unavailable», (4) quality validation режет стрим на type:error, (5) 503 chat_admission_busy = capacity веб-чата. Фиксы применены: system_message="", regex расширен (базовые+mcp__*), flash think-search→think, maxRetries 2→4, retryDelayMs→4000. Эмуляция tool-calling проверена тестами — исправна. План кастомного провайдера (вытащить executor+translator, без quality validation, persistSession). index.md updated (+2). ## [2026-08-22] ingest | UPDATE concepts/omniroute-combo-deepseek-web-tuning.md — qwen-web стена baxia-WAF (подзадача llm-web-proxy-qwen-web): FAIL_SYS_USER_VALIDATE/RGV587 punish-капча на любой не-браузерный запрос (Node-fetch все варианты заголовков + свежий cookie-jar; даже Chrome-CDP chats/new проходит, completion виснет). Капча привязана к device-фингерпринту (bx-umidtoken из sg-wum.alibaba.com), не к cookie. Зацепка: в контейнере omniroute рабочая версия executors/qwen-web.ts ≠ GitHub main. Подзадача 🟡 paused. index.md hook обновлён. +## [2026-08-22] ingest | NEW concepts/forgetmeai-free-web-chat-proxies.md + raw/forgetmeai-repo-analysis-2026-08-22.md — анализ аккаунта ForgetMeAI (8 репо, все — бесплатные web-chat прокси, та же ниша lwp). Главное: (1) паттерн «не решать капчу, а обходить реальной браузерной сессией» (Chrome-расширение-экспортёр кук/localStorage, cookie export, persistent-профиль); (2) PoW-солвер DeepSeek (lib/pow.js, WASM compile-cache) — в lwp уже портирован; (3) qwen через baxia-WAF работает ТОЛЬКО браузерным путём: fetch внутри page.evaluate (FreeQwenApi) — настоящий umidtoken+canvas-фингерпринт; наш вывод подтверждён; (4) CloakBrowser-заметки (патченый Chromium, humanize, persistent-профили, geoip), классификаторы капчи (Aliyun WAF/FRONTEND_CAPTCHA_REQUIRED/punish/purecaptcha). Референс-код закоммичен в lwp docs/reference/forgetmeai/. index.md updated (+1). diff --git a/.wiki/raw/forgetmeai-repo-analysis-2026-08-22.md b/.wiki/raw/forgetmeai-repo-analysis-2026-08-22.md new file mode 100644 index 0000000..c72c9ff --- /dev/null +++ b/.wiki/raw/forgetmeai-repo-analysis-2026-08-22.md @@ -0,0 +1,60 @@ +# ForgetMeAI — анализ репозиториев (2026-08-22) + +Первичная запись: анализ GitHub-аккаунта https://github.com/ForgetMeAI (id 76566648) по теме +lwp (бесплатные web-chat LLM прокси, обход капчи/анти-бот). Собрано 2026-08-22 из GitHub API ++ shallow-clone всех репов (коммиты не фиксировались — референс на дату анализа). + +## Список репозиториев (GitHub API, sort=updated) + +| name | stars | language | fork | pushed_at | description | +|---|---|---|---|---|---| +| FreeDeepseekAPI | 318 | JavaScript | no | 2026-07-13 | Локальный API-прокси для DeepSeek Web Chat с поддержкой OpenAI/Anthropic API, streaming, tool calling, Responses API и Open WebUI | +| FreeQwenApi | 212 | JavaScript | yes | 2026-07-13 | Локальный API-прокси для Qwen AI с поддержкой сохранения контекста диалогов и управления сессиями | +| FreeGLMKimiAPI | 67 | JavaScript | no | 2026-06-20 | OpenAI/Anthropic-совместимый локальный прокси для бесплатных веб-моделей GLM/Z.ai и Kimi | +| FreeKimiAPI | 27 | JavaScript | no | 2026-06-20 | Локальный OpenAI/Anthropic/Responses-compatible прокси для бесплатного Kimi endpoint cfbt | +| FreeNIMAPI | 11 | JavaScript | no | 2026-07-17 | мост к NVIDIA NIM | +| design-harness | 0 | JavaScript | no | 2026-08-07 | Approval-gated web design workflow (не в тему) | +| local-inference-optimizer-skill | 8 | Python | no | 2026-06-28 | Skill для Hermes/Claude Code/Codex: выбор LLM inference (не в тему) | +| grok_account_checker | 0 | Python | no | 2026-07-14 | мониторинг X-аккаунтов / SuperGrok | + +## Ключевые файлы (по репо) + +### FreeDeepseekAPI +- `lib/pow.js` (54 строки) — PoW-солвер DeepSeek Web API: WASM compile-once cache по URL, + префикс `salt_expire_at_`, `wasm_solve(sp, c, cLen, p, pLen, difficulty)`, ответ float64 → floor. +- `chrome-extension/background.js` — экспортёр сессии: куки chat.deepseek.com + (`token`, `ds_session_id`, `smidV2`) + localStorage (`hif_dliq`, `hif_leim`) из залогиненной вкладки. +- `scripts/deepseek_chrome_auth.js` — auth через отдельный Chrome-профиль, `deepseek-auth.json` 0600, + импорт cookie export, перенос auth-файла на VPS (scp). + +### FreeQwenApi (форк, main.js — qwen v2 API) +- `src/browser/browser.js` — puppeteer-extra + stealth-плагин + `page.evaluateOnNewDocument` + фингерпринт-спуфинг: platform=Win32, hardwareConcurrency=8, deviceMemory=8, plugins (Chrome PDF), + connection 4g/50ms, getBattery, canvas-noise (±2) в toDataURL, задержки mousemove/mousedown/mouseup. + Launch args: `--disable-blink-features=AutomationControlled`, `--disable-web-security`, и др. +- `src/api/chat.js` — чат: Node-fetch пробуется первым; при анти-бот (детект + `rgv587|fail_sys_user_validate|_____tmd_____|purecaptcha`, punish-URL) — fallback на + **browser fetch через `page.evaluate(fetch(apiUrl,...))`** (настоящий фингерпринт → WAF пропускает). + `credentials:'omit'` по умолчанию. Детект анти-бот на 200: `/_____tmd_____/punish`, `window._config_`+captcha, purecaptcha. +- `src/browser/session.js` — cookies в `sessions/accounts/acc_/cookies.json`. +- `src/browser/auth.js` — `startManualAuthenticationPuppeteer`: видимый браузер, ручной логин. + +### FreeGLMKimiAPI +- `src/providers/zaiBrowser.js` (341 строка) — browser fallback для Z.ai: + - `isZaiCaptchaError`: /captcha|FRONTEND_CAPTCHA_REQUIRED|verify again|verification failed|refresh the page to update the app|人机验证失败|请重新验证|刷新页面以更新应用|aliyun|waf|punish/i + - движки: puppeteer-extra+stealth (default) | cloakbrowser (опция `ZAI_BROWSER_ENGINE=cloak`) + - persistent-профиль, humanize, locale/timezone/proxy/geoip env, чистка SingletonLock/Cookie/Socket +- `docs/cloakbrowser-notes.md` (52 строки) — выводы по CloakHQ/CloakBrowser: патченый Chromium, + launchPersistentContext, persistent профили, humanize, geoip-согласование, ограничение (не решает уже сработавшую капчу). + +### FreeKimiAPI +- `src/upstream.js` — классификация: `capacity_exceeded` (3040/capacity), `blocked_by_upstream` + (1010/browser_signature_banned/access denied), `rate_limited`, circuit-breaker. + +### grok_account_checker +- `auth.py` + `grok_checker.py` — официальный OAuth 2.0 PKCE (Playwright), локальный callback-сервер. + Явно: не обходит Turnstile/CAPTCHA/2FA, только authorized use. + +## Ссылки +- Аккаунт: https://github.com/ForgetMeAI +- Автор: t.me/forgetmeai, поддержка t.me/forgetshop_bot