Commit Graph

39 Commits (719dfa2015cf49a5f81d9b184f845f0184cce2f4)

Author SHA1 Message Date
mirivlad 719dfa2015 fix: исправлены критические ошибки в коде
- GigaChatProvider: добавлено наследование от BaseAIProvider и методы
- Компактификация: исправлен парсинг JSON-ответа Qwen
- Compactor: добавлена проверка на None
- Векторный поиск: исправлена структура результатов ChromaDB
- extract_facts_with_ai: добавлена проверка авторизации Qwen
- SSH сессия: исправлена логика буфера вывода
- Cron job: добавлено обновление next_run после выполнения
2026-03-05 01:52:56 +08:00
Vladimir 107685771c Добавлена блокировка реакций на действия бота + обновление системного промпта
- Добавлены паттерны блокировки в ai_agent.py для ddgs, rss, ssh, cron
- Обновлён SYSTEM_PROMPT.md с разделом про блокировку реакций
- Обновлён system_prompt.md с версией 0.8.0
- Добавлен приоритет File System tool перед SSH
- Обновлена таблица версий

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 13:34:53 +00:00
Vladimir 09fb020745 v0.8.0: Исправление OAuth + память файлов + совместимость PTB 20.7+
Основные изменения:
- Исправлена рекурсия в qwen_oauth.py (RecursionError при проверке токенов)
- Добавлена проверка force=True в _load_credentials()
- Бот теперь запоминает загруженные файлы в памяти ИИ (ai_chat_history + vector_memory)
- Сохранение полного абсолютного пути к файлу для корректной работы ИИ
- Исправлена совместимость с python-telegram-bot 20.7+:
  - MAX_FILE_SIZE_DOWNLOAD → локальная константа
  - filters.STICKER → filters.Sticker.ALL
- Обновлена версия бота до 0.8.0

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-02 07:19:33 +00: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 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 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 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 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 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 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 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 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
mirivlad 95de7b8d85 fix: добавить миграции для всех колонок в cron_jobs
- Добавить проверку и миграции для колонок: prompt, user_id, enabled, notify, log_results, last_run, next_run
- Исправляет ошибку 'no such column: prompt' при запуске со старой БД

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 13:41:30 +08:00
mirivlad b748ceefb7 fix: исправить вызов метода get_tool() → get() в ToolsRegistry
- bot.py: исправить tools_registry.get_tool() на tools_registry.get()
- bot/handlers/commands.py: исправить tools_registry.get_tool() на tools_registry.get()

Исправляет ошибку AttributeError при запуске бота

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 13:39:18 +08:00
mirivlad f559c83baa feat: интеллектуальная cron-система с AI-агентом
Основные изменения:
- CronJob теперь хранит prompt для ИИ вместо команды
- Добавлены поля: user_id, notify, log_results
- Задачи выполняются через AI-агент (автономный выбор инструмента)
- Планировщик проверяет задачи каждую минуту
- Уведомления отправляются в Telegram (если notify=True)
- Результаты сохраняются в cron_logs/ (если log_results=True)
- Добавлена команда /cron для управления задачами
- Обновлена БД и модель данных

Новые файлы:
- bot/services/cron_scheduler.py - планировщик задач
- CRON_SYSTEM.md - документация

Изменённые файлы:
- bot/tools/cron_tool.py - обновлён для работы с промптами
- bot/handlers/commands.py - добавлена cron_command
- bot.py - интеграция планировщика, регистрация команды
- .gitignore - исключение cron_logs/

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 12:36:32 +08:00
mirivlad 09867ef558 fix: unify tool naming (ddgs_tool, rss_tool, ssh_tool, cron_tool)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 12:13:38 +08:00
mirivlad 1dc40507c6 feat: add dialogue compaction module for context management
- bot/compaction.py: новый модуль для сжатия истории диалога
- Автоматическая компактификация при 70% заполнении контекста
- Сохранение summary в ChromaDB с структурированным форматом
- Интеграция с handle_ai_task для прозрачной работы
- Сохраняет последние 20 сообщений без изменений
- Структурированный промпт: факты, URL, серверы, настройки, решения

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 12:09:30 +08:00
mirivlad 2773680da1 feat: add AI agent tools, system prompt, and compaction module
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 09:52:10 +08:00
mirivlad 50dcec82fc fix: восстановить работу Markdown в send_long_message
- has_markdown переименован в has_code (более точно)
- Теперь Markdown применяется ко всем сообщениям если передан parse_mode
- Блоки кода без разрывов тоже работают с Markdown

