Files
site_aegisone/py_service/CHANGELOG.md
T

28 KiB
Raw Blame History

Changelog — AegisOne Service Portal

1.8.6 (02.06.2026)

Новые функции

  • sort-table.js: универсальный модуль сортировки таблиц по столбцам (текст/число/дата), подключён глобально
  • Number input: спиннеры скрыты через CSS (appearance: textfield) на всех страницах

Исправления

  • customers.html: восстановлена сломанная HTML-структура — .card > .card-header, поиск в .filter-bar
  • bot_dialogues.html: обёрнут в .card > .card-header, фильтры в .filter-bar, удалены кастомные .page-header/.header-controls
  • checklist.html: <h3> обёрнут в .card-header
  • 18 страниц: modal-actionsform-actions (единый класс для кнопок в модалках)
  • charts.html: btn-xsbtn-sm
  • assignments.html: добавлена модалка подтверждения отвязки сотрудника
  • 4 AJAX-страницы: sortTables() вызывается после загрузки данных (bot_kb, bot_unknown, bot_consent, bot_tickets)

1.8.5 (02.06.2026)

Новые функции

  • AGENTS.md (раздел 12): правила по Идеям — агент может видеть, добавлять, менять статус, предлагать к реализации, реализовывать

Исправления

  • models.py: onupdate="NOW()"onupdate=func.now() — fix Internal Server Error при смене статуса Идеи (14 моделей)
  • page.html: удалён main-header (заголовок + дата) — больше не дублируется на всех страницах
  • dashboard.html: удалён main-header
  • bot_dialogues.html: удалён CSS .main-header { display: none !important; } (больше не нужен)
  • version.txt / CHANGELOG.md: синхронизация версии в контейнере aegisone-app

1.8.4 (02.06.2026)

Новые функции

  • SERVICE_STYLE_GUIDE.md: единый гайд стилей сервисного портала
  • AGENTS.md (раздел 11): правила стилей UI — см. SERVICE_STYLE_GUIDE.md
  • CSS .modal-actions: общий класс для кнопок в модалках

Исправления

  • bot_dialogues.html: скрыт main-header (дублирующий заголовок с датой)
  • bot_kb.html: замена кастомных классов на .modal-overlay/.modal, confirm() → кастомная модалка, иконки ✎/✕
  • bot_unknown.html: .modal-box.modal, confirm() → кастомная модалка, иконки ✎/✕
  • bot_consent.html: confirm() → кастомная модалка удаления пользователя
  • bot_test.html: confirm() → кастомная модалка очистки тестовых данных
  • charts.html: prompt() → кастомная модалка ввода имени графика, confirm() → кастомная модалка удаления
  • role_settings.html: alert()showNotification()
  • 10 простых страниц: blog, cases, coefficients, customers, formulas, ideas, objects, questionnaire_config, tasks, users — confirm() → кастомные модалки с уникальными ID
  • migrations_runner.py: split SQL на ; для совместимости с asyncpg

1.8.3 (02.06.2026)

Новые функции

  • Docstrings: добавлены docstrings и комментарии по AGENTS.md ко всем ключевым Python-файлам
  • File headers: каждый файл имеет шапку с описанием назначения
  • Function docstrings: каждая функция имеет docstring на русском языке

1.8.2 (02.06.2026)

Новые функции

  • AGENTS.md: правила проекта для AI-агентов (корень репозитория)
  • Отзыв согласия: handle_revoke_consent(), паттерн «отозвать согласие» в handle_message
  • Удаление бот-пользователей: DELETE /api/bot/users/{user_id} (каскад: user + conversations + messages)
  • Кнопка удаления: bot_consent.html — колонка «Действия» (только owner)
  • consent_revoked_date: поле в BotUser для фиксации даты отзыва согласия

Исправления

  • Диалоги: одна переписка = одна карточка (убрано создание new conv при completed/escalated)
  • Analyze intent: агрессивное определение ticket по ключевым словам услуг
  • Clarify intent: ограничение 1 раз за диалог, маркерные слова пропускают уточнение
  • History context: фильтр по времени (10 мин) вместо лимита 10 сообщений
  • Быстрые правила: ticket-паттерны и приветствие до NLP

1.8.1 (01.06.2026)

