# new-qwen Клиент-серверная замена локального агента `qwen-code`. - `serv` отвечает за OAuth, сессии, работу с Qwen LLM и вызов инструментов. - `bot` отвечает за Telegram и пересылку сообщений на сервер. Проект написан на Python stdlib, чтобы не зависеть от Node/npm в текущем окружении. ## Архитектура ```text Telegram User | v bot/app.py | v serv/app.py | v Qwen OAuth + OpenAI-compatible endpoint ``` ## Что уже реализовано - Qwen OAuth Device Flow, совместимый с `qwen-code` - хранение токенов в `~/.qwen/oauth_creds.json` - HTTP API сервера - агентный цикл с tool calling - инструменты: `list_files`, `glob_search`, `grep_text`, `stat_path`, `read_file`, `write_file`, `make_directory`, `exec_command` - Telegram polling без внешних библиотек - JSON-хранилище сессий - API списка и просмотра сессий ## Ограничения текущей реализации - это упрощённая серверная архитектура, а не побайтный порт всего `qwen-code` - пока нет MCP, skill system, subagents и rich-streaming UI - Telegram-бот работает через long polling ## Переменные окружения Сервер: ```bash cp serv/.env.example serv/.env ``` Бот: ```bash cp bot/.env.example bot/.env ``` ## Запуск Сервер: ```bash python3 serv/app.py ``` Бот: ```bash python3 bot/app.py ``` ## Авторизация Qwen OAuth 1. Отправить боту `/auth` 2. Открыть ссылку подтверждения 3. После завершения авторизации писать обычные сообщения боту Либо можно вызвать API сервера напрямую: ```bash curl -X POST http://127.0.0.1:8080/api/v1/auth/device/start ``` ## API - `GET /health` - `GET /api/v1/auth/status` - `POST /api/v1/auth/device/start` - `POST /api/v1/auth/device/poll` - `GET /api/v1/sessions` - `POST /api/v1/session/get` - `POST /api/v1/session/clear` - `POST /api/v1/chat`