Commit Graph

96 Commits (c997c4b55e7047b8372bb57f7e04b42061048b0c)

Author SHA1 Message Date
mirivlad c997c4b55e Добавлен aiohttp в requirements.txt для OAuth авторизации
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 22:07:29 +08:00
mirivlad 769c662ab5 Версия 0.8.1 - Автоматическая OAuth авторизация Qwen Code
Основные изменения:
- Добавлена автоматическая 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>
2026-03-01 22:06:14 +08:00
mirivlad 9854836b17 Обновление документации для версии 0.8.0
- Обновлена версия в README.md, TODO.md, SYSTEM_PROMPT.md, CRON_SYSTEM.md
- Добавлены отметки о реализованных функциях в TODO.md
- Обновлена таблица версий в SYSTEM_PROMPT.md

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-01 19:19:47 +08:00
mirivlad 9f906af400 Версия 0.8.0 - Исправление SSH и команда /restart_bot
Основные изменения:
- Исправлено чтение вывода 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>
2026-03-01 19:18:17 +08:00
mirivlad 02971d83ef v0.7.5: Исправление кнопки Отмена в редактировании сервера
Проблема:
- При нажатии ' Отмена' в режиме редактирования сервера
  бот продолжал ждать ввода и игнорировал другие команды

Исправление:
- Добавлен сброс состояния (waiting_for_input, input_type, editing_server, context)
  при нажатии кнопки 'server_menu' в menu_callback

Теперь:
- Кнопка ' Отмена' корректно возвращает в меню серверов
- Бот больше не зависает в режиме ожидания ввода

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 11:36:34 +08:00
mirivlad 3858bb36ce v0.7.4: Обновление версии + TODO.md
- Обновлена версия бота до 0.7.4
- Добавлен TODO.md со списком задач для тестирования