Новые функции

  • YandexGPT-only NLP: удалены Groq/Gemini, YandexGPT единственный провайдер
  • Unknown questions: BotUnknownQuestion, автогенерация KB-карточки при 3+ уникальных пользователях
  • Callback dedup: processed_callbacks set в main.py — пропуск дублей callback_id
  • Consent flow: split-based word matching, refuse words до quick_intent, operator handler
  • DELETE conversations: каскадное удаление диалогов (BotMessage + BotProcessingLog + BotConversation)
  • UTC+3: moscow_now() в greeting.py и inquiry.py
  • Bot tickets: contact_name, contact_phone, contact_email в BotTicket

Исправления

  • Plain text phones: MAX Platform не рендерит markdown-ссылки — телефоны/emailplain text
  • Webhook secret: _verify_secret() возвращает True если заголовок пуст
  • Nginx: добавлен /webhook proxy на HTTP порт 80
  • Payload parsing: message_created из body.message.body.text, message_callback из body.callback.payload

1.8.0 (01.06.2026)

Новые функции

  • Consent flow:.keyboard consent_keyboard(), contact_keyboard(), return_to_consent_keyboard()
  • Escape hatch: locked states проверяют analyze_intent — «question» → analyze_and_respond
  • Completed state: completed/escalated → новый диалог + analyze_and_respond
  • handle_greeting fix: убран analyze_and_respond после приветствия, state=awaiting_input
  • Auto-detect sidebar: parse_sidebar_menu() определяет пункты меню через API
  • role_settings: парсинг sidebar menu из HTML

Исправления

  • **handle_message:**拒绝 слова проверяются ДО analyze_intent в состояниях consent
  • operator_words: «оператор» → contacts вместо analyze_intent
  • handle_manual_contact: refuse words → consent_refused вместо «введите корректный номер»
  • clarify_intent: temperature 0.1, пост-обработка удаление приветствий, anti-AI-signs

1.7.1 (29.05.2026)

Исправления

  • bot_test.html: исправлен ключ localStorage для темы, var(--bg-page)→var(--bg-body), стилизация скроллбара
  • P2 (CSS): bot_consent, bot_tickets, bot_kb, bot_settings — var(--light-bg)→var(--bg-card), хардкод цвета→CSS-переменные
  • M7 (bot_test.html): тема наследуется через CSS-переменные + скрипт инициализации
  • C3 (Email typo): contact proxy — user.email вместо user.phone

1.7.0 (29.05.2026)

Новые функции

  • Прокси-роуты для бота: /api/bot/webhook с пробросом X-Max-Bot-Api-Secret
  • Страницы бота: bot_consent.html (превью + таймер 10 сек), bot_kb.html (✏️ редактирование), bot_settings.html (showNotification, max_bot_id)
  • Тосты: глобальная showNotification() в base.html, CSS-классы .toast-* в service.css
  • CSS-переменные: var(--white)→var(--bg-card), var(--text)→var(--text-primary) во всех шаблонах

Исправления

  • Проброс secret через webhook-прокси

1.5.5 (23.05.2026)

Новые функции

  • Этап 4 завершён: все 8 feature-обработчиков (risk_score, sla_status, photo_report, appointment, quality_rate, commercial, my_objects, sla_ticket)
  • max_notifications.py: notify_operator, notify_level2, notify_client, notify_handoff_escalation, notify_ticket_created
  • emotion_detector.py + categorizer.py: GPT с fallback на keywords
  • Handoff-диалоги (/service/bot-settings/handoffs) с polling и кнопкой "Взять в работу"
  • Уведомления бота (/service/bot-settings/notifications) + mark-read
  • API: handoffs, notifications, risk-questions (CRUD), tickets (list/get/create/message/status), engineers
  • Страница "Вопросы риск-инжиниринга" (bot_risk_questions.html) — управление через портал
  • Страница "Заявки" (bot_tickets.html) — просмотр, создание, детали, сообщения, смена статуса
  • risk_score.py переписан: чтение вопросов из БД (BotRiskQuestion) вместо хардкода
  • SQL миграция v1.5.5: CREATE TABLE для bot_notifications, bot_notification_subscriptions, bot_risk_questions, bot_tickets, bot_ticket_messages, bot_ticket_statuses + seed-данные
  • MaxAPIClient.test_mode — заглушка для тестового прогона без отправки в MAX
  • /api/bot/test-run — вызывает handle_update с test_mode, симулируя настоящий диалог
  • portal_settings.html: кнопка тестового прогона с живой симуляцией
  • role_settings.html: новые permission (bot_tickets, bot_notifications, bot_risk_questions)
  • Сайдбар: добавлены "Заявки" и "Вопросы риск-инжиниринга" в раздел Чат-бот Max
  • Пользователи (users.html): колонка MAX ID + поле в форме создания/редактирования

