Files
scud_ai/docs/in_progress/ROADMAP.md
T

14 KiB
Raw Blame History

План реализации (ROADMAP)

1. Очистка от регулярок и костылей (tool_injector.py)

  • Полностью удалить принудительные перехваты текста регулярными выражениями для команд добавления, редактирования и удаления пунктов[cite: 4].
  • Оставить в модуле только базовую санитарную очистку сырых тегов (<tool_call>)[cite: 4].

2. Настройка контекста и инструкций сессии (agent.py)

  • Передать управление диалогом языковой модели через системный блок role: "system"[cite: 4].
  • При активном состоянии PROMPT_PREVIEW передавать модели инструкцию:
    • Подтверждение / отмена / корректировка: продолжать работу с превью и вызывать соответствующие инструменты[cite: 4].
    • Смена темы: вежливо напомнить об открытом изменении и запросить решение[cite: 4].
  • Обеспечить видимость эфемерных сообщений (is_ephemeral = 1) для модели во время активной работы с превью[cite: 4].
  • Внедрить семантический Topic Drift Guard (idle_turns = 3) с вопросами и кнопками из tool_action_registry[cite: 4].
  • Реализовать детерминированный мгновенный сброс сессии и зачистку эфемерного контекста при вызове сторонних инструментов[cite: 4].

3. Очистка эфемерных сообщений при завершении (fast_path.py / context_manager.py)

  • Настроить удаление временных сообщений превью (db_purge_ephemeral_messages) строго в момент нажатия кнопок «Подтвердить» или «Отменить»[cite: 4].
  • Сбрасывать состояние сессии в базе данных после фиксации решения[cite: 4].
  • Внедрить прямое точечное применение изменений через db_apply_prompt_node_action[cite: 4].
  • Добавить обработку фазы PROMPT_FOLLOWUP с кнопками завершения и очистки контекста[cite: 4].
  • Создать context_manager.py для строгого разграничения служебных tool-пар (is_ephemeral=1) и содержательного диалога (is_ephemeral=0), сохраняя беседы Topic Drift в истории[cite: 4].

4. Инлайн-редактор в окне диалога (core.js)

  • Проверить работу блока ручного редактирования (inline-prompt-editor-container) с кнопками «Сохранить правки» и «Свернуть»[cite: 4].
  • Обеспечить сохранение черновика через API (/api/v1/chat/draft) и отображение обновленного текста перед подтверждением[cite: 4].
  • Реализовать двусторонний клиентский Diff-рендерер (одновременная подсветка добавленных строк и зачеркивание удаленных [УДАЛЕНИЕ])[cite: 4].
  • Добавить авто-форматирование и отступы подпунктов (X.Y.) при ручном сохранении черновика[cite: 4].

5. Тестирование и валидация системного промпта

  • Нативные вызовы: проверить добавление, редактирование и удаление пунктов через нативные вызовы модели (db_prompt_node_edit)[cite: 4].
  • Контекстные сценарии: проверить поведение модели при смене темы диалога оператором (Guardrail)[cite: 4].
  • UI и очистка: проверить ручное редактирование через кнопку в окне чата и последующую очистку контекста (db_purge_ephemeral_messages)[cite: 4].

6. Распространение архитектурного паттерна на модуль задач (tasks)

  • Масштабирование UI задач:
    • Увеличена ширина карточки до max-w-4xl и динамическая высота скролла до 70vh[cite: 4].
    • Реализованы переключатели фильтрации: «В работе» (по умолчанию), «В планах», «Готово», «Все»[cite: 4].
    • Разделены кнопки действия: «В работу» (для плановых) и «Готово» (для текущих)[cite: 4].
  • Инлайн-редактирование карточки задачи:
    • Плавная трансформация карточки в 3-строчную форму (текст, дата со встроенным пикером, выпадающий список важности)[cite: 4].
    • Отображение даты создания задачи[cite: 4].
    • Сохранение через REST API эндпоинт PATCH /api/v1/tasks/{id}[cite: 4].
  • Детерминированный Fast-Path и двухфазное удаление:
    • Мгновенная смена статусов без задержек LLM[cite: 4].
    • Карточка подтверждения удаления с автоочисткой контекста[cite: 4].
  • Генерация отчетов задач в Markdown:
    • Добавлен инструмент db_export_tasks_markdown для формирования Markdown-файла с группировкой по модулям и чекбоксами [x] / [ ][cite: 3].
    • Реализован роутер безопасной отдачи файлов с сохранением имени (/api/v1/files/download/...)[cite: 3].
  • Доменная консолидация задач:
    • Реализован консолидированный инструмент db_tasks_edit(action: ["ADD", "UPDATE", "DELETE", "EXPORT"], ...)[cite: 3].

