Skip to main content
Glama
README.md
# Qwen Studio Browser Gateway

[English](README.en.md)

Неофициальный localhost-only gateway, который даёт Claude Code одно дополнительное **недоверенное экспертное мнение Qwen 3.8 Max** через вручную авторизованную web-сессию `chat.qwen.ai`.

Это **не официальный Qwen API**, не основной агент и не источник гарантированно правильных ответов. Пользователь входит на сайт вручную на каждом хосте; проект не переносит cookies/tokens, не обходит CAPTCHA/MFA и не даёт Qwen доступ к shell, filesystem или локальным tools.

## Поток

```text
Claude Code
  └─ MCP ask_qwen_expert
       └─ http://127.0.0.1:8798/v1/expert
            └─ FIFO, active = 1
                 └─ CDP http://127.0.0.1:9333
                      └─ одна видимая вкладка https://chat.qwen.ai
                           └─ точная Qwen3.8-Max
```

Перед каждым Send gateway выбирает и подтверждает `qwen3.8-max` / `Qwen3.8-Max`. Несовпадение модели, неизвестный DOM, challenge, отсутствие login или удалённый endpoint завершаются ошибкой. После Send browser generation не повторяется автоматически.

## Требования

- Node.js 22+;
- Chrome/Chromium с графическим окном;
- Linux для готовых systemd user templates (сам Node.js gateway переносим);
- собственный аккаунт Qwen и право использовать web-сервис.

## Установка

```bash
npm ci
npm run check
npm run build
npm test
```

Создайте приватную конфигурацию:

```bash
install -d -m 700 ~/.config/qwen-studio-browser-gateway
cp .env.example ~/.config/qwen-studio-browser-gateway/server.env
chmod 600 ~/.config/qwen-studio-browser-gateway/server.env
```

Отредактируйте `server.env`:

- задайте локальный `QWEN_BROWSER_EXECUTABLE_PATH`;
- сгенерируйте новый случайный `QWEN_LOCAL_API_KEY` для этого хоста;
- не меняйте loopback endpoints;
- перед использованием подтвердите актуальные ID/label сильнейшей модели в живом UI.

Не коммитьте `server.env` и browser profile.

## Ручной вход

Запустите отдельный браузер:

```bash
set -a
source ~/.config/qwen-studio-browser-gateway/server.env
set +a
./start-qwen-browser.sh
```

В открытом окне войдите на `https://chat.qwen.ai` самостоятельно. CAPTCHA и MFA проходит только пользователь. Оставьте одну вкладку Qwen открытой.

В другом терминале запустите gateway:

```bash
set -a
source ~/.config/qwen-studio-browser-gateway/server.env
set +a
node dist/cli.js serve
```

Для постоянного Linux user service используйте шаблоны в [`systemd/`](systemd/) и инструкцию [`docs/setup.md`](docs/setup.md).

## Безопасные smoke-тесты

Эти запросы не запускают генерацию:

```bash
node dist/cli.js browser doctor
curl -fsS -H "Authorization: Bearer $QWEN_LOCAL_API_KEY" \
  http://127.0.0.1:8798/health
curl -fsS -H "Authorization: Bearer $QWEN_LOCAL_API_KEY" \
  http://127.0.0.1:8798/v1/models
node dist/cli.js mcp install-config
```

`POST /v1/expert` и `POST /v1/chat/completions` запускают реальную web-генерацию и могут расходовать quota.

## Claude Code MCP

После `npm run build` выполните:

```bash
node dist/cli.js mcp install-config
```

Команда печатает переносимый JSON с текущими путями Node.js и `dist/cli.js`. Добавьте объект `qwen-expert` в MCP-конфигурацию Claude Code на этом хосте. MCP публикует только `ask_qwen_expert`; ответ всегда помечается как advisory и должен проверяться независимо.

## Границы безопасности

- HTTP и CDP принимают только loopback endpoints.
- `QWEN_WEB_URL` принимает только origin `https://chat.qwen.ai`.
- Локальный API key обязателен.
- Prompt-ы не логируются; screenshots выключены по умолчанию.
- Одна вкладка и одна FIFO-очередь предотвращают смешивание ответов.
- Qwen не получает executable tools или локальные файлы.
- Проект не предназначен для обхода ограничений сайта или массовой автоматизации.

Подробнее: [`AGENTS.md`](AGENTS.md), [`docs/architecture.md`](docs/architecture.md), [`docs/security.md`](docs/security.md), [`docs/troubleshooting.md`](docs/troubleshooting.md).