Commit Graph

38 Commits (5b52566f0e2694474fb3b84cd87da61f3da2ad7d)

Author SHA1 Message Date
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 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 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 bff74741a6 feat: add dialogue compaction with summary integration
- Add /compact command for manual compaction
- Integrate summary loading from ChromaDB
- Add summary to AI prompt context
- Automatic compaction at 70% threshold
- Keep last 20 messages uncompressed

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 12:22:31 +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 9bb2837b53 fix: курсив контекста → жирный (Telegram Markdown v2)
- _Контекст_ не работал из-за экранирования подчёркивания
- *Контекст* — работает корректно

Version: 0.5.6

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 00:46:13 +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 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
mirivlad ca6721090c feat: автоматическое извлечение фактов через ИИ + команды /facts и /forget
Новые возможности:
- Автоматическое извлечение фактов каждые 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>
2026-02-24 23:08:27 +08:00
mirivlad b90b4ed77d fix: офлайн-режим для векторной памяти и исправление меню ИИ-чата
Исправления:
- Убран state_manager.reset() в menu_command — сохраняет ai_chat_mode
- Добавлен callback 'toggle_ai_chat' в обработчик кнопки ИИ
- Исправлено условие в get_keyboard для кнопок _on/_off
- Отключена проверка HuggingFace при загрузке модели (offline режим)
- Подавлены логи sentence_transformers, huggingface_hub, httpx
- Добавлен .cache/ в .gitignore

Теперь:
- Модель all-MiniLM-L6-v2 загружается из кэша (~88MB)
- Никаких запросов к HF при запуске
- Кнопка ИИ-чата корректно переключается
- Состояние ai_chat_mode сохраняется при вызове меню

Version: 0.3.1

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 22:54:09 +08:00
mirivlad 77879e75a6 feat: RAG-память с векторным поиском и SOCKS5 прокси
Основные изменения:
- Векторная память на ChromaDB + sentence-transformers
- Семантический поиск по истории диалогов
- Модель all-MiniLM-L6-v2 (90MB, быстрая)
- Команда /memory — статистика памяти
- SOCKS5 прокси (USE_PROXY, PROXY_HOST, PROXY_PORT)
- Увеличены таймауты Telegram API до 30 сек
- Разбиение длинных сообщений на части
- Документация: MEMORY_SYSTEM.md, VECTOR_RAG_MEMORY.md

Технические детали:
- HybridMemoryManager объединяет SQLite + ChromaDB
- RAG-поиск релевантного контекста для ИИ
- Извлечение фактов из сообщений
- PySocks, httpx[socks] в зависимостях

Version: 0.3.0

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 22:38:12 +08:00
mirivlad 2d7b96dfd2 fix: логирование handle_text_message
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 07:44:31 +08:00
mirivlad a645327006 fix: передача state в get_keyboard
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 07:36:47 +08:00
mirivlad 6397559dd1 fix: логирование и очистка обработчика toggle_ai_chat
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 07:34:22 +08:00
mirivlad 4b1c033a5e fix: кнопка чата + YOLO режим
Изменения:
- Убран лишний ai_status из label кнопки
- Чёткие названия: ' Выключить чат с ИИ' / ' Включить чат с ИИ'
- Добавлен флаг --yolo для qwen-code (авто-подтверждение)

Теперь кнопка правильно показывает действие

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 04:46:06 +08:00
mirivlad 00e7c1a1e5 fix: динамическая кнопка чата с ИИ
Изменения:
- Разные callback_data для вкл/выкл (toggle_ai_chat_on/off)
- Разный текст кнопки в зависимости от статуса
- Telegram теперь правильно обновляет кнопку

Теперь кнопка показывает правильное действие

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 04:40:29 +08:00
mirivlad a41556a2d6 feat: контекст диалога с ИИ агентом
Изменения:
- UserState.ai_chat_history — хранение истории диалога
- handle_ai_task() передаёт историю в Qwen Code
- История ограничена 20 последними сообщениями
- Команда /ai clear — очистка истории
- Исправлена кнопка меню (убран лишний импорт)

Теперь ИИ помнит контекст диалога в рамках сессии

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 04:37:06 +08:00
mirivlad 77417c7db9 fix: исправление query в menu_command
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 04:26:36 +08:00
mirivlad 09f25676e9 fix: исправление ошибки с user_id в get_keyboard
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 04:24:51 +08:00
mirivlad b1ccda8a13 feat: режим чата с ИИ агентом через меню
Новые возможности:
- Кнопка '💬 Чат с ИИ агентом' в главном меню
- Включение/выключение режима чата
- Все сообщения отправляются в Qwen Code когда режим включён
- Индикация статуса в кнопке (/)
- Индикация статуса в главном меню