7. Распространение на модуль снапшотов (snapshots)

  • Поддержка Y-снапшотов: универсальный парсинг и поиск по snapshot_id LIKE 'Y%' и срезам за 22:00:00[cite: 4].
  • Single Active Snapshot View: сохранение активного среза в контексте для аналитики с автоматической ротацией и зачисткой при запросе новых дат[cite: 4].
  • Интерактивный UI с чекбоксами и защитой срезов:
    • Чекбоксы в строках дневных срезов и кнопка «Выбрать все» в шапке[cite: 3].
    • Защита итогового вечернего среза Y (иконка замочка 🔒, блокировка выбора)[cite: 3].
    • Динамическая кнопка «Удалить выбранные (N)» в подвале карточки[cite: 3].
  • Детерминированный Fast-Path удаления срезов:
    • Двухфазное подтверждение удаления (одиночное и пакетное) с корректным счётчиком количества удаляемых элементов[cite: 3].
    • Защита от сброса фильтра даты (query_date) при обновлении карточки после удаления[cite: 3].

8. Архитектурный рефакторинг и декомпозиция монолитов (Текущий этап)

Контроль версий: перед каждым этапом и после его успешной проверки выполняется коммит и фиксация в репозитории Gitea.

  • Шаг 0: Фиксация базового состояния в Gitea:
    • Создание тега/коммита v2.5-pre-refactor в Gitea перед структурными изменениями.
  • Шаг 1: Разделение слоя данных и ядра (core/):
    • Создание core/connection.py (единый SQLite Connection Manager с WAL и таймаутами).
    • Создание core/schema.py (DDL-инициализация всех таблиц и индексов из database.py).
    • Фиксация контрольной точки в Gitea.
  • Шаг 2: Выделение доменных сервисов (services/ / domain/):
    • Задачи (services/tasks/): декомпозиция на repository.py, service.py, exporter.py (правило: до 100–150 строк на файл).
    • Системный промпт (services/prompts/): декомпозиция на repository.py, service.py, diff_engine.py.
    • Снапшоты (services/snapshots/): декомпозиция на repository.py, service.py.
    • База знаний и правила (services/knowledge/): вынос правил арбитража и словаря синонимов подразделений.
    • Фиксация контрольной точки в Gitea.
  • Шаг 3: Декомпозиция ETL-конвейера (main_etl.py и scud_export.py):
    • Выделение services/scud_etl/pipeline.py (оркестрация без длинных простыней кода).
    • Выделение services/scud_etl/merger.py (чистая склейка Dataframe 1С ⟷ СКУД).
    • Выделение services/scud_etl/anomaly_detector.py (алгоритмическая детекция нарушений).
    • Выделение services/scud_etl/sql_queries.py (вынос длинных T-SQL запросов).
    • Фиксация контрольной точки в Gitea.
  • Шаг 4: Выделение чистого ИИ-оркестратора (modules/ai_engine/):
    • Создание компактного agent.py (~60–80 строк) без ветвлений if/elif на сотни строк.
    • Внедрение изолированных обработчиков инструментов:
      • handlers/task_handler.py
      • handlers/prompt_handler.py
      • handlers/snapshot_handler.py
      • handlers/anomaly_handler.py
    • Создание context_builder.py (календарь, роли, сборка системного контекста).
    • Фиксация контрольной точки в Gitea.
  • Шаг 5: Облегчение web_api и адаптация роутеров:
    • Превращение web_api исключительно в тонкий транспортный шлюз (FastAPI + Статика).
    • Очистка роутеров от прямого SQL — вызовы только через доменные сервисы.
    • Рефакторинг CLI-утилиты scripts/db_cli.py (вынос форматирования в scripts/cli/formatters.py).
    • Финальное сквозное тестирование и фиксация релиза в Gitea (v3.0-clean-architecture).

9. Диалоговая генерация и контроль отчетов СКУД (Conversational Reporting Engine)

  • Инструмент построения сводок (db_generate_scud_report):
    • Создание инструмента Function Calling для запуска конвейера контроллинга за выбранную дату/снапшот прямо из чата[cite: 4].
    • Поддержка параметров: target_date, snapshot_id, mode (summary — дневная сводка, detailed — вчерашний отчет)[cite: 4].
  • Интерактивная карточка аудита отчета в UI:
    • Вывод статуса генерации, ключевых метрик (всего сотрудников, явка, опоздания, количество аномалий)[cite: 4].
    • Ссылки на сгенерированные файлы Excel (.xlsx) и Markdown (.md)[cite: 4].
  • Диалоговый разбор аномалий и исключений:
    • Возможность в диалоге запросить расшифровку конкретной аномалии[cite: 4].
    • Быстрое добавление сотрудника/отдела в exceptions.json или базу знаний прямо из чата по кнопке карточки[cite: 4].
  • Экспорт и отправка среза:
    • Команда формирования итоговой выгрузки для руководства в формате PDF/Markdown с передачей файла пользователю[cite: 4].

10. Изолированная песочница кода (Code Execution Sandbox Engine)

  • Docker/gVisor контур:
    • Создание изолированного контейнера без доступа к внешней сети (network: none) с ограниченными лимитами по памяти и CPU (cgroups)[cite: 4].
    • Настройка безопасного монтирования только необходимых CSV/Parquet-файлов данных в режиме Read-Only[cite: 4].
  • Динамические Python/Pandas вычисления:
    • Инструмент генерации и безопасного выполнения скриптов агрегации и аналитики данных СКУД / 1С на лету[cite: 4].
    • Перехват stdout/stderr, сбор результатов расчетов и графиков с передачей в UI-чата[cite: 4].