Основные изменения:
- Добавлена автоматическая OAuth авторизация для Qwen Code
- При первом запросе к Qwen бот отправляет ссылку на авторизацию
- После авторизации токены сохраняются в ~/.qwen/oauth_creds.json
- Добавлена команда /qwen_auth для явной авторизации
- Ссылка на авторизацию кликабельная в Telegram
Новые файлы:
- bot/utils/qwen_oauth.py — OAuth 2.0 Device Flow клиент
- authorize_qwen.sh — скрипт для ручной авторизации
Изменения:
- bot.py — проверка авторизации в handle_ai_task, qwen_auth_command
- bot/models/user_state.py — поле waiting_for_qwen_oauth
- qwen_integration.py — интеграция с OAuth модулем
- README.md — версия 0.8.1
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Обновлена версия в README.md, TODO.md, SYSTEM_PROMPT.md, CRON_SYSTEM.md
- Добавлены отметки о реализованных функциях в TODO.md
- Обновлена таблица версий в SYSTEM_PROMPT.md
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Основные изменения:
- Исправлено чтение вывода SSH команд (wait_and_read_ssh вместо цикла с таймаутом)
- Добавлена команда /restart_bot для перезапуска бота через sudo
- Пароль sudo запрашивается у пользователя (ИИ отключается на время ввода)
- После перезапуска бот отправляет уведомление с главным меню
- Улучшена обработка stdout/stderr в SSH инструменте
Исправленные проблемы:
- SSH команды не возвращали вывод (returncode был None до завершения процесса)
- Использован подход с параллельным чтением потоков и process.wait()
- Команда /restart_bot использует script для создания PTY
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Проблема:
- При нажатии '❌ Отмена' в режиме редактирования сервера
бот продолжал ждать ввода и игнорировал другие команды
Исправление:
- Добавлен сброс состояния (waiting_for_input, input_type, editing_server, context)
при нажатии кнопки 'server_menu' в menu_callback
Теперь:
- Кнопка '❌ Отмена' корректно возвращает в меню серверов
- Бот больше не зависает в режиме ожидания ввода
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Обновлена версия бота до 0.7.4
- Добавлен TODO.md со списком задач для тестирования
TODO:
- Тестирование CRUD операций SSH серверов
- Проверка работы команд при подключении по SSH
- Тестирование обработки ошибок и длинного вывода
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Удалено из меню:
- Команда /ai из списка команд бота
- Кнопка 'Управление доступом' из меню настроек
- Кнопка 'AI-провайдер' из меню настроек
Также удалены обработчики:
- access_menu, show_access, add_access, remove_access
- ai_provider_menu, ai_provider_toggle, ai_provider_info
Команды /ai* и AI-провайдеры остаются доступными через:
- /ai_presets, /ai_off, /ai_qwen, /ai_giga_*
- Прямые команды /ai
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Исправленные проблемы:
- Бот зависал после выполнения команд из кнопок меню
- PTY цикл зацикливался при ошибке чтения ([Errno 5] Input/output error)
- CallbackQuery обрабатывался неправильно (effective_user vs from_user)
- Длинные сообщения разбивались с неправильным экранированием Markdown
- Event loop блокировался при ожидании кнопок Продолжить/Отменить
Изменения:
1. bot/utils/ssh_readers.py — исправлено зависание read_pty_output()
2. bot/utils/formatters.py — переписана send_long_message() без блокировки event loop
3. bot/handlers/callbacks.py — обработка кнопок continue_output_/cancel_output
4. bot/models/user_state.py — добавлены поля для управления выводом
5. bot/services/command_executor.py — ограничитель итераций в цикле PTY
6. bot/utils/formatters.py — escape_markdown() не экранирует содержимое блоков кода
7. bot.py — мелкие исправления
Теперь:
- Кнопки меню работают корректно
- Длинный вывод разбивается на части с кнопками Продолжить/Отменить
- Бот не зависает и продолжает обрабатывать команды
- Markdown рендеринг работает правильно
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавлен базовый класс BaseAIProvider с единым интерфейсом
- Реализованы QwenCodeProvider и GigaChatProvider
- AIProviderManager использует единый процесс с инструментами
- Любой AI-провайдер теперь может работать с инструментами
- Поддержка process_with_tools для всех провайдеров
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Новый инструмент gigachat_tool для работы с GigaChat API
- GigaChatProvider в qwen_integration как альтернатива Qwen Code
- Настройки GigaChat и YandexGPT в .env.example
- Документация по настройке в README.md
- GigaChatCapability зарегистрирован в реестре инструментов
- Поддержка системных промптов, температуры, лимита токенов
- Автоматическое получение и кэширование OAuth токена
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- basename NODE_PATH возвращал 'bin' вместо 'v24.13.1'
- Теперь basename берётся от NVM_BASE что даёт правильную версию
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- find ищет node без проверок на исполняемость
- qwen ищется через проверку [ -e ] (существует ли файл)
- Без проверок на тип файла (симлинк/обычный) и исполняемость
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- qwen — это симлинк на ../lib/node_modules/@qwen-code/qwen-code/cli.js
- find -L следует за симлинками и находит qwen
- Проверка файла включает проверку на симлинк [ ! -L ]
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- find /home/ вместо find /home
- Избегает поиска в чужих домашних директориях
- Более точное определение путей
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Сначала находим node через find
- Извлекаем версию nvm из пути (например v24.13.1)
- Ищем qwen в той же версии nvm: $NVM_BASE/$NVM_VERSION/bin/qwen
- Более надёжное определение путей
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- find не зависит от PATH и .bashrc
- Ищет исполняемые файлы qwen и node напрямую
- Более надёжное определение путей nvm
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- bash --login загружает .bashrc где инициализируется nvm
- Исправляет определение пути к qwen и node
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- При запуске через sudo $USER становится 'root'
- $SUDO_USER содержит имя пользователя который вызвал sudo
- Исправляет определение пользователя и путей nvm
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- su - требует пароль, sudo -u работает без пароля
- Исправляет проблему с определением пути к qwen и node
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Исправлена команда установки qwen: @qwen-code/qwen-code (не @anthropic)
- Динамическое определение Node.js пути через 'which node' (не хардкод версии)
- При обновлении nvm путь автоматически подстроится
- Добавлен вывод отладочной информации при установке
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавить полный PATH с nvm путем первым
- Добавить NODE_PATH для глобальных npm пакетов
- Исправляет ошибку 'qwen: command not found'
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Убрать ProtectSystem, ProtectHome, ReadWritePaths
- Для личного бота ограничения не нужны, только создают проблемы
- Бот работает от имени пользователя и должен иметь полный доступ
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавить %HOME%/.cache в ReadWritePaths
- Исправляет ошибку загрузки sentence-transformers модели
- Модель уже загружена в кэше, теперь сервис сможет её использовать
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавить пути nvm и node в PATH
- Добавить ReadWritePaths для ~/.nvm и ~/.config/nvm
- Обновить install-systemd-service.sh для авто-определения путей
- Исправляет ошибку 'qwen: command not found'
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавить ReadWritePaths=%WORKDIR% для разрешения записи в БД
- Исправляет ошибку 'attempt to write a readonly database' от ChromaDB
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Изменения:
1. Чат с ИИ агентом теперь включен по умолчанию (ai_chat_mode=True)
- При первом запуске бота чат с ИИ активен
- Кнопка в меню показывает '✅ Выключить чат с ИИ'
- Пользователь может выключить через настройки
2. Systemd сервис для автозапуска бота
- telegram-bot.service - шаблон сервиса
- install-systemd-service.sh - скрипт установки
- Поддержка start/stop/restart/status
- Логирование через journalctl
- Security hardening (NoNewPrivileges, ProtectSystem)
3. Обновлена документация в README
- Добавлен раздел про systemd сервис
- Версия обновлена до 0.7.0
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- Добавить инициализацию компактора в post_init()
- Убрать дублирующую инициализацию из handle_ai_task()
- Исправляет ошибку при вызове компактификации через меню памяти
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>