Изменения:
- UserState.ai_chat_mode — флаг режима
- handle_ai_task() — обработка задач для ИИ
- Динамическое обновление кнопки в get_keyboard()
- Обновление 'О боте' с информацией о чате с ИИ

Использование:
1. Меню → 💬 Чат с ИИ агентом (включить)
2. Отправлять сообщения как задачи для ИИ
3. Меню → 💬 Чат с ИИ агентом (выключить)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 04:22:45 +08:00
mirivlad cac597688d fix: упрощение работы с Qwen Code
Изменения:
- Использование флага -p для передачи задачи
- Простой текстовый вывод вместо stream-json
- Каждый запрос запускает новый процесс qwen
- Убрано сложное управление сессиями
- Edit сообщения вместо новых сообщений

Теперь /ai работает стабильнее

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 04:16:41 +08:00
mirivlad 5d451ff870 feat: интеграция с Qwen Code AI
Новые возможности:
- Команда /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>
2026-02-24 04:09:25 +08:00
mirivlad df8786bee2 feat: улучшить информацию о боте
Изменения в меню 'О боте':
- Обновлена версия на 2.1.0
- Добавлен список возможностей бота
- Улучшено форматирование текста
- Добавлена информация о безопасности

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 03:56:22 +08:00
mirivlad 9ea627bb30 fix: убрать дублирование иконок в кнопках меню
Проблема:
- В MenuItem иконка указывалась в label ('🖥️ Выбор сервера')
- И дополнительно добавлялась через поле icon
- Результат: '🖥️ 🖥️ Выбор сервера'

Решение:
- Убрать добавление иконки в get_keyboard()
- Иконки указываются только в label MenuItem

Изменения:
- MenuBuilder.get_keyboard() теперь использует только item.label
- Поле icon в MenuItem сохранено для обратной совместимости

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-24 03:43:56 +08:00
mirivlad dd70d4b29f fix: улучшение обработки вывода CLI команд с ANSI-кодами и прогресс-барами
Изменения:
- Очистка 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>
2026-02-24 03:40:45 +08:00
mirivlad 7a110e6974 feat: CRUD для серверов через Telegram меню
Возможности:
- Добавление сервера через пошаговую форму (имя, host, port, user, tags)
- Редактирование сервера (выбор поля для изменения)
- Удаление сервера (кроме local)
- Сохранение изменений в .env автоматически

UI:
- Меню серверов с кнопками управления (⚙️)
- Пошаговый ввод с валидацией
- Кнопки отмены и пропуска тегов
- Индикация текущего состояния

Серверы:
- add_server(name, host, port, user, tags)
- update_server(name, host, port, user, tags)
- delete_server(name)
- save_to_env() - сохраняет в .env файл

Валидация:
- Имя: только латиница, дефисы, подчёркивания
- Порт: число 1-65535
- Теги: список через запятую

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 17:25:32 +08:00
mirivlad 4888508795 fix: исправлено получение имени пользователя для local сервера
- Использован getpass.getuser() вместо os.getenv('USER')
- Добавлена обработка исключений для надёжности

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 17:07:35 +08:00
mirivlad 655de4743c feat: v2.0 - Мульти-серверная архитектура с SSH
Новые возможности:
- Класс 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>
2026-02-23 16:59:52 +08:00
mirivlad 96d2577415 release: v1.0 - Telegram CLI Bot
Основные изменения:
- Перенос конфигурации из 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>
2026-02-23 16:52:06 +08:00
mirivlad c2f62295b7 Add /menu command to show main menu with buttons
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 16:26:01 +08:00
mirivlad d7f071d4d2 Save working directory after compound cd commands
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 16:17:46 +08:00
mirivlad 5472ea4048 Fix cd parsing for compound commands
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 16:15:46 +08:00
mirivlad 8070762310 Add working directory per user with cd command support
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 16:02:08 +08:00
mirivlad c852b09148 Simplify: any text message is now a CLI command
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 15:57:03 +08:00
mirivlad e2453cb60c Add token prompt and save to config on first run
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 15:48:15 +08:00
mirivlad 75abe7bcf8 Initial commit: Telegram CLI Bot with multi-level menu
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-23 15:41:48 +08:00