16 KiB
16 KiB
План реализации (ROADMAP)
1. Очистка от регулярок и костылей (tool_injector.py) [ЗАВЕРШЕНО]
- Полностью удалить принудительные перехваты текста регулярными выражениями для команд добавления, редактирования и удаления пунктов[cite: 3].
- Оставить в модуле только базовую санитарную очистку сырых тегов (
<tool_call>)[cite: 3].
2. Настройка контекста и инструкций сессии (agent.py) [ЗАВЕРШЕНО]
- Передать управление диалогом языковой модели через системный блок
role: "system"[cite: 3]. - При активном состоянии
PROMPT_PREVIEWпередавать модели инструкцию:- Подтверждение / отмена / корректировка: продолжать работу с превью и вызывать соответствующие инструменты[cite: 3].
- Смена темы: вежливо напомнить об открытом изменении и запросить решение[cite: 3].
- Обеспечить видимость эфемерных сообщений (
is_ephemeral = 1) для модели во время активной работы с превью[cite: 3]. - Внедрить семантический Topic Drift Guard (
idle_turns= 3) с вопросами и кнопками изtool_action_registry[cite: 3]. - Реализовать детерминированный мгновенный сброс сессии и зачистку эфемерного контекста при вызове сторонних инструментов[cite: 3].
3. Очистка эфемерных сообщений при завершении (fast_path.py / context_manager.py) [ЗАВЕРШЕНО]
- Настроить удаление временных сообщений превью (
db_purge_ephemeral_messages) строго в момент нажатия кнопок «Подтвердить» или «Отменить»[cite: 3]. - Сбрасывать состояние сессии в базе данных после фиксации решения[cite: 3].
- Внедрить прямое точечное применение изменений через
db_apply_prompt_node_action[cite: 3]. - Добавить обработку фазы
PROMPT_FOLLOWUPс кнопками завершения и очистки контекста[cite: 3]. - Создать
context_manager.pyдля строгого разграничения служебных tool-пар (is_ephemeral=1) и содержательного диалога (is_ephemeral=0), сохраняя беседы Topic Drift в истории[cite: 3].
4. Инлайн-редактор в окне диалога (core.js) [ЗАВЕРШЕНО]
- Проверить работу блока ручного редактирования (
inline-prompt-editor-container) с кнопками «Сохранить правки» и «Свернуть»[cite: 3]. - Обеспечить сохранение черновика через API (
/api/v1/chat/draft) и отображение обновленного текста перед подтверждением[cite: 3]. - Реализовать двусторонний клиентский Diff-рендерер (одновременная подсветка добавленных строк и зачеркивание удаленных
[УДАЛЕНИЕ])[cite: 3]. - Добавить авто-форматирование и отступы подпунктов (
X.Y.) при ручном сохранении черновика[cite: 3].
5. Тестирование и валидация системного промпта [ЗАВЕРШЕНО]
- Нативные вызовы: проверить добавление, редактирование и удаление пунктов через нативные вызовы модели (
db_prompt_node_edit)[cite: 3]. - Контекстные сценарии: проверить поведение модели при смене темы диалога оператором (Guardrail)[cite: 3].
- UI и очистка: проверить ручное редактирование через кнопку в окне чата и последующую очистку контекста (
db_purge_ephemeral_messages)[cite: 3].
6. Распространение архитектурного паттерна на модуль задач (tasks) [ЗАВЕРШЕНО]
- Масштабирование UI задач:
- Увеличена ширина карточки до
max-w-4xlи динамическая высота скролла до70vh[cite: 3]. - Реализованы переключатели фильтрации: «В работе» (по умолчанию), «В планах», «Готово», «Все»[cite: 3].
- Разделены кнопки действия: «В работу» (для плановых) и «Готово» (для текущих)[cite: 3].
- Увеличена ширина карточки до
- Инлайн-редактирование карточки задачи:
- Плавная трансформация карточки в 3-строчную форму (текст, дата со встроенным пикером, выпадающий список важности)[cite: 3].
- Отображение даты создания задачи[cite: 3].
- Сохранение через REST API эндпоинт
PATCH /api/v1/tasks/{id}[cite: 3].
- Детерминированный Fast-Path и двухфазное удаление:
- Мгновенная смена статусов без задержек LLM[cite: 3].
- Карточка подтверждения удаления с автоочисткой контекста[cite: 3].
- Генерация отчетов задач в 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: 3]. - Single Active Snapshot View: сохранение активного среза в контексте для аналитики с автоматической ротацией и зачисткой при запросе новых дат[cite: 3].
- Интерактивный UI с чекбоксами и защитой срезов:
- Чекбоксы в строках дневных срезов и кнопка «Выбрать все» в шапке[cite: 3].
- Защита итогового вечернего среза Y (иконка замочка
🔒, блокировка выбора)[cite: 3]. - Динамическая кнопка «Удалить выбранные (N)» в подвале карточки[cite: 3].
- Детерминированный Fast-Path удаления срезов:
- Двухфазное подтверждение удаления (одиночное и пакетное) с корректным счётчиком количества удаляемых элементов[cite: 3].
- Защита от сброса фильтра даты (
query_date) при обновлении карточки после удаления[cite: 3].
8. Глубокий архитектурный рефакторинг ядра и сервисов [ЗАВЕРШЕНО]
- Выделение общего слоя ядра (
core/):- Изолированный пул соединений SQLite (
core/connection.py) с поддержкой WAL и таймаутов. - DDL-схемы таблиц и индексов (
core/schema.py). - Репозитории СКУД и 1С (
core/repositories/scud_repo.py,core/repositories/zup_repo.py). - Фасад обратной совместимости (
core/database.py).
- Изолированный пул соединений SQLite (
- Декомпозиция предметных доменов (
services/):- Сервис задач (
services/tasks/), системного промпта (services/prompts/), срезов СКУД (services/snapshots/), базы знаний (services/knowledge/).
- Сервис задач (
- Рефакторинг ETL-конвейера (
services/scud_etl/):- Оркестратор
pipeline.py, детектор аномалийanomaly_detector.py, слияниеmerger.py.
- Оркестратор
- Модульный ИИ-оркестратор (
modules/ai_engine/):- Динамический строитель системного контекста (
context_builder.py). - Изолированные обработчики инструментов в
handlers/.
- Динамический строитель системного контекста (
9. Реляционный реестр исключений, схлопывание мульти-пропусков и автозакрытие 8.5ч [ЗАВЕРШЕНО]
- Реестр исключений в SQLite (
exceptions_registry):- Хранение категорий
departments,positions,fio,position_keywords,include_fioв БД. - Доменный сервис
exceptions_repo.pyи полная поддержка в CLIscripts/db_cli.py exceptions.
- Хранение категорий
- Агрегация мульти-пропусков физлиц в СКУД:
- Функция
aggregate_scud_by_personвmerger.py: объединение событий всех пропусков одного человека (ранний вход, поздний выход, присутствие). - Автоматическая фиксация аномалий дублирования пропусков (
DUPLICATE_SCUD_CARD).
- Функция
- Умный выбор ставки совместителей 1С:ЗУП:
- Функция
select_best_zup_positionвmerger.py: привязка ставки 1С по подразделению физического нахождения в СКУД.
- Функция
- Автозакрытие смен по Правилу 8.5ч:
- Для забывших отметиться на выходе офисных сотрудников: автоматический расчет
Вход + 8ч 30мин, норма 8 часов и отклонение0:00вexcel_exporter.py.
- Для забывших отметиться на выходе офисных сотрудников: автоматический расчет
- Кэш сопоставлений личностей (
person_identity_mapping):- Таблица в SQLite и команды
db_cli.py mapping [list|add|del]. - Теневой режим ИИ-подсказок по нечетким ФИО в
text_reporter.py.
- Таблица в SQLite и команды
- Каскадный fallback кадровых отсутствий:
MS SQL ЗУП\rightarrowрезервный парсингОтсутствия_*.xlsx\rightarrowstatic_reason_workers.csv.
10. Разграничение Сводки и Отчета + Почасовые срезы и Y-23:59:59 [В РАБОТЕ]
- Корректировка финишного среза Y на 23:59:59:
- Обновить время вечернего среза с
22:00:00на23:59:59вservices/scud_export.py,scud_repo.pyиpipeline.py.
- Обновить время вечернего среза с
- Разделение генераторов отчетов:
- Создать
services/scud_etl/svodka_generator.py(оперативная сводка, последний доступный срез или выбранный дневной). - Создать
services/scud_etl/otchet_generator.py(детальный отчет за прошлую смену, строго по единственному итоговомуY-снапшоту за 23:59:59). - Исключить устаревший
report_generator.py.
- Создать
- Параметризация
main_etl.py:- Добавить поддержку аргументов
--date ДД.ММ.ГГГГи--snapshot IDдля свободного запуска расчета за любой прошлый день.
- Добавить поддержку аргументов
- Политика почасовых срезов (Hourly Snapshots) и retention-очистка:
- Реализовать фоновое снятие часовых срезов в течение рабочего дня.
- Настроить ночную очистку промежуточных дневных срезов с сохранением полуденного (13:00) и финишного (
Y23:59:59).
- Толерантный поиск срезов (Smart Snap-to-Grid, ±15–30 мин):
- Поиск готового снапшота в SQLite при запросе оператора с возможностью мгновенного построения сводки без лишних запросов к MS SQL Орион.
- Формирование On-Demand запроса в MS SQL Орион при отсутствии подходящего среза.
11. Интеллектуальный кадровый арбитраж ДО генерации отчетов [В ПЛАНАХ]
- Двухконтурный запуск ИИ:
- Перенос арбитража не сопоставившихся персон на этап [2.5] ДО сохранения Excel-файлов
сводка.xlsxиотчет.xlsx.
- Перенос арбитража не сопоставившихся персон на этап [2.5] ДО сохранения Excel-файлов
- Якорный табельный номер (TabNo Matching):
- Извлечение
TabNoиз MS SQL Орион (pList.TabNo) и MS SQL 1С:ЗУП. - Добавление колонок
scud_tab_noиzup_tab_noв SQLite (scud_logs,zup_staff,person_identity_mapping). - Защита от смены фамилий и опечаток через неизменяемый табельный номер.
- Извлечение
- Динамическая инвалидация кэша связок:
- Автоматическая отбраковка записей кэша при увольнении сотрудника или несовпадении подразделения.
12. Изолированная песочница кода (Code Execution Sandbox Engine) [В ПЛАНАХ]
- Docker/gVisor контур:
- Создание изолированного контейнера без доступа к внешней сети (network: none) с ограниченными лимитами по памяти и CPU (cgroups)[cite: 3].
- Настройка безопасного монтирования только необходимых CSV/Parquet-файлов данных в режиме Read-Only[cite: 3].
- Динамические Python/Pandas вычисления:
- Инструмент генерации и безопасного выполнения скриптов агрегации и аналитики данных СКУД / 1С на лету[cite: 3].
- Перехват stdout/stderr, сбор результатов расчетов и графиков с передачей в UI-чата[cite: 3].