TODO:
- Тестирование CRUD операций SSH серверов
- Проверка работы команд при подключении по SSH
- Тестирование обработки ошибок и длинного вывода

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-28 11:32:45 +08:00
mirivlad 81148ee567 v0.7.3: Косметические изменения в меню
Удалено из меню:
- Команда /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>
2026-02-28 11:25:48 +08:00
mirivlad d2f22ee149 v0.7.2: Исправление зависания бота и обработки длинного вывода
Исправленные проблемы:
- Бот зависал после выполнения команд из кнопок меню
- 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>
2026-02-28 11:10:29 +08:00
mirivlad 577bfce85e fix: используем state.output_wait_message вместо wait_msg
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 20:11:57 +08:00
mirivlad d20092730e fix: polling подход для ожидания кнопок вместо asyncio.Event
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 20:01:28 +08:00
mirivlad 42e1043f28 feat: добавлено логирование для отладки кнопок
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 19:55:35 +08:00
mirivlad d0f91d7daa fix: используем asyncio.Event для неблокирующего ожидания кнопок
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 19:49:19 +08:00
mirivlad 40ce40f218 fix: parse_mode используется когда мы внутри блока кода
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 19:33:33 +08:00
mirivlad 359d203c41 feat: новая команда прерывает ожидание кнопки продолжения вывода
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 19:29:49 +08:00
mirivlad 85947754c7 fix: кнопки удаляются сразу после нажатия, ожидание бесконечное
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 19:20:48 +08:00
mirivlad 4b69ee0310 fix: переписан split_message с отслеживанием состояния блока кода
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 19:06:40 +08:00
mirivlad ba13eb2a1a fix: не экранировать backticks в выводе команд для правильной разбивки блоков кода
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 18:40:16 +08:00
mirivlad 28e671af9c fix: правильная разбивка длинных блоков кода на части
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 18:30:10 +08:00
mirivlad 2557440a39 fix: номер сообщения теперь добавляется после открывающего блока кода
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 18:26:30 +08:00
mirivlad 0a8801afec fix: исправлено форматирование блоков кода при разбивке длинных сообщений
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 18:11:46 +08:00
mirivlad fbf0edc60a v0.7.2: Улучшения AI-провайдеров, инструменты и обработчики
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-27 18:07:57 +08:00
mirivlad 0648bc43a8 v0.7.1: Добавлена документация по AI Provider Architecture
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-26 23:26:36 +08:00
mirivlad 1c66bc4c01 v0.7.1: Универсальный интерфейс AI-провайдеров с поддержкой инструментов
- Добавлен базовый класс BaseAIProvider с единым интерфейсом
- Реализованы QwenCodeProvider и GigaChatProvider
- AIProviderManager использует единый процесс с инструментами
- Любой AI-провайдер теперь может работать с инструментами
- Поддержка process_with_tools для всех провайдеров

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-26 23:25:47 +08:00
mirivlad 7a186e777a Update version to 0.7.0
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-26 23:21:48 +08:00
mirivlad e538d84e13 v0.7: AI Provider Manager для работы с любым AI-провайдером (Qwen, GigaChat)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-26 23:21:20 +08:00
mirivlad 77397269e1 Улучшены триггеры для RSS — более строгие условия (v0.5.3)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-26 11:05:22 +08:00
mirivlad 5b52566f0e v0.5.4: Добавлена поддержка GigaChat API (Сбер)
- Новый инструмент 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>
2026-02-26 07:33:56 +08:00
mirivlad 7c088e2051 v0.5.3: Улучшение инструментов (SSH, cron, RSS) и интеграции с Qwen
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-26 07:32:07 +08:00
mirivlad f208ffecf7 fix: правильно извлекать NVM_VERSION из dirname NODE_PATH
- dirname(NODE_PATH) = /home/user/.../node/v24.13.1
- basename(dirname(NODE_PATH)) = v24.13.1 ✓
- dirname(dirname(NODE_PATH)) = /home/user/.../node (NVM_BASE)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:49:16 +08:00
mirivlad c5239875ad fix: исправить извлечение NVM_VERSION из NVM_BASE а не NODE_PATH
- basename NODE_PATH возвращал 'bin' вместо 'v24.13.1'
- Теперь basename берётся от NVM_BASE что даёт правильную версию

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:47:20 +08:00
mirivlad 917f70f858 feat: добавить подробный дебаг поиска путей в install-systemd-service.sh
- Вывод NODE_BIN, NODE_PATH, NVM_BASE, NVM_VERSION
- Вывод пути поиска qwen и результата проверки [ -e ]
- ls -la для найденного qwen

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:46:01 +08:00
mirivlad edb5c77cc6 fix: упростить поиск qwen - проверять только существование файла
- find ищет node без проверок на исполняемость
- qwen ищется через проверку [ -e ] (существует ли файл)
- Без проверок на тип файла (симлинк/обычный) и исполняемость

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:44:32 +08:00
mirivlad 8675344e98 fix: добавить -L к find для следования симлинкам
- qwen — это симлинк на ../lib/node_modules/@qwen-code/qwen-code/cli.js
- find -L следует за симлинками и находит qwen
- Проверка файла включает проверку на симлинк [ ! -L ]

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:39:56 +08:00
mirivlad c6153a993d fix: искать node и qwen в /home/$BOT_USER а не во всём /home
- find /home/ вместо find /home
- Избегает поиска в чужих домашних директориях
- Более точное определение путей

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:37:42 +08:00
mirivlad 85843212c2 fix: определять qwen через найденную версию nvm
- Сначала находим node через find
- Извлекаем версию nvm из пути (например v24.13.1)
- Ищем qwen в той же версии nvm: $NVM_BASE/$NVM_VERSION/bin/qwen
- Более надёжное определение путей

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:36:23 +08:00
mirivlad 3c9e78db09 fix: использовать find вместо which для определения путей
- find не зависит от PATH и .bashrc
- Ищет исполняемые файлы qwen и node напрямую
- Более надёжное определение путей nvm

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:33:29 +08:00
mirivlad ee02eb896a fix: использовать source ~/.bashrc для загрузки nvm
- Явный source ~/.bashrc перед выполнением команд
- Исправляет определение пути к qwen и node

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:31:47 +08:00
mirivlad ea6aebedef fix: использовать bash --login для загрузки nvm окружения
- bash --login загружает .bashrc где инициализируется nvm
- Исправляет определение пути к qwen и node

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:30:17 +08:00
mirivlad 1ed49841c7 fix: использовать SUDO_USER вместо USER в install-systemd-service.sh
- При запуске через sudo $USER становится 'root'
- $SUDO_USER содержит имя пользователя который вызвал sudo
- Исправляет определение пользователя и путей nvm

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:29:31 +08:00
mirivlad a0eb82c403 fix: использовать sudo -u вместо su - в install-systemd-service.sh
- su - требует пароль, sudo -u работает без пароля
- Исправляет проблему с определением пути к qwen и node

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:28:20 +08:00
mirivlad d7e6dd6bd0 fix: динамическое определение пути nvm в install-systemd-service.sh
- Исправлена команда установки qwen: @qwen-code/qwen-code (не @anthropic)
- Динамическое определение Node.js пути через 'which node' (не хардкод версии)
- При обновлении nvm путь автоматически подстроится
- Добавлен вывод отладочной информации при установке

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:24:51 +08:00
mirivlad f24245829d fix: обновить PATH в systemd сервисе
- Добавить полный PATH с nvm путем первым
- Добавить NODE_PATH для глобальных npm пакетов
- Исправляет ошибку 'qwen: command not found'

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:20:47 +08:00
mirivlad 76877bec01 fix: отключить security hardening в systemd сервисе
- Убрать ProtectSystem, ProtectHome, ReadWritePaths
- Для личного бота ограничения не нужны, только создают проблемы
- Бот работает от имени пользователя и должен иметь полный доступ

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:16:57 +08:00
mirivlad 359f6a66c1 fix: добавить доступ к ~/.cache для huggingface модели
- Добавить %HOME%/.cache в ReadWritePaths
- Исправляет ошибку загрузки sentence-transformers модели
- Модель уже загружена в кэше, теперь сервис сможет её использовать

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:14:37 +08:00
mirivlad caf9d70515 fix: обновить systemd сервис для работы с nvm и qwen
- Добавить пути nvm и node в PATH
- Добавить ReadWritePaths для ~/.nvm и ~/.config/nvm
- Обновить install-systemd-service.sh для авто-определения путей
- Исправляет ошибку 'qwen: command not found'

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:10:30 +08:00
mirivlad b8605efaf6 fix: добавить ReadWritePaths в systemd сервис
- Добавить ReadWritePaths=%WORKDIR% для разрешения записи в БД
- Исправляет ошибку 'attempt to write a readonly database' от ChromaDB

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 15:08:07 +08:00
mirivlad d84271110c feat: чат с ИИ включен по умолчанию + systemd сервис
Изменения:
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>
2026-02-25 14:57:13 +08:00
mirivlad bedb5d96a0 fix: инициализировать compactor при старте бота
- Добавить инициализацию компактора в post_init()
- Убрать дублирующую инициализацию из handle_ai_task()
- Исправляет ошибку при вызове компактификации через меню памяти

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 14:52:03 +08:00
mirivlad a13db1490b feat: добавить команду /compact в меню памяти ИИ
- Добавлена кнопка '🔄 Компактификация' в меню memory_menu
- Реализован callback handler для memory_compact
- Компактификация запускается из меню с отображением прогресса
- Исправление: команда /compact теперь доступна через меню

Version: 0.5.3

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 14:39:57 +08:00
mirivlad d34c722471 feat: полноценная поддержка cron с croniter
Улучшения cron-системы:
- Интеграция библиотеки croniter для полноценного cron-синтаксиса
- Поддержка всех cron-выражений: */5 * * * *, 0 5 * * *, @daily и т.д.
- Автоматический пересчёт next_run после выполнения задачи
- Защита от duplicate execution (проверка last_run)
- Миграции для всех колонок БД (prompt, user_id, notify, log_results и др.)

Исправленные проблемы:
- Задачи выполнялись только один раз (не обновлялся next_run)
- Примитивный парсер расписания (только */N, @hourly, @daily)
- Возможность двойного выполнения при перезапуске бота

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 14:32:30 +08:00