Commit Graph

77 Commits (0a8801afecdb120530aaa447c089d4181761b352)

Author SHA1 Message Date
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
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 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 417a858468 chore: remove obsolete /tools folder
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 12:20:27 +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 89b071b42a docs: обновление README.md
- Добавлена версия 0.6.0
- Секция 'Быстрый старт' с install.sh
- Подробная инструкция по установке
- Инструкция по обновлению
- Обновлённая структура проекта с bot/
- Модульная архитектура
- Актуализированные требования (Python 3.10+, Node.js 18+)

Version: 0.6.1

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 01:00:18 +08:00
mirivlad b26182cb08 feat: универсальный установщик с поддержкой qwen-code
- install.sh — автоматическая установка всех зависимостей
  - Проверка Python, pip, Node.js, npm
  - Установка qwen-code через npm (глобально)
  - Создание venv и установка pip зависимостей
  - Определение: новая установка или обновление
  - Сохранение версии в .installed

- run.sh — только запуск бота (без установки)
  - Проверка наличия venv
  - Проверка .env и токена
  - Запуск bot.py

- install.sh делает:
  1. Проверяет системные требования
  2. Устанавливает Node.js (если нет)
  3. Устанавливает qwen-code (npm install -g)
  4. Создаёт venv и ставит pip зависимости
  5. Создаёт .env из .env.example
  6. Сохраняет версию

Version: 0.6.0

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-25 00:52:59 +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 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
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