[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83938":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":18,"stars90d":16,"forks30d":16,"starsTrendScore":19,"compositeScore":20,"rankGlobal":10,"rankLanguage":10,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":35,"readmeContent":36,"aiSummary":10,"trendingCount":16,"starSnapshotCount":16,"syncStatus":37,"lastSyncTime":38,"discoverSource":39},83938,"FreeDeepseekAPI","ForgetMeAI\u002FFreeDeepseekAPI","ForgetMeAI","Локальный API-прокси для DeepSeek Web Chat с поддержкой OpenAI\u002FAnthropic API, streaming, tool calling, Responses API и Open WebUI","",null,"JavaScript",142,38,9,1,0,11,54,76,90.17,"MIT License",false,"main",true,[26,27,28,29,30,31,32,33,34],"ai-api","anthropic-api","api-proxy","deepseek","deepseek-api","deepseek-chat-api","free-api","openai-api-compatible","openai-proxy","2026-06-12 04:01:42","# FreeDeepseekAPI\n\n\u003Cp align=\"center\">\n  \u003Cstrong>Локальный OpenAI-compatible API proxy для DeepSeek Web Chat\u003C\u002Fstrong>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FForgetMeAI\u002FFreeDeepseekAPI\u002Fblob\u002Fmain\u002FLICENSE\">\u003Cimg alt=\"License MIT\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-green.svg\" \u002F>\u003C\u002Fa>\n  \u003Cimg alt=\"Node.js 18 plus\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-18%2B-339933.svg\" \u002F>\n  \u003Cimg alt=\"No npm dependencies\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdependencies-0-blue.svg\" \u002F>\n  \u003Cimg alt=\"OpenAI compatible\" src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FOpenAI-compatible-111111.svg\" \u002F>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#-быстрый-старт\">Быстрый старт\u003C\u002Fa> •\n  \u003Ca href=\"#-возможности\">Возможности\u003C\u002Fa> •\n  \u003Ca href=\"#-примеры-запросов\">Примеры\u003C\u002Fa> •\n  \u003Ca href=\"#-модели\">Модели\u003C\u002Fa> •\n  \u003Ca href=\"#-endpoints\">Endpoints\u003C\u002Fa> •\n  \u003Ca href=\"#-open-webui\">Open WebUI\u003C\u002Fa>\n\u003C\u002Fp>\n\nFreeDeepseekAPI поднимает локальный API-сервер для **DeepSeek Web Chat** (`chat.deepseek.com`) и позволяет подключать DeepSeek Web к Open WebUI, LiteLLM, Hermes, Claude Code, OpenAI SDK-style клиентам и другим OpenAI-compatible инструментам.\n\nПроект работает через ваш обычный залогиненный аккаунт DeepSeek в отдельном Chrome-профиле. Локальный сервер принимает API-запросы, а дальше сам ходит в DeepSeek Web через сохранённую browser-сессию.\n\n> ⚠️ Это экспериментальный web-chat proxy. DeepSeek может менять внутренний Web API без предупреждения. Для production-кейсов надёжнее официальный платный API DeepSeek.\n\nForgetMeAI: https:\u002F\u002Ft.me\u002Fforgetmeai\n\n---\n\n## Навигация\n\n- [Что это даёт](#-что-это-даёт)\n- [Возможности](#-возможности)\n- [Быстрый старт](#-быстрый-старт)\n- [Windows запуск](#-windows-запуск)\n- [Linux \u002F Chromium запуск](#-linux--chromium-запуск)\n- [VPS \u002F headless запуск](#-vps--headless-запуск)\n- [Diagnostics \u002F doctor](#-diagnostics--doctor)\n- [Session reuse и сброс чатов](#-session-reuse-и-сброс-чатов)\n- [Multi-account pool](#-multi-account-pool)\n- [Идеи для консольной авторизации](#-идеи-для-консольной-авторизации)\n- [Проверка работы](#-проверка-работы)\n- [Примеры запросов](#-примеры-запросов)\n  - [Chat Completions](#chat-completions)\n  - [Reasoning](#reasoning)\n  - [Web search](#web-search)\n  - [Streaming](#streaming)\n  - [Anthropic Messages API](#anthropic-messages-api)\n  - [OpenAI Responses API](#openai-responses-api)\n  - [Tool calling](#tool-calling)\n- [Модели](#-модели)\n- [Endpoints](#-endpoints)\n- [Open WebUI](#-open-webui)\n- [Обновить логин](#-обновить-логин)\n- [Статус проекта](#-статус-проекта)\n\n---\n\n## ✨ Что это даёт\n\n- Использовать DeepSeek Web как локальный API endpoint.\n- Подключать DeepSeek к Open WebUI и другим OpenAI-compatible клиентам.\n- Получать обычные JSON-ответы или streaming SSE.\n- Использовать reasoning-модели с отдельным `reasoning_content`.\n- Работать с Anthropic Messages API shim для Claude Code \u002F Anthropic SDK.\n- Использовать OpenAI Responses API shim для новых OpenAI\u002FCodex-style клиентов.\n- Держать отдельные web-сессии для разных агентов\u002Fusers.\n\n## 🚀 Возможности\n\n- **OpenAI-compatible API:** `POST \u002Fv1\u002Fchat\u002Fcompletions`\n- **Anthropic-compatible shim:** `POST \u002Fv1\u002Fmessages`\n- **OpenAI Responses shim:** `POST \u002Fv1\u002Fresponses`\n- **Streaming:** SSE chunks и обычные non-stream JSON-ответы\n- **Reasoning output:** отдельный `reasoning_content` для thinking-моделей\n- **Tool calling:** парсинг OpenAI tools, Anthropic tools и Responses function tools\n- **Model capabilities:** `GET \u002Fv1\u002Fmodel-capabilities` с alias → real web mode\n- **Agent sessions:** отдельная DeepSeek-сессия на `user` \u002F agent id\n- **Session recovery:** авто-сброс устаревших chains\u002Fsessions\n- **Zero dependencies:** Node.js 18+, без npm-зависимостей\n\n---\n\n## ⚡ Быстрый старт\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FForgetMeAI\u002FFreeDeepseekAPI.git\ncd FreeDeepseekAPI\nnpm run auth\nnpm start\n```\n\n`npm run auth` открывает меню авторизации:\n\n1. выберите пункт `1`;\n2. войдите в DeepSeek в отдельном Chrome-профиле;\n3. отправьте короткое сообщение вроде `ok`;\n4. вернитесь в терминал и нажмите Enter.\n\n`npm start` показывает меню запуска:\n\n- `1` — авторизоваться \u002F обновить DeepSeek login\n- `2` — показать модели и статусы\n- `3` — запустить proxy\n- `4` — выйти\n\nДля headless\u002FCI-запуска без меню:\n\n```bash\nNON_INTERACTIVE=1 npm start\n# или\nSKIP_ACCOUNT_MENU=1 npm start\n```\n\nПо умолчанию сервер слушает:\n\n```text\nhttp:\u002F\u002Flocalhost:9655\n```\n\n---\n\n## 🪟 Windows запуск\n\n```powershell\ngit clone https:\u002F\u002Fgithub.com\u002FForgetMeAI\u002FFreeDeepseekAPI.git\ncd FreeDeepseekAPI\nnpm run auth\nnpm start\n```\n\nЕсли Chrome установлен нестандартно, явно укажите путь:\n\n```powershell\n$env:CHROME_PATH=\"C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe\"\nnpm run auth\n```\n\nЕсли Chrome не найден, `npm run auth` теперь печатает готовые инструкции для Windows\u002FmacOS\u002FLinux вместо загадочного stack trace.\n\n---\n\n## 🐧 Linux \u002F Chromium запуск\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002FForgetMeAI\u002FFreeDeepseekAPI.git\ncd FreeDeepseekAPI\nCHROME_PATH=$(which chromium) npm run auth\nnpm start\n```\n\nЕсли Chromium называется иначе:\n\n```bash\nCHROME_PATH=$(which chromium-browser) npm run auth\n# или\nCHROME_PATH=$(which google-chrome) npm run auth\n```\n\n---\n\n## 🖥 VPS \u002F headless запуск\n\nСамый надёжный flow без Chrome на сервере:\n\n1. На домашнем ПК, где есть GUI\u002FChrome:\n\n```bash\nnpm run auth\n```\n\n2. Скопируйте `deepseek-auth.json` на VPS:\n\n```bash\nscp deepseek-auth.json user@your-vps:\u002Fopt\u002FFreeDeepseekAPI\u002Fdeepseek-auth.json\n```\n\n3. На VPS импортируйте\u002Fпроверьте файл и выставьте безопасные права:\n\n```bash\ncd \u002Fopt\u002FFreeDeepseekAPI\nnpm run auth:import -- --input .\u002Fdeepseek-auth.json\nnpm run doctor -- --offline\n```\n\n4. Запускайте proxy без интерактивного меню:\n\n```bash\nNON_INTERACTIVE=1 npm start\n```\n\nМожно импортировать не только готовый `deepseek-auth.json`, но и browser cookie export:\n\n```bash\nDEEPSEEK_TOKEN=\"\u003Ctoken>\" npm run auth:import -- --input .\u002Fcookies.json\n```\n\n> Важно: `deepseek-auth.json` — это доступ к вашему DeepSeek Web login. Не коммитьте, не публикуйте, храните с правами `0600`.\n\n---\n\n## 🩺 Diagnostics \u002F doctor\n\n```bash\nnpm run doctor\n# без сетевых запросов к DeepSeek:\nnpm run doctor -- --offline\n```\n\n`doctor` проверяет:\n\n- найден ли `deepseek-auth.json` \u002F `DEEPSEEK_AUTH_DIR`;\n- валидный ли JSON;\n- есть ли `token`, `cookie`, `wasmUrl`;\n- безопасные ли права файла на macOS\u002FLinux (`0600`);\n- при обычном запуске — доступен ли DeepSeek PoW endpoint.\n\nЕсли видите `data.biz_data is null`, `fetch failed`, `401\u002F403\u002F429` или Hermes\u002FOpenCode не видит модели — первым делом запускайте `npm run doctor`.\n\n---\n\n## ♻️ Session reuse и сброс чатов\n\nFreeDeepseekAPI не создаёт новый DeepSeek чат на каждый HTTP-запрос без причины. Логика такая:\n\n- один `x-agent-session`, `session` или `user` → одна DeepSeek chat session;\n- если session id уже есть — proxy переиспользует его и продолжает chain через `parent_message_id`;\n- auto-reset происходит при TTL, ошибке DeepSeek session или слишком длинной цепочке сообщений;\n- локальная history сохраняется коротким контекстом, чтобы новая DeepSeek session могла продолжить разговор.\n\nЯвно задать agent\u002Fsession:\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -H \"x-agent-session: my-agent\" \\\n  -d '{\"model\":\"deepseek-chat\",\"messages\":[{\"role\":\"user\",\"content\":\"Привет\"}]}'\n```\n\nПосмотреть активные sessions:\n\n```bash\ncurl http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fsessions\n```\n\nСбросить одну session:\n\n```bash\ncurl -X POST \"http:\u002F\u002Flocalhost:9655\u002Freset-session?agent=my-agent\"\n```\n\nСбросить все sessions:\n\n```bash\ncurl -X POST \"http:\u002F\u002Flocalhost:9655\u002Freset-session?agent=all\"\n```\n\nПочему чаты всё равно появляются в DeepSeek Web: proxy работает через внутренний Web Chat API, а DeepSeek хранит реальные chat sessions у себя. Это нормально для web-proxy. Задача session reuse — не плодить новые чаты без необходимости и аккуратно сбрасываться только когда chain протух\u002Fсломался.\n\n---\n\n## 👥 Multi-account pool\n\nМожно подключить несколько auth-файлов. Правильная модель: sticky account per agent\u002Fsession — proxy не переключает аккаунт внутри живой DeepSeek-сессии. Если аккаунт получил `401\u002F403\u002F429` и ушёл в cooldown, session безопасно сбрасывается и новый запрос может перейти на другой доступный аккаунт.\n\nВариант 1 — директория с auth-файлами:\n\n```bash\nmkdir -p accounts\ncp deepseek-auth-main.json accounts\u002Fmain.json\ncp deepseek-auth-backup.json accounts\u002Fbackup.json\nchmod 600 accounts\u002F*.json\nDEEPSEEK_AUTH_DIR=.\u002Faccounts NON_INTERACTIVE=1 npm start\n```\n\nВариант 2 — список файлов:\n\n```bash\nDEEPSEEK_AUTH_PATH=\".\u002Faccounts\u002Fmain.json,.\u002Faccounts\u002Fbackup.json\" NON_INTERACTIVE=1 npm start\n```\n\nКак работает pool:\n\n- новый agent\u002Fsession получает доступный аккаунт round-robin;\n- выбранный аккаунт закрепляется за session (`sticky`);\n- при `401`, `403`, `429` аккаунт уходит в cooldown;\n- если sticky-аккаунт session ушёл в cooldown, старая DeepSeek-сессия сбрасывается, чтобы не долбить rate-limited\u002Fexpired аккаунт;\n- статус аккаунтов виден в `\u002Fhealth` без путей к auth-файлам и без имён файлов;\n- auth-файлы должны храниться с правами `0600`.\n\nНастроить cooldown:\n\n```bash\nDEEPSEEK_ACCOUNT_COOLDOWN_MS=600000 npm start\n```\n\n---\n\n## 🔑 Идеи для консольной авторизации\n\nПарольный flow из PR #3 можно делать, но безопаснее не хранить пароль и не делать это дефолтом. Нормальная реализация:\n\n1. `npm run auth:console` спрашивает email\u002Fтелефон и пароль через hidden prompt.\n2. Пароль держится только в памяти процесса, не пишется в файлы\u002Flogs\u002Fhistory.\n3. Скрипт повторяет Web login flow через `fetch`\u002FCDP: получает captcha\u002Fverify challenge, отдаёт человеку ссылку\u002Fкод, ждёт подтверждение.\n4. После успешного login сохраняется только `deepseek-auth.json` стандартного формата.\n5. Если DeepSeek просит captcha\u002F2FA — скрипт честно говорит “открой ссылку, пройди проверку, нажми Enter”, а не пытается обходить защиту.\n6. Для VPS лучше режим `auth:console --no-save-password --output deepseek-auth.json`.\n\nМинимальный безопасный MVP: console auth только интерактивный, без env-пароля. Допустимый automation-вариант: `DEEPSEEK_EMAIL=... npm run auth:console`, но пароль всё равно вводится hidden prompt.\n\n---\n\n## ✅ Проверка работы\n\n```bash\ncurl http:\u002F\u002Flocalhost:9655\u002F\ncurl http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fmodels\ncurl http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fmodel-capabilities\n```\n\nЕсли всё ок, `\u002Fhealth` вернёт статус сервера, список поддерживаемых aliases и `config_ready: true`.\n\n---\n\n## 🧪 Примеры запросов\n\n### Chat Completions\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"deepseek-chat\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Привет! Ответь одной фразой.\"}],\n    \"stream\": false\n  }'\n```\n\n### Reasoning\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"deepseek-reasoner\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Реши коротко: почему небо голубое?\"}],\n    \"stream\": false\n  }'\n```\n\nДля reasoning-моделей API отдаёт цепочку размышления отдельно от финального ответа:\n\n- non-stream: `choices[0].message.reasoning_content`\n- stream: `choices[0].delta.reasoning_content`\n- usage: `usage.completion_tokens_details.reasoning_tokens`\n\n`reasoning_tokens` — приблизительная оценка по извлечённому DeepSeek Web `THINK`-тексту, потому что web stream не отдаёт официальный token usage по reasoning отдельно.\n\n### Web search\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"deepseek-chat-search\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Найди свежий факт про DeepSeek и ответь кратко.\"}],\n    \"stream\": false\n  }'\n```\n\n### Streaming\n\n```bash\ncurl -N -X POST http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"deepseek-chat\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Напиши короткую шутку.\"}],\n    \"stream\": true\n  }'\n```\n\n### Anthropic Messages API\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fmessages \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"deepseek-chat\",\n    \"max_tokens\": 512,\n    \"messages\": [{\"role\": \"user\", \"content\": \"Ответь ровно OK\"}],\n    \"stream\": false\n  }'\n```\n\nДля Claude Code можно указывать backend напрямую:\n\n```bash\nexport ANTHROPIC_BASE_URL=\"http:\u002F\u002F127.0.0.1:9655\"\nexport ANTHROPIC_AUTH_TOKEN=\"dummy-key\"\nexport CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1\nclaude --model deepseek-chat\n```\n\n### OpenAI Responses API\n\n```bash\ncurl -X POST http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fresponses \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"deepseek-chat\",\n    \"input\": \"Ответь ровно OK\",\n    \"stream\": false\n  }'\n```\n\n### Tool calling\n\nFreeDeepseekAPI принимает:\n\n- OpenAI `tools`;\n- Anthropic `tools`;\n- Responses API function tools.\n\nПрокси просит DeepSeek вернуть строгий JSON tool call, но также умеет парсить fallback-форматы:\n\n- `TOOL_CALL:`\n- fenced JSON\n- `\u003Ctool_call>...\u003C\u002Ftool_call>`\n\n---\n\n## 🧠 Модели\n\n`GET \u002Fv1\u002Fmodels` возвращает только aliases, которые сейчас проверены и работают через этот proxy.\n\n### Рабочие aliases\n\n| Alias | Web mode | Reasoning | Web search | Комментарий |\n| --- | --- | --- | --- | --- |\n| `deepseek-chat` | `Быстрый` \u002F `default` | нет | нет | базовый chat |\n| `deepseek-v3` | `Быстрый` \u002F `default` | нет | нет | совместимый alias |\n| `deepseek-default` | `Быстрый` \u002F `default` | нет | нет | совместимый alias |\n| `deepseek-reasoner` | `Быстрый` \u002F `default` | да | нет | `thinking_enabled=true` |\n| `deepseek-r1` | `Быстрый` \u002F `default` | да | нет | R1-compatible alias |\n| `deepseek-chat-search` | `Быстрый` \u002F `default` | нет | да | web search |\n| `deepseek-default-search` | `Быстрый` \u002F `default` | нет | да | web search alias |\n| `deepseek-reasoner-search` | `Быстрый` \u002F `default` | да | да | reasoning + search |\n| `deepseek-r1-search` | `Быстрый` \u002F `default` | да | да | R1-compatible + search |\n| `deepseek-expert` | `Эксперт` \u002F `expert` | нет | нет | Expert mode |\n| `deepseek-v4-pro` | `Эксперт` \u002F `expert` | да | нет | Expert + reasoning |\n\nПолный маппинг:\n\n```bash\ncurl http:\u002F\u002Flocalhost:9655\u002Fv1\u002Fmodel-capabilities\n```\n\nПо официальной странице DeepSeek V4 Preview `deepseek-chat` и `deepseek-reasoner` сейчас route'ятся в `deepseek-v4-flash` non-thinking\u002Fthinking. В самом `chat.deepseek.com` direct stream точное имя чекпойнта не отдаётся (`model: \"\"`), поэтому proxy фиксирует одновременно web-режим (`default` \u002F `Быстрый`) и актуальную официальную маршрутизацию (`DeepSeek-V4-Flash`).\n\nТекущий вывод DeepSeek Web remote config показывает такие web-режимы:\n\n- `default` \u002F UI `Быстрый` — работает; поддерживает `thinking_enabled` и `search_enabled`.\n- `expert` \u002F UI `Эксперт` — работает через актуальный web-контракт (`x-client-version=2.0.0`) и поддерживает `thinking_enabled`. В `\u002Fv1\u002Fmodels` выдаются `deepseek-expert` без reasoning и `deepseek-v4-pro` как Expert + reasoning.\n- `vision` \u002F UI `Распознавание` — виден в remote config, но сейчас direct Web API возвращает `backend_err_by_model` (`Vision is temporarily unavailable`). Поэтому `deepseek-vision` скрыт из `\u002Fv1\u002Fmodels`.\n\nSearch для Expert по remote config недоступен, поэтому `deepseek-expert-search` остаётся unsupported.\n\n---\n\n## 🔌 Endpoints\n\n| Method | Path | Назначение |\n| --- | --- | --- |\n| `GET` | `\u002F` или `\u002Fhealth` | статус proxy |\n| `GET` | `\u002Fv1\u002Fmodels` | список рабочих OpenAI-compatible aliases |\n| `GET` | `\u002Fv1\u002Fmodel-capabilities` | полный маппинг aliases, real model, capabilities |\n| `POST` | `\u002Fv1\u002Fchat\u002Fcompletions` | OpenAI-compatible Chat Completions |\n| `POST` | `\u002Fv1\u002Fmessages` | Anthropic Messages API shim |\n| `POST` | `\u002Fv1\u002Fresponses` | OpenAI Responses API shim |\n| `GET` | `\u002Fv1\u002Fsessions` | активные локальные agent sessions |\n| `POST` | `\u002Freset-session?agent=\u003Cid>` | сбросить одну session |\n| `POST` | `\u002Freset-session?agent=all` | сбросить все sessions |\n\n---\n\n## 🖥 Open WebUI\n\nBase URL для Open WebUI в Docker:\n\n```text\nhttp:\u002F\u002Fhost.docker.internal:9655\u002Fv1\n```\n\nДля локального запуска без Docker:\n\n```text\nhttp:\u002F\u002Flocalhost:9655\u002Fv1\n```\n\nAPI key можно указать любой: proxy сам ходит в DeepSeek Web через сохранённую browser-сессию.\n\n---\n\n## 🔐 Обновить логин\n\n```bash\nnpm run auth\nnpm start\n```\n\nЕсли DeepSeek начал отвечать `401`, `403` или просит новый PoW\u002Fsession — повторите `npm run auth` и обновите сохранённую browser-сессию.\n\nЛокальные файлы авторизации не должны попадать в GitHub:\n\n- `deepseek-auth.json`\n- `.chrome-profile-deepseek\u002F`\n- `.env`\n\nОни уже добавлены в `.gitignore`.\n\n---\n\n## 🧪 Тесты\n\nСинтаксическая проверка проекта:\n\n```bash\nnpm test\n```\n\nLive smoke-тесты против запущенного локального proxy:\n\n```bash\nBASE_URL=http:\u002F\u002F127.0.0.1:9655 MODEL=deepseek-chat npm run test:live\n```\n\n---\n\n## 📌 Статус проекта\n\nFreeDeepseekAPI — экспериментальный web-chat proxy для локального использования и интеграций. Он зависит от текущего контракта DeepSeek Web Chat, поэтому при изменениях на стороне DeepSeek может потребоваться обновление auth\u002Fsession logic или model mapping.\n\nЕсли что-то перестало работать:\n\n1. обновите логин через `npm run auth`;\n2. проверьте `\u002Fv1\u002Fmodel-capabilities`;\n3. повторите запрос на свежей сессии;\n4. если проблема сохраняется — вероятно, DeepSeek изменил внутренний Web API.\n\n---\n\n\u003Cp align=\"center\">\n  \u003Cstrong>ForgetMeAI\u003C\u002Fstrong> · \u003Ca href=\"https:\u002F\u002Ft.me\u002Fforgetmeai\">Telegram\u003C\u002Fa>\n\u003C\u002Fp>\n",2,"2026-06-11 04:11:50","CREATED_QUERY"]