# План реализации (ROADMAP) ## 1. Очистка от регулярок и костылей (`tool_injector.py`) - [x] Полностью удалить принудительные перехваты текста регулярными выражениями для команд добавления, редактирования и удаления пунктов[cite: 4]. - [x] Оставить в модуле только базовую санитарную очистку сырых тегов (``)[cite: 4]. --- ## 2. Настройка контекста и инструкций сессии (`agent.py`) - [x] Передать управление диалогом языковой модели через системный блок `role: "system"`[cite: 4]. - [x] При активном состоянии `PROMPT_PREVIEW` передавать модели инструкцию: - **Подтверждение / отмена / корректировка:** продолжать работу с превью и вызывать соответствующие инструменты[cite: 4]. - **Смена темы:** вежливо напомнить об открытом изменении и запросить решение[cite: 4]. - [x] Обеспечить видимость эфемерных сообщений (`is_ephemeral = 1`) для модели во время активной работы с превью[cite: 4]. - [x] Внедрить семантический Topic Drift Guard (`idle_turns` = 3) с вопросами и кнопками из `tool_action_registry`[cite: 4]. - [x] Реализовать детерминированный мгновенный сброс сессии и зачистку эфемерного контекста при вызове сторонних инструментов[cite: 4]. --- ## 3. Очистка эфемерных сообщений при завершении (`fast_path.py` / `context_manager.py`) - [x] Настроить удаление временных сообщений превью (`db_purge_ephemeral_messages`) строго в момент нажатия кнопок **«Подтвердить»** или **«Отменить»**[cite: 4]. - [x] Сбрасывать состояние сессии в базе данных после фиксации решения[cite: 4]. - [x] Внедрить прямое точечное применение изменений через `db_apply_prompt_node_action`[cite: 4]. - [x] Добавить обработку фазы `PROMPT_FOLLOWUP` с кнопками завершения и очистки контекста[cite: 4]. - [x] Создать `context_manager.py` для строгого разграничения служебных tool-пар (`is_ephemeral=1`) и содержательного диалога (`is_ephemeral=0`), сохраняя беседы Topic Drift в истории[cite: 4]. --- ## 4. Инлайн-редактор в окне диалога (`core.js`) - [x] Проверить работу блока ручного редактирования (`inline-prompt-editor-container`) с кнопками **«Сохранить правки»** и **«Свернуть»**[cite: 4]. - [x] Обеспечить сохранение черновика через API (`/api/v1/chat/draft`) и отображение обновленного текста перед подтверждением[cite: 4]. - [x] Реализовать двусторонний клиентский Diff-рендерер (одновременная подсветка добавленных строк и зачеркивание удаленных `[УДАЛЕНИЕ]`)[cite: 4]. - [x] Добавить авто-форматирование и отступы подпунктов (`X.Y.`) при ручном сохранении черновика[cite: 4]. --- ## 5. Тестирование и валидация системного промпта - [x] **Нативные вызовы:** проверить добавление, редактирование и удаление пунктов через нативные вызовы модели (`db_prompt_node_edit`)[cite: 4]. - [x] **Контекстные сценарии:** проверить поведение модели при смене темы диалога оператором (Guardrail)[cite: 4]. - [x] **UI и очистка:** проверить ручное редактирование через кнопку в окне чата и последующую очистку контекста (`db_purge_ephemeral_messages`)[cite: 4]. --- ## 6. Распространение архитектурного паттерна на модуль задач (`tasks`) - [x] **Масштабирование UI задач:** - Увеличена ширина карточки до `max-w-4xl` и динамическая высота скролла до `70vh`[cite: 4]. - Реализованы переключатели фильтрации: «В работе» (по умолчанию), «В планах», «Готово», «Все»[cite: 4]. - Разделены кнопки действия: «В работу» (для плановых) и «Готово» (для текущих)[cite: 4]. - [x] **Инлайн-редактирование карточки задачи:** - Плавная трансформация карточки в 3-строчную форму (текст, дата со встроенным пикером, выпадающий список важности)[cite: 4]. - Отображение даты создания задачи[cite: 4]. - Сохранение через REST API эндпоинт `PATCH /api/v1/tasks/{id}`[cite: 4]. - [x] **Детерминированный Fast-Path и двухфазное удаление:** - Мгновенная смена статусов без задержек LLM[cite: 4]. - Карточка подтверждения удаления с автоочисткой контекста[cite: 4]. - [x] **Генерация отчетов задач в Markdown:** - Добавлен инструмент `db_export_tasks_markdown` для формирования Markdown-файла с группировкой по модулям и чекбоксами `[x]` / `[ ]`[cite: 3]. - Реализован роутер безопасной отдачи файлов с сохранением имени (`/api/v1/files/download/...`)[cite: 3]. - [x] **Доменная консолидация задач:** - Реализован консолидированный инструмент `db_tasks_edit(action: ["ADD", "UPDATE", "DELETE", "EXPORT"], ...)`[cite: 3]. --- ## 7. Распространение на модуль снапшотов (`snapshots`) - [x] **Поддержка Y-снапшотов:** универсальный парсинг и поиск по `snapshot_id LIKE 'Y%'` и срезам за 22:00:00[cite: 4]. - [x] **Single Active Snapshot View:** сохранение активного среза в контексте для аналитики с автоматической ротацией и зачисткой при запросе новых дат[cite: 4]. - [x] **Интерактивный UI с чекбоксами и защитой срезов:** - Чекбоксы в строках дневных срезов и кнопка «Выбрать все» в шапке[cite: 3]. - Защита итогового вечернего среза Y (иконка замочка `🔒`, блокировка выбора)[cite: 3]. - Динамическая кнопка «Удалить выбранные (N)» в подвале карточки[cite: 3]. - [x] **Детерминированный 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].