Основные изменения:
- Исправлено чтение вывода 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>
- Обновлена версия бота до 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>
- Добавить инициализацию компактора в post_init()
- Убрать дублирующую инициализацию из handle_ai_task()
- Исправляет ошибку при вызове компактификации через меню памяти
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Основные изменения:
- 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>
- bot/compaction.py: новый модуль для сжатия истории диалога
- Автоматическая компактификация при 70% заполнении контекста
- Сохранение summary в ChromaDB с структурированным форматом
- Интеграция с handle_ai_task для прозрачной работы
- Сохраняет последние 20 сообщений без изменений
- Структурированный промпт: факты, URL, серверы, настройки, решения
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
- _Контекст_ не работал из-за экранирования подчёркивания
- *Контекст* — работает корректно
Version: 0.5.6
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Рефакторинг кода бота для улучшения поддерживаемости:
Структура:
- 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>
Новые возможности:
- Автоматическое извлечение фактов каждые 5 сообщений диалога
- ИИ анализирует диалог и извлекает факты по категориям (личное, технологии, проекты, предпочтения)
- Команда /facts — показать все сохранённые факты
- Команда /forget <номер> — удалить факт
- Счётчик сообщений для триггера извлечения (messages_since_fact_extract)
Архитектура:
- Эвристики (мгновенно): простые паттерны типа 'меня зовут...', 'я использую...'
- ИИ (каждые 5 сообщений): анализ последних 10 сообщений, JSON-ответ с фактами
- ChromaDB: все сообщения для семантического поиска
- SQLite (facts): извлечённые факты с категориями и уверенностью
Промпт для ИИ:
- Категории: PERSONAL, TECHNICAL, PROJECT, PREFERENCE, OTHER
- Формат: JSON с type, content, confidence
- Только явные факты из диалога
Version: 0.4.0
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Изменения:
- Убран лишний ai_status из label кнопки
- Чёткие названия: '✅ Выключить чат с ИИ' / '❌ Включить чат с ИИ'
- Добавлен флаг --yolo для qwen-code (авто-подтверждение)
Теперь кнопка правильно показывает действие
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Изменения:
- Разные callback_data для вкл/выкл (toggle_ai_chat_on/off)
- Разный текст кнопки в зависимости от статуса
- Telegram теперь правильно обновляет кнопку
Теперь кнопка показывает правильное действие
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Изменения:
- UserState.ai_chat_history — хранение истории диалога
- handle_ai_task() передаёт историю в Qwen Code
- История ограничена 20 последними сообщениями
- Команда /ai clear — очистка истории
- Исправлена кнопка меню (убран лишний импорт)
Теперь ИИ помнит контекст диалога в рамках сессии
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Новые возможности:
- Кнопка '💬 Чат с ИИ агентом' в главном меню
- Включение/выключение режима чата
- Все сообщения отправляются в Qwen Code когда режим включён
- Индикация статуса в кнопке (✅/❌)
- Индикация статуса в главном меню
Изменения:
- UserState.ai_chat_mode — флаг режима
- handle_ai_task() — обработка задач для ИИ
- Динамическое обновление кнопки в get_keyboard()
- Обновление 'О боте' с информацией о чате с ИИ
Использование:
1. Меню → 💬 Чат с ИИ агентом (включить)
2. Отправлять сообщения как задачи для ИИ
3. Меню → 💬 Чат с ИИ агентом (выключить)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Изменения:
- Использование флага -p для передачи задачи
- Простой текстовый вывод вместо stream-json
- Каждый запрос запускает новый процесс qwen
- Убрано сложное управление сессиями
- Edit сообщения вместо новых сообщений
Теперь /ai работает стабильнее
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Новые возможности:
- Команда /ai для выполнения задач через Qwen Code
- Автоматический запуск сессии при первой задаче
- Обработка OAuth авторизации (ссылка отправляется в чат)
- Команды /ai status и /ai stop для управления сессией
- Таймаут неактивности 30 минут
- Буферизация вывода
Файлы:
- qwen_integration.py — менеджер сессий Qwen Code
- bot.py — команда /ai и хендлеры
Пример использования:
/ai создай функцию Python для сортировки списка
/ai status
/ai stop
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Изменения в меню 'О боте':
- Обновлена версия на 2.1.0
- Добавлен список возможностей бота
- Улучшено форматирование текста
- Добавлена информация о безопасности
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Проблема:
- В MenuItem иконка указывалась в label ('🖥️ Выбор сервера')
- И дополнительно добавлялась через поле icon
- Результат: '🖥️🖥️ Выбор сервера'
Решение:
- Убрать добавление иконки в get_keyboard()
- Иконки указываются только в label MenuItem
Изменения:
- MenuBuilder.get_keyboard() теперь использует только item.label
- Поле icon в MenuItem сохранено для обратной совместимости
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Изменения:
- Очистка ANSI-кодов через re.sub() вместо pyte
- Обработка \r для прогресс-баров (схлопывание в финальный результат)
- Удаление дублирующегося текста вида "0% [текст] 0% [текст]"
- Форматирование вывода: первые 5 + последние 10 строк
- Индикация количества пропущенных строк
Результат:
- Вместо 100+ строк мусора — 5-15 строк чистого вывода
- Корректная обработка sudo команд с запросом пароля
- Удалена зависимость от pyte
Пример:
sudo apt update теперь показывает список репозиториев и итог,
без прогресс-баров "Чтение списков пакетов… 95%"
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Новые возможности:
- Класс Server и ServerManager для управления серверами
- Конфигурация серверов через .env (SERVERS, SSH_KEY_PATH)
- Меню выбора сервера с динамическим обновлением
- Выполнение команд через SSH на удалённых серверах
- Индикатор текущего сервера в UI
- Персональная рабочая директория для каждого сервера
- Поддержка составных команд с cd через SSH
Формат конфигурации серверов:
SERVERS=name|host|port|user|tags,name|host|port|user|tags
Изменения:
- + asyncssh==2.16.0 в зависимости
- ~ .env.example: добавлены SERVERS, SSH_KEY_PATH, DEFAULT_SERVER
- ~ bot.py: ~600 строк нового кода
- ~ menu: добавлено 🖥️ Выбор сервера
Настройки состояния пользователя:
- current_server: имя текущего сервера (по умолчанию 'local')
- working_directory: сбрасывается при смене сервера
Безопасность:
- known_hosts отключён для простоты (можно включить в продакшене)
- SSH ключ через client_keys (путь из .env)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
Основные изменения:
- Перенос конфигурации из bot_config.json в .env
- Удалено хранение токена в JSON (только переменные окружения)
- Добавлена проверка прав доступа через ALLOWED_USERS
- Декоратор @check_access для защиты хендлеров
- Настройки бота: BOT_NAME, BOT_DESCRIPTION, BOT_ICON_EMOJI, WORKING_DIRECTORY
- python-dotenv для загрузки переменных окружения
- Обновлён run.sh для работы с .env
- Убрана установка имени/описания при запуске (rate limit fix)
- Удалён функционал изменения настроек через бота (только через .env)
- Обновлена документация
Безопасность:
- Токен только в .env (не коммитится)
- Проверка прав доступа по списку ALLOWED_USERS
- bot_config.json удалён
Файлы:
- + .env.example (шаблон конфигурации)
- - bot_config.json
- ~ bot.py, run.sh, README.md, requirements.txt
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>