Version: 0.5.5

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 00:24:31 +08:00
mirivlad 33263e6630 refactor: окончательная очистка bot.py от дубликатов
- bot.py: 2365 → 1411 строк (-954 строки, -40%)
- Удалены дублирующиеся функции которые теперь в модулях:
  - start_command, menu_command, help_command, settings_command → bot/handlers/commands.py
  - menu_callback → bot/handlers/callbacks.py
  - execute_cli_command, _execute_local_command, _execute_ssh_command, _show_result → bot/services/command_executor.py
  - clean_ansi_codes, normalize_output, split_message, send_long_message → bot/utils/
  - init_menus → bot/keyboards/menus.py
- Оставлены только:
  - handle_text_message, handle_ai_task
  - handle_ssh_session_input, handle_local_session_input, handle_server_input
  - finish_edit_server, stop_command, ai_command, memory_command, facts_command, forget_command
  - post_init, main
- Исправлены импорты в decorators.py, command_executor.py
- Добавлены ssh_session_manager, local_session_manager в bot/models/session.py

Version: 0.5.4

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 00:07:00 +08:00
mirivlad 5b332c33dd fix: добавить импорт config в decorators.py
- NameError: config not defined в @check_access
- Добавлен импорт from bot.config import config

Version: 0.5.3

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 23:59:32 +08:00
mirivlad 04ac125da6 fix: умная разбивка длинных сообщений с сохранением форматирования
- find_code_blocks — поиск блоков кода
- split_message — возвращает (text, has_markdown) для каждого сообщения
- send_long_message — отправляет блоки кода с Markdown, остальное без разметки
- Блоки кода не разрываются между сообщениями
- Слинные блоки кода отправляются частями без Markdown
- Нумерация добавляется автоматически

Version: 0.5.2

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 23:58:04 +08:00
mirivlad e9186e9dd2 refactor: разделение хендлеров и сервисов по модулям
- bot/handlers/commands.py - команды (/start, /menu, /help, /settings)
- bot/handlers/callbacks.py - callback от меню (468 строк)
- bot/services/command_executor.py - выполнение команд (299 строк)
- bot.py сокращён до 1330 строк (было 2365, -1000 строк!)

Итого:
- models: 425 строк
- utils: 384 строки
- keyboards: 200 строк
- handlers: 600 строк
- services: 300 строк
- bot.py: 1330 строк (точка входа + хендлеры сообщений)

Version: 0.5.1

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 23:47:12 +08:00
mirivlad d1592c7b38 refactor: модульная структура бота (v0.5.0)
Рефакторинг кода бота для улучшения поддерживаемости:

Структура:
- bot/models/ — модели данных (Server, UserState, сессии)
- bot/utils/ — утилиты (очистка текста, форматирование, декораторы)
- bot/keyboards/ — Inline-клавиатуры и меню
- bot/services/ — бизнес-логика (выполнение команд)
- bot/handlers/ — обработчики событий (пустые для будущего заполнения)
- bot/config.py — конфигурация и глобальные объекты

Изменения:
- bot.py сокращён с 3240 до 2364 строк (-900 строк дубликатов)
- Все модели перенесены в отдельные модули
- Утилиты разделены по назначению (cleaners, formatters, decorators)
- Меню вынесено в keyboards/menus.py
- Импорты из новой структуры через bot.config и bot.models

Преимущества:
- Лучшая организация кода
- Упрощённое тестирование модулей
- Легче добавлять новый функционал
- Чёткое разделение ответственности

Version: 0.5.0

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 23:32:26 +08:00