Исправления и улучшения

  • bot_engine.py: callback rate_* → прямой вызов quality_rate handler
  • bot_engine.py: добавлен вызов notify_handoff_escalation при негативных эмоциях
  • Users stub: login, full_name, role, is_active, max_user_id
  • Proxy-роуты py_service: добавлены все API для risk-questions, tickets, engineers
  • Тесты max_bot: проверка всех роутов
  • Добавлена фича "Напоминания" — reminders.py handler, состояние FEATURE_REMINDERS в FSM, кнопка в меню
  • broadcasts.py зарегистрирован — добавлен в _handle_feature (main_menu.py) и в build_main_menu_buttons (inline.py)
  • FSM.transition("done") — все feature-хендлеры теперь возвращают в MAIN_MENU вместо IDLE, показывают меню
  • FSM изоляция — risk_score, appointment, commercial переписаны с set_temp/get_temp вместо прямого доступа к _states
  • settings_cache.py — исправлены get_phones() (парсит phone_1/phone_2) и get_email() (читает support_email)
  • Delete forms — bot_categories.html, bot_kb.html, bot_settings.html: заменены form POST на fetch() с JSON
  • SQL миграция v1.5.5 исправлена — bot_notifications + recipient_max_user_id/related_*, подписки с boolean-колонками
  • **Версия обновлена до 1.5.5

1.5.4 (22.05.2026)

Новые функции

  • Страница Handoff-диалогов (bot_handoffs.html) с polling
  • Страница Уведомлений бота (bot_notifications.html) с mark-read
  • API: handoffs, notifications, risk-questions, tickets, engineers (max_bot/main.py)
  • max_notifications.py: уведомления операторам, level2, клиентам, эскалация
  • emotion_detector.py + categorizer.py: модули GPT + keyword fallback
  • risk_score.py: анкета 7 вопросов с in-memory хранением через FSM
  • Уведомления FSM (notifications.py + broadcasts.py): подписка / отписка
  • Users stub (login, full_name, role, max_user_id)
  • Пользователи: колонка MAX ID + поле в форме (users.html)
  • SQL миграция v1.5.5 (черновик)

Исправления и улучшения

  • risk_score.py: переключение с хардкода на БД (BotRiskQuestion)
  • bot_engine.py: маршрутизация feature-состояний через _feature_handlers
  • bot_engine.py: callback rate_* → прямой вызов handle_quality_rate

1.5.3 (22.05.2026)

Новые функции

  • П.8: Роли: обновлён список MENU_ITEMS под новую структуру (7 секций: Панель, Управление, Работа, Чат-бот Max, Контент, Внешние системы, Настройки)
  • П.8: Коэффициенты и Тест формул объединены в одну страницу Формулы (/service/formulas) с 2 табами
  • П.8: Чат-бот Max в Настройках — 6 табов (Общие, Шаблоны ответов, Функции, Категории, База знаний, Тестовый прогон)
  • П.8: Расширены дефолтные права engineer (charts, bot_analytics, bot_conversations)
  • Переключатель ролей в navbar: owner может переключиться на engineer/technician, engineer — на technician
  • Тема: текст (Светлая/Тёмная/Авто) перенесён во всплывающую подсказку (title) на кнопке
  • Тесты (pytest): проверка регистрации всех роутов smoke-тест для сервера

Исправления и улучшения

  • Все старые отдельные страницы (formula_test, coefficients, bot_responses, bot_features, bot_categories, bot_kb, bot_test_runner) продолжают работать через прямые роуты
  • Исправлен баг: BotTicket FK → bot_users (NoReferencedTableError при старте)

1.5.2 (21.05.2026)

Новые функции

  • П.8: Настройка портала (/service/portal-settings) — Yandex GPT ключ, Яндекс.Диск OAuth
  • П.8: Настройка Ролей (/service/role-settings) — owner управляет видимостью пунктов меню для engineer/technician
  • Ролевые права меню: sidebar скрывает пункты на основе role_menu_permissions

Исправления и улучшения

  • max_bot: Исправлен NameError в api_bot_features (добавлен импорт BotFeature)
  • py_service: Добавлен PermissionsMiddleware для загрузки прав меню в каждый шаблон
  • SQL: Дефолтные права engineer (10 пунктов) и technician (4 пункта) создаются при пустой таблице

1.5.1 (21.05.2026)

