Move dataset review clarification into the assistant workspace and rework the review page into a chat-centric layout with execution rails. Add session-scoped assistant actions for mappings, semantic fields, and SQL preview generation. Introduce optimistic locking for dataset review mutations, propagate session versions through API responses, and mask imported filter values before assistant exposure. Refresh tests, i18n, and spec artifacts to match the new workflow. BREAKING CHANGE: dataset review mutation endpoints now require the X-Session-Version header, and clarification is no longer handled through ClarificationDialog-based flows
ss-tools
Инструменты автоматизации для Apache Superset: миграция, версионирование, аналитика и управление данными
📋 О проекте
ss-tools — это комплексная платформа для автоматизации работы с Apache Superset, предоставляющая инструменты для миграции дашбордов, управления версиями через Git, LLM-анализа данных и многопользовательского контроля доступа. Система построена на модульной архитектуре с плагинной системой расширений.
🎯 Ключевые возможности
🔄 Миграция данных
- Миграция дашбордов и датасетов между окружениями (dev/staging/prod)
- Dry-run режим с детальным анализом рисков и предпросмотром изменений
- Автоматическое маппинг баз данных и ресурсов между окружениями
- Поддержка legacy-данных с миграцией из SQLite в PostgreSQL
🌿 Git-интеграция
- Версионирование дашбордов через Git-репозитории
- Управление ветками и коммитами с помощью LLM
- Деплой дашбордов из Git в целевые окружения
- История изменений с детальным diff
🤖 LLM-аналитика
- Автоматическая валидация дашбордов с помощью ИИ
- Генерация документации для датасетов
- Assistant API для natural language команд
- Интеллектуальное коммитинг с подсказками сообщений
📊 Управление и мониторинг
- Многопользовательская авторизация (RBAC)
- Фоновые задачи с реальным логированием через WebSocket
- Унифицированные отчеты по выполненным задачам
- Хранение артефактов с политиками retention
- Аудит логирование всех действий
🔌 Плагины
- MigrationPlugin — миграция дашбордов
- BackupPlugin — резервное копирование
- GitPlugin — управление версиями
- LLMAnalysisPlugin — аналитика и документация
- MapperPlugin — маппинг колонок
- DebugPlugin — диагностика системы
- SearchPlugin — поиск по датасетам
🏗️ Архитектура
Технологический стек
Backend:
- Python 3.9+ (FastAPI, SQLAlchemy, APScheduler)
- PostgreSQL (основная БД)
- GitPython для Git-операций
- OpenAI API для LLM-функций
- Playwright для скриншотов
Frontend:
- SvelteKit (Svelte 5.x)
- Vite
- Tailwind CSS
- WebSocket для реального логирования
DevOps:
- Docker & Docker Compose
- PostgreSQL 16
Модульная структура
ss-tools/
├── backend/ # Backend API
│ ├── src/
│ │ ├── api/ # API маршруты
│ │ ├── core/ # Ядро системы
│ │ │ ├── task_manager/ # Управление задачами
│ │ │ ├── auth/ # Авторизация
│ │ │ ├── migration/ # Миграция данных
│ │ │ └── plugins/ # Плагины
│ │ ├── models/ # Модели данных
│ │ ├── services/ # Бизнес-логика
│ │ └── schemas/ # Pydantic схемы
│ └── tests/ # Тесты
├── frontend/ # SvelteKit приложение
│ ├── src/
│ │ ├── routes/ # Страницы
│ │ ├── lib/
│ │ │ ├── components/ # UI компоненты
│ │ │ ├── stores/ # Svelte stores
│ │ │ └── api/ # API клиент
│ │ └── i18n/ # Мультиязычность
│ └── tests/
├── docker/ # Docker конфигурация
├── docs/ # Документация
└── specs/ # Спецификации
🚀 Быстрый старт
Требования
Локальная разработка:
- Python 3.9+
- Node.js 18+
- npm
- 2 GB RAM (минимум)
- 5 GB свободного места
Docker (рекомендуется):
- Docker Engine 24+
- Docker Compose v2
- 4 GB RAM (для стабильной работы)
Установка и запуск
Вариант 1: Docker (рекомендуется)
# Клонирование репозитория
git clone <repository-url>
cd ss-tools
# Запуск всех сервисов
docker compose up --build
# После запуска:
# Frontend: http://localhost:8000
# Backend API: http://localhost:8001
# PostgreSQL: localhost:5432
Вариант 2: Локально
# Backend
cd backend
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
python3 -m uvicorn src.app:app --reload --port 8000
# Frontend (в новом терминале)
cd frontend
npm install
npm run dev -- --port 5173
Первичная настройка
# Инициализация БД
cd backend
source .venv/bin/activate
python src/scripts/init_auth_db.py
# При первом запуске будет создан backend/.env с ENCRYPTION_KEY
# Создание администратора
python src/scripts/create_admin.py --username admin --password '<strong-temporary-secret>'
🏢 Enterprise Clean Deployment (internal-only)
Для разворота в корпоративной сети используйте профиль enterprise clean:
- очищенный дистрибутив без test/demo/load-test данных;
- запрет внешних интернет-источников;
- загрузка ресурсов только с внутренних серверов компании;
- обязательная блокирующая проверка clean/compliance перед выпуском.
Операционный workflow (CLI/API/TUI)
1) Headless flow через CLI (рекомендуется для CI/CD)
cd backend
# 1. Регистрация кандидата
.venv/bin/python3 -m src.scripts.clean_release_cli candidate-register \
--candidate-id 2026.03.09-rc1 \
--version 1.0.0 \
--source-snapshot-ref git:release/2026.03.09-rc1 \
--created-by release-operator
# 2. Импорт артефактов
.venv/bin/python3 -m src.scripts.clean_release_cli artifact-import \
--candidate-id 2026.03.09-rc1 \
--artifact-id artifact-001 \
--path backend/dist/package.tar.gz \
--sha256 deadbeef \
--size 1024
# 3. Сборка манифеста
.venv/bin/python3 -m src.scripts.clean_release_cli manifest-build \
--candidate-id 2026.03.09-rc1 \
--created-by release-operator
# 4. Запуск compliance
.venv/bin/python3 -m src.scripts.clean_release_cli compliance-run \
--candidate-id 2026.03.09-rc1 \
--actor release-operator
2) API flow (автоматизация через сервисы)
- V2 candidate/artifact/manifest API:
POST /api/clean-release/candidatesPOST /api/clean-release/candidates/{candidate_id}/artifactsPOST /api/clean-release/candidates/{candidate_id}/manifestsGET /api/clean-release/candidates/{candidate_id}/overview
- Legacy compatibility API (оставлены для миграции клиентов):
POST /api/clean-release/candidates/preparePOST /api/clean-release/checksGET /api/clean-release/checks/{check_run_id}
3) TUI flow (тонкий клиент поверх facade)
cd /home/busya/dev/ss-tools
./run_clean_tui.sh 2026.03.09-rc1
Горячие клавиши:
F5: Run ComplianceF6: Build ManifestF7: Reset DraftF8: ApproveF9: PublishF10: Refresh Overview
Важно: TUI требует валидный TTY. Без TTY запуск отклоняется с инструкцией использовать CLI/API.
Типовые внутренние источники:
repo.intra.company.localartifacts.intra.company.localpypi.intra.company.local
Если найден внешний endpoint, выпуск получает статус BLOCKED до исправления.
Docker release для изолированного контура
Текущий enterprise clean профиль уже задаёт policy-level ограничения для внутреннего контура. Следующий логичный шаг для релизного процесса — выпускать не только application artifacts, но и готовый Docker bundle для разворота без доступа в интернет.
Целевой состав offline release-пакета:
backendimage с уже установленными Python-зависимостями;frontendimage с уже собранным SvelteKit bundle;postgresimage или внутренний pinned base image;docker-compose.enterprise-clean.ymlдля запуска в air-gapped окружении;.env.enterprise-clean.exampleс обязательными переменными;- manifest с версиями, sha256 и перечнем образов;
- инструкции по
docker load/docker compose upбез обращения к внешним registry.
Рекомендуемый workflow для такого релиза:
# 1. Собрать образы в подключённом контуре
./scripts/build_offline_docker_bundle.sh v1.0.0-rc2-docker
# 2. Передать dist/docker/* в изолированный контур
# 3. Импортировать образы локально
docker load -i dist/docker/backend.v1.0.0-rc2-docker.tar
docker load -i dist/docker/frontend.v1.0.0-rc2-docker.tar
docker load -i dist/docker/postgres.v1.0.0-rc2-docker.tar
# 4. Подготовить env из шаблона
cp dist/docker/.env.enterprise-clean.example .env.enterprise-clean
# 4a. Для первого запуска задать bootstrap администратора
# INITIAL_ADMIN_CREATE=true
# INITIAL_ADMIN_USERNAME=<org-admin-login>
# INITIAL_ADMIN_PASSWORD=<temporary-strong-secret>
# 5. Запустить только локальные образы
docker compose --env-file .env.enterprise-clean -f dist/docker/docker-compose.enterprise-clean.yml up -d
Bootstrap администратора выполняется entrypoint-скриптом внутри backend container:
- если
INITIAL_ADMIN_CREATE=true, контейнер вызываетcreate_admin.pyперед стартом API; - если администратор уже существует, учётная запись не меняется;
- теги в
.env.enterprise-clean.exampleдолжны совпадать с фактически загруженными образамиss-tools-backend:v1.0.0-rc2-dockerиss-tools-frontend:v1.0.0-rc2-docker; - после первого входа пароль должен быть ротирован, а
INITIAL_ADMIN_CREATEвозвращён вfalse.
Ограничения для production-grade offline release:
- build не должен тянуть зависимости в изолированном контуре;
- все base images должны быть заранее зеркалированы во внутренний registry или поставляться как tar;
- runtime-конфигурация не должна ссылаться на внешние API/registry/telemetry endpoints;
- clean/compliance manifest должен включать docker image digests как часть evidence package.
Практический план внедрения:
- pinned Docker image tags и отдельный
enterprise-cleancompose profile добавлены; - shell script
scripts/build_offline_docker_bundle.shдобавлен дляbuild -> save -> checksum; - следующим шагом стоит включить docker image digests в clean-release manifest;
- следующим шагом стоит добавить smoke-check, что compose-файлы не содержат внешних registry references вне allowlist.
📖 Документация
🧪 Тестирование
# Backend тесты
cd backend
source .venv/bin/activate
pytest
# Frontend тесты
cd frontend
npm run test
# Запуск конкретного теста
pytest tests/test_auth.py::test_create_user
🔐 Авторизация
Система поддерживает два метода аутентификации:
- Локальная аутентификация (username/password)
- ADFS SSO (Active Directory Federation Services)
Управление пользователями и ролями
# Получение списка пользователей
GET /api/admin/users
# Создание пользователя
POST /api/admin/users
{
"username": "newuser",
"email": "user@example.com",
"password": "password123",
"roles": ["analyst"]
}
# Создание роли
POST /api/admin/roles
{
"name": "analyst",
"permissions": ["dashboards:read", "dashboards:write"]
}
📊 Мониторинг
Отчеты о задачах
# Список всех отчетов
GET /api/reports?page=1&page_size=20
# Детали отчета
GET /api/reports/{report_id}
# Фильтры
GET /api/reports?status=failed&task_type=validation&date_from=2024-01-01
Активность
- Dashboard Hub — управление дашбордами с Git-статусом
- Dataset Hub — управление датасетами с прогрессом маппинга
- Task Drawer — мониторинг выполнения фоновых задач
- Unified Reports — унифицированные отчеты по всем типам задач
🔄 Обновление системы
# Обновление Docker контейнеров
docker compose pull
docker compose up -d
# Обновление зависимостей Python
cd backend
source .venv/bin/activate
pip install -r requirements.txt --upgrade
# Обновление зависимостей Node.js
cd frontend
npm install