Новые функции

  • П.8: Рассылка с предпросмотром — выбор получателей (чекбоксы), живой предпросмотр, черновик, история рассылок
  • П.8: Фильтр согласия ФЗ-152 — рассылка только с consent_given = true

Исправления и улучшения

  • П.8: Аналитика — "Всего пользователей" теперь показывает только согласных, карточка согласий удалена
  • П.8: Пользователи — сортировка по всем колонкам (клик на заголовок), пагинация, фильтр по согласию
  • П.8: Пользователи — строки без согласия выделены красным фоном
  • max_bot: Broadcast API — preview (draft) + send режимы, recipients endpoint, history endpoint
  • py_service: Прокси-роуты для recipients/history

1.5.0 (21.05.2026)

Новые функции

  • Интеграция бота Max "София": управление ботом в сервисном портале
  • 11 новых страниц: настройки, шаблоны, функции, категории, база знаний, диалоги, пользователи, тестовый прогон, аналитика
  • SQL миграция v1.5.0: bot_tickets, bot_features.sla_ticket

1.4.0 (20.05.2026)

1.3.0 (20.05.2026)

Новые функции

  • П.49: Подключены favicon (ico, png, webmanifest, apple-touch-icon) + лого на странице логина
  • П.44: Сохранение scroll сайдбара при навигации (sessionStorage)
  • П.47: Липкий тулбар редактора документов (верх/низ)
  • П.33: Кастомный модал подтверждения выхода из опросника (вместо системного confirm)
  • П.33: Добавлен POST /service/questionnaire/save/{step} — сохранение черновика

Исправления и улучшения

  • П.35: Версия ПО отображается на всех страницах, не только дашборде
  • П.40: Звёзды избранного выровнены в одну строку с пунктами меню
  • П.42: discover_docs() вызывается при каждом открытии документа — новые .md сразу видны
  • П.43: POST /admin/permissions использует discover_docs вместо load_permissions
  • П.45: Футер сайдбара: имя → выход → версия
  • П.46: Иконки EasyMDE видны на тёмной теме ([data-theme="dark"] overrides)
  • П.48: Создание "Пример из практики" — добавлен action="/service/cases/create"
  • П.29: SLA — action="/service/sla/create" у формы + safe type conversions в edit
  • П.31: Идеи — защита от None description ((idea.description or '')[:100])
  • П.49: Назначения — a.object_name → a.object.name, a.user_name → a.user.full_name
  • П.26: Заголовок "Назначения" → "Назначение сотрудников"
  • П.24: Объекты — список клиентов в select (c.id/c.name вместо c[0]/c[1])
  • П.24: Объекты — editObject защита от None customer_id + safe int() в backend
  • П.23: Валидация клиентов: * у обязательных полей, KPP (9 цифр), маска телефона "8 (__) --"
  • П.36: Portainer URL https://81.177.141.34:9443

1.2.1 (20.05.2026)

Новые функции

  • П.38: Стилизация логина — "One" цветом #00ADEF
  • П.45: Футер сайдбара: имя → выход → версия
  • П.44: Сохранение scroll сайдбара при навигации (sessionStorage)
  • П.47: Липкий тулбар редактора документов
  • П.49: Подключены favicon (ico, png, webmanifest, apple-touch-icon)

Исправления и улучшения

  • П.35: Версия ПО отображается на всех страницах, не только дашборде
  • П.40: Звёзды избранного выровнены в одну строку с пунктами меню
  • П.42: discover_docs() вызывается при каждом открытии документа — новые .md сразу видны
  • П.43: Управление документами — POST использует discover_docs вместо load_permissions
  • П.46: Иконки EasyMDE видны на тёмной теме
  • П.48: Создание "Пример из практики" — добавлен action="/service/cases/create"
  • П.29: SLA — добавлен action="/service/sla/create" у формы, safe type conversions
  • П.31: Идеи — защита от None description (|default(''))
  • П.49: Назначения — a.object_name → a.object.name, a.user_name → a.user.full_name
  • П.26: Заголовок "Назначения" → "Назначение сотрудников"
  • П.24: Объекты — список клиентов в select (c.id/c.name вместо c[0]/c[1])
  • П.36: Portainer URL через https://81.177.141.34:9443
  • П.33: Опросник — добавлен POST /service/questionnaire/save/{step}, кастомный модал

1.2.0 (20.05.2026)

Доработки

  • П.21: Кнопка "Настроить" на дашборде — выбор отображаемых показателей (localStorage)
  • П.22: Исправлена ошибка Internal Server Error при редактировании пользователя (добавлен action у формы)
  • П.23: Исправлена ошибка Method Not Allowed при создании клиента; ИНН обязателен (10/12 цифр)
  • П.24: Тип объекта переведён на русский (select вместо input)
  • П.25: Исправлена ошибка Method Not Allowed при создании/редактировании объекта
  • П.26: "Назначения" → "Назначение сотрудников"
  • П.27: Статус SLA по умолчанию — "Переговоры" (negotiation)
  • П.28: Уровни SLA отображаются на русском: Базовый/Оптимальный/Максимальный
  • П.29: Проверена работа создания и редактирования SLA контрактов
  • П.30: Расширены графики: группировка (день/неделя/месяц), название, сохранение/экспорт PNG
  • П.31: Исправлена ошибка Internal Server Error при смене статуса идеи
  • П.32: Быстрое меню заменено на звёздочки (★) — избранное в localStorage
  • П.33: Кнопка "Выйти" в опроснике с подтверждением сохранения черновика
  • П.34: Убрана надпись "Главная" под каждым меню
  • П.35: Версия показывается полностью только на дашборде, в остальных — "v"
  • П.36: Ссылка Portainer изменена на IP:порт (через PORTAINER_URL)
  • П.37: Документация: левое меню (page.html), авто-загрузка .md из /py_service/docs

1.1.0 (18.05.2026)

Баги

  • discover_docs: миграция существующих permissions без technician — добавляется technician: {view: false} + engineer: {edit: false, cancel: false}
  • favicon: исправлен тип (image/x-icon → image/svg+xml) и расширение (favicon.ico → favicon.svg)

Доработки

  • П.15: Визуальная система формул — коэффициенты сгруппированы по formula_ref в аккордеоны
  • П.15: Информация о формуле (📐) — модалка с текстом формулы и описанием результата
  • П.15: Песочница формул (/service/coefficients/test) — подстановка параметров и расчёт для 7 формул: risk_score, complexity, object_index, engineer, ecs, shs, ceo_shs
  • П.15: Иконка 🧪 у каждой группы ведёт в песочницу с предвыбором группы
  • П.15: В сайдбар добавлена ссылка "Тест формул" (owner)
  • CSS: добавлены стили аккордеона и панели теста формул

1.0.3 (18.05.2026)

Баги

  • П.18: Ченджлог не открывался — CHANGELOG.md исключался .dockerignore (*.md убран)
  • П.20: Ошибка при сохранении пользователя — исправлена логика is_active (без дефолта), phone/email не сбрасываются

Доработки

  • П.12: Авто-добавление документов из /py_service/docs через discover_docs() в lifespan
  • П.13: Владелец редактирует .md файлы через /service/documents/{slug}/edit (EasyMDE)
  • П.14: Система прав документов:
    • Владелец видит/создаёт/редактирует/удаляет все документы
    • Владелец назначает engineer'у просмотр/редактирование через /service/documents/admin/permissions
    • Engineer видит только назначенные документы
    • Engineer даёт technician'у просмотр своих документов через /service/documents/tech-access
    • Technician видит только те документы, что открыл engineer
  • П.15: Удаление коэффициентов (кнопка ✕); предложен редизайн с группировкой по formula_ref
  • П.16: Гибкие графики для владельца (/service/charts) — Chart.js: задачи/SHS/KPI/MRR/объекты, типы: bar/line/pie/doughnut
  • П.17: "Service Portal" увеличен с 10px до 12px
  • П.19: Роль убрана из футера сайдбара, "Выйти" под ФИО
  • Удалены дублирующие ручки /service/docs* (старая система), везде /service/documents/

1.0.2 (18.05.2026)

Доработки

  • П.3: Логотип AegisOne в sidebare (sidebar-logo-text, 2rem)
  • П.5: Версия кликабельна — модалка с историей изменений (changelog)
  • П.6: Текст логотипа увеличен (sidebar-logo-text, 2rem)
  • П.7: Верхнее меню упрощено — только логотип и кнопка темы
  • П.8: Быстрое меню — настройка своих и техниковских ссылок (owner/engineer)
  • П.9: Система идей — CRUD + статусы (normal/in_progress/completed)
  • П.11: Ссылки на Portainer и Gitea в левом меню (owner)

1.0.1 (18.05.2026)

1.0.0

Новые функции

  • Первый запуск сервисного портала на FastAPI
  • Базовые страницы: логин, дашборд, документация
  • Авторизация (owner/engineer/technician)
  • Дашборд с основной статистикой (объекты, задачи, инциденты, SLA